Apr 29, 2008

與帥哥安的對決

一勝N敗 (N~5)

今天終於取得第二勝了

菸酒生的好夥伴:不只是文獻管理工具 - zotero

之前介紹過Bibus

這次是另一個更好用的工具:zotero

Apr 28, 2008

S3C2440, USB in Linux

他媽的USB似乎根本就沒啟動

帥哥的測試:
GPH10 控制小 port:0 是打開 1 是關掉
GPH8 控制大 port: 1 是打開 0 是關掉

送電之後就可以用了...他媽的白費兩個禮拜

05/23 :
之前請正哥寄信去要電路圖都不屌我們

COLOR 打電話去就要到了

更正
GPH8 : USB_HOST_EN

GPH10 : nUSB_PULL_UP_EN

USB_HOST_EN 控制 USB_H_5V --> USB HOST PORT 的供電 (大PORT)

nUSB_PULL_UP_EN 控制 USB_C_D+ --> MINI USB 的供電 (小PORT)

第一次監考

4/26,27二技聯招

第一次監考,就是大型考試

DEBUGFS Support

(host)# cd rootfs

(host)# pwd
/home2/fyodor/filesystem/rootfs

(busybox)# mkdir var/debug

(busybox)# vi etc/fstab
加一行:none  /var/debug    debugfs  ramfs 0  0

(busybox)# modprobe rt73usb
phy0 -> rt2x00_set_chip: Info - Chipset detected - rt: 1300, rf: 0002, rev: 000.
usbcore: registered new interface driver rt73usb

(busybox)# cd /var/debug

(busybox)# ls
drwxr-xr-x    3 0        0               0 Jan  1 00:32 ieee80211
drwxr-xr-x    3 0        0               0 Jan  1 00:00 ohci
drwxr-xr-x    2 0        0               0 Jan  1 00:00 usbmon

rt73的debugfs出來的資訊就在ieee80211裡面

ASUS WL-167G (USB WLAN Adapter) For ARM Linux

UPDATE : 學弟搞定了
usb host timeout的原因是....usb controller過熱被保護電路關電.......

林老師卡好勒


=============================================================
great~ it offers linux driver~

copy the directory Linux/rt73 in the Driver CDROM    ( remember to chmod +w )

follow the README in Linux/rt73/module/
if you got error "undefined get_wireless_stats"

just fix rtmp_main.c, replace  netdev->get_wireless_stats to netdev->get_stats

=======================================

編譯module


網路上有非官方driver : rt2x00 project

每天最新版本

或是直接用CVS更新
cvs -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 login

cvs -z3 -d:pserver:anonymous@rt2400.cvs.sourceforge.net:/cvsroot/rt2400 co -P source/rt73

修改Makefile

最前面增加五行

ARCH=arm

CROSS_COMPILE=/usr/local/arm/3.4.1/bin/arm-linux-

KERNDIR=/home2/fyodor/kernel/linux-2.6.25__from__2.6.24.3

(KERNDIR要指到目標板所使用的KERNEL SOURCE,而且KERNEL必須先設定好交叉編譯)

ROOTFS = /home2/fyodor/filesystem/rootfs

MODDIR = /lib/modules/2.6.24.3/extra

把module install 的目標位置依照目標kernel版本設定

否則就會安裝到目前uname -r 所找到的kernel module位置...

ps. make install時,modules.dep的設定不會跟著MODDIR而改變

所以還是得設定成extra

修改一行
FIRM_DIR :=    $(ROOTFS)/lib/firmware

編譯

(host)# make armdebug

警告訊息

!!! WARNING: Module file much too big (>1MB)
!!! Check your kernel settings or use 'strip'
*** Module rt73.ko built successfully

表示編出來的module太大了,這個好解決

必須削減(strip)多餘訊息 (strip之後,板子上無法modprobe!format不合)
(host)# arm-linux-strip ./rt73.ko

把module安裝到target rootfs


這一步,我不很確定怎麼做,試看看吧~

(host)# sudo make install
*** Install module in /lib/modules/2.6.24.3/extra ...
make[1]: Entering directory `/home2/fyodor/kernel/linux-2.6.25__from__2.6.24.3'
INSTALL /home2/fyodor/filesystem/tools/wirelessTool/WL-167G/rt73-cvs/rt73-cvs-2008042100/Module/rt73.ko
DEPMOD  2.6.24.3
make[1]: Leaving directory `/home2/fyodor/kernel/linux-2.6.25__from__2.6.24.3'
/sbin/depmod -a
*** Update /etc/modprobe.d/ralink alias for wlan*
*** Install firmware in /home2/fyodor/filesystem/rootfs/lib/firmware ...
*** Check old config ...

警告訊息

WARNING: Couldn't find symtab and strtab in module /lib/modules/2.6.20-15-generic/extra/rt73.ko
*** Update /etc/modprobe.d/ralink alias for wlan*
*** Install firmware in /home2/fyodor/filesystem/rootfs/lib/firmware ...
*** Check old config ...

因為這一個編譯所使用的kernel版本2.6.24.3,和host機器上目前使用的版本2.6.15不同導致這個錯誤不知道怎麼處理... 應該是沒關係因為真正運作時,這個module在板子上所配合的kernel 版本就對上了參考: http://www.linuxsir.org/bbs/thread307321.html
結束

一樣照著路徑複製到rootfs裡面
module : /lib/modules/2.6.24.3/extra/rt73.ko

firmware : /lib/firmware/rt73.bin

status code :

s3c2410-ohci s3c2410-ohci: urb c2704ec0 path 1 ep0in 5ec20000 cc 5
–> status -62

all status code : include/asm-generic/errno.h
#define ETIME 62      /* Timer expired */

Document of error codes : Documentation/usb/error-codes.txt

-ETIME (**)
No response packet received within the prescribed bus turn-around time.  This error may instead be reported as -EPROTO or -EILSEQ.

懶惰的script



ROOTFS=/home2/fyodor/filesystem/rootfs
echo " install module to $ROOTFS/lib/modules/2.6.24.3/extra/"
cp /lib/modules/2.6.24.3/extra/rt73.ko $ROOTFS/lib/modules/2.6.24.3/extra/rt73.ko
echo " install firmware to $ROOTFS/lib/firmware/"
cp /lib/firmware/rt73.bin $ROOTFS/lib/firmware/
ls -alh $ROOTFS/lib/modules/2.6.24.3/extra/rt73.ko
ls -alh $ROOTFS/lib/firmware/rt73.bin

modprobe


[busybox] # modprobe rt73 debug=15 firmware=/lib/firmware/rt73.bin

[busybox] # ifconfig wlan0 up

[busybox] # dmesg
rt73: USBVendorRequest TIMEOUT
rt73: Retry count exhausted or device removed!!!
rt73: BBP version = 0
s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0in 5ec20000 cc 5 --> status -62

rt73: USBVendorRequest TIMEOUT
s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0out 5ec20000 cc 5 --> status -62

rt73: USBVendorRequest TIMEOUT
s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0in 5ec20000 cc 5 --> status -62

rt73: USBVendorRequest TIMEOUT
s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0in 5ec20000 cc 5 --> status -62

rt73: USBVendorRequest TIMEOUT
s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0in 5ec20000 cc 5 --> status -62

rt73: USBVendorRequest TIMEOUT
rt73: Retry count exhausted or device removed!!!
rt73: BBP version = 0

為什麼會timeout勒.....  搞了一個禮拜還是搞不清楚
rt73: USBVendorRequest TIMEOUT是我自己加的訊息

總之status -62 = -ETIME,就是TIMEOUT

上面說過了,status code的詳細定義在$(KERNDIR)/include/asm-generic/errno.h

error的解釋在$(KERNDIR)/Documentation/usb/error-codes.txt

去rt2x00.serialmonkey.com post問題,一邊trace driver 一邊等

覺得問題比較有可能出在s3c2410-ohci

畢竟這部份的2440移植,我做的很粗糙

Error Code Tracing


rt73: USBVendorRequest TIMEOUT


$(RT73)/Module/rtusb_io.c ===> RTUSB_VendorRequest function內的ret 值

ret=usb_control_msg(pAd->pUsb_Dev, usb_sndctrlpipe( pAd->pUsb_Dev, 0 ), \

Request, RequestType, Value,Index, TransferBuffer, TransferBufferLength, \

CONTROL_TIMEOUT_JIFFIES);

message : s3c2410-ohci s3c2410-ohci: urb c1980840 path 1 ep0out 5ec20000 cc 5 --> status -62


來源:drivers/usb/host/ohci-q.c : dl_done_list() --> dl_reverse_done_list() --> ed_halted()

誰呼叫RTUSB_VendorRequest


RTUSBReadMACRegister

RTUSBWriteMACRegister


Apr 25, 2008

微軟真好笑

先是提出一份鬼打牆的OOXML規格書

然後行賄被抓包

在微軟的 OOXML眼看就要通過 ISO認證之際,挪威傳出投票弊端

接著被發現連自家軟體都不支援自家規格

MS Office 2007沒有通過 OOXML相容性測試


Apr 22, 2008

NAND Flash ~ empty flash 問題

Openmoko - 惱人的 Empty flash 問題

# sumtool -e 0x20000 --no-cleanmarkers --littleendian -i output/rootfs.jffs2 -o output/newrootfs.jffs2

Apr 19, 2008

warning: `regparm' attribute directive ignored

交叉編譯rt73usb driver的時候,需要指定kernel source路徑

# cd RT73_Linux_STA_Drv1.0.4.0/Module

# make ARCH=arm CROSS_COMPILE=arm-linux-

\KERNDIR=/home2/fyodor/kernel/linux-2.6.25__from__2.6.24.3/

出現了這個警告

warning: `regparm' attribute directive ignored

網路上查到是說

kernel src directory裡面的 include/asm

他是一個link,應該要指向corss compile目標

(在我這個情況就是asm-arm)

如果沒把asm 指到 asm-arm,就會出現這個warning

http://osdir.com/ml/linux.gps/2006-02/msg00049.html

http://linux.chinaunix.net/bbs/archiver/?tid-916672.html

可是我有正確指過去啊....怎麼還是出現這個warning

Apr 18, 2008

diff & patch 用法

建立patch:


updated dir : src/update

original dir : src/orig

# diff -ruN src/orig src/update > my.patch


套用patch:


# cd src/

# patch -p1 < my.patch



Apr 17, 2008

我現在很火

雖然論文題目這件事,不會影響到我....但是我看了很不爽!!

Apr 11, 2008

胖子"自以為"放閃光

還好我昨天比較早回家

聽說胖子在LAB用3G手機跟他的啾講了一個小時的視訊電話

噁心的話一堆這就算了

還不時的對著鏡頭   "噘嘴啾"   "咪咪咪"

幹~~~ 

雖然一點都不閃,但這真是太噁爛了

於是阿鋒特地去把六樓的禁煙海報幹起來

改成這樣貼在LAB門口...真是太精美啦!

DSC00297

尤其是手機螢幕上的照片

(傳說中的金山陽明山兩日遊相簿之封面!?)

DSC00301

天哪~~~  怎麼會有這麼好的同學!帶給大家無盡的歡笑

畢業後就沒辦法天天看到胖子,光是想到就覺得好傷心啊!

Linux Driver - Platform Device

platform-driver


Driver裡面先定義出platform-driver的名稱

這個名稱是s3c2410-ohci

static struct platform_driver ohci_hcd_s3c2410_driver = {
.probe          = ohci_hcd_s3c2410_drv_probe,
.remove         = ohci_hcd_s3c2410_drv_remove,
.shutdown       = usb_hcd_platform_shutdown,
/*.suspend      = ohci_hcd_s3c2410_drv_suspend, */
/*.resume       = ohci_hcd_s3c2410_drv_resume, */
.driver         = {
.owner  = THIS_MODULE,
.name   = "s3c2410-ohci",
},
};

----

platform_driver的資料結構:

[include/linux/platform_device.h]

struct platform_driver {
int (*probe)(struct platform_device *);
int (*remove)(struct platform_device *);
void (*shutdown)(struct platform_device *);
int (*suspend)(struct platform_device *, pm_message_t state);
int (*suspend_late)(struct platform_device *, pm_message_t state);
int (*resume_early)(struct platform_device *);
int (*resume)(struct platform_device *);
struct device_driver driver;
};

resource


[arch/arm/plat-s3c24xx/devs.c"]
/* USB Host Controller */

static struct resource s3c_usb_resource[] = {
[0] = {
.start = S3C24XX_PA_USBHOST,
.end   = S3C24XX_PA_USBHOST + S3C24XX_SZ_USBHOST - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_USBH,
.end   = IRQ_USBH,
.flags = IORESOURCE_IRQ,
}
};

platform-device (單一)


platporm裡要註冊device

使用的name對應到欲使用的driver

還有resource則是對應到上面

[arch/arm/plat-s3c24xx/devs.c"]
struct platform_device s3c_device_usb = {
.name             = "s3c2410-ohci",
.id               = -1,
.num_resources    = ARRAY_SIZE(s3c_usb_resource),
.resource         = s3c_usb_resource,
.dev              = {
.dma_mask = &s3c_device_usb_dmamask,
.coherent_dma_mask = 0xffffffffUL
}
};

EXPORT_SYMBOL(s3c_device_usb)

----

platform_device的資料結構:

[include/linux/platform_device.h]

struct platform_device {
const char      * name;
int             id;
struct device dev;
u32             num_resources;
struct resource * resource;
};

----

device的資料結構:

[include/linux/device.h]

struct device {
struct klist            klist_children;
struct klist_node       knode_parent;           /* node in sibling list */
struct klist_node       knode_driver;
struct klist_node       knode_bus;
struct device           *parent;

struct kobject kobj;
char    bus_id[BUS_ID_SIZE];    /* position on parent bus */
struct device_type      *type;
unsigned                is_registered:1;
unsigned                uevent_suppress:1;

struct semaphore        sem;    /* semaphore to synchronize calls to
* its driver.
*/

struct bus_type * bus;          /* type of bus device is on */
struct device_driver *driver;   /* which driver has allocated this
device */
void            *driver_data;   /* data private to the driver */
void            *platform_data; /* Platform specific data, device
core doesn't touch it */
struct dev_pm_info      power;

#ifdef CONFIG_NUMA
int             numa_node;      /* NUMA node this device is close to */
#endif
u64             *dma_mask;      /* dma mask (if dma'able device) */
u64             coherent_dma_mask;/* Like dma_mask, but for
alloc_coherent mappings as
not all hardware supports
64 bit addresses for consistent
allocations such descriptors. */

struct list_head        dma_pools;      /* dma pools (if dma'ble) */

struct dma_coherent_mem *dma_mem; /* internal for coherent mem
override */
/* arch specific additions */
struct dev_archdata     archdata;

spinlock_t              devres_lock;
struct list_head        devres_head;

/* class_device migration path */
struct list_head        node;
struct class            *class;
dev_t                   devt;           /* dev_t, creates the sysfs "dev" */
struct attribute_group  **groups;       /* optional groups */

void    (*release)(struct device * dev);
};

platform-device (全部)


最後把整個platform特有的device放在devices[]裡面

[arch/arm/mach-s3c2440/mach-smdk2440.c]

static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
};

machine init


在machine init的時候,把devices加進platform

[arch/arm/mach-s3c2440/mach-smdk2440.c]

static void __init smdk2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&smdk2440_fb_info);

platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));

printk("smdk2440 machine init\n");
smdk_machine_init();
}

參考資料


帥哥安的 linux kernel 2.6.24.3 platform device driver

2.6.24 Kernel Document :
driver-model/Platform.txt

driver-model/Driver.txt

Apr 8, 2008

Wireless tools for ARM Linux

Wireless Tools is A collection of tools to configure IEEE 802.11 wireless LAN cards

目前最新版本 wireless_tools.29.tar.gz

抓下來之後修改Makefile

幫老師弄的電腦桌面....

老師默默的偷笑.....真想偷拍他坐在電腦前樣子

哈哈哈~~~

 

DSC00286

Apr 5, 2008

垃圾

2[(001099)21-48-39]  

2[(001088)21-48-37] 

2[(001123)21-47-37] 

2[(001150)21-48-46] 

2[(001175)21-47-45] 

太垃圾了........  還往上推勒~

絕對是故意的

Apr 4, 2008

清明時節雨紛紛

 

早上十點半到實驗室,空無一人,好久沒有當第一名了


Linux Kernel modules in busybox

如果module沒有安裝到 target_rootfs裡面,在板子上就沒有module,也沒有modules.dep。
執行modprobe 會error : modprobe: cannot parse modules.dep

把modules放在busybox_rootfs裡


(~/kernel_src/linux-2.6.24.3) $ make clean

(~/kernel_src/linux-2.6.24.3) $ make

(2.6以上的kernel只要執行make就包含make zImage && make modules)

(~/kernel_src/linux-2.6.24.3) # make modules_install

// 把編譯出來的模組,複製到host機器的 /lib/modules/2.6.24.3/ (最好先把 /lib/modules 備份!)

# ls /lib/modules/2.6.24.3 -l


總計 44
lrwxrwxrwx 1 root root   35 2008-03-29 16:47 build -> /home2/fyodor/kernel/linux-2.6.24.3
drwxr-xr-x 4 root root   96 2008-03-29 16:47 kernel
-rw-r--r-- 1 root root  166 2008-03-29 16:47 modules.alias
-rw-r--r-- 1 root root   69 2008-03-29 16:47 modules.ccwmap
-rw-r--r-- 1 root root 2627 2008-03-29 16:47 modules.dep
-rw-r--r-- 1 root root   73 2008-03-29 16:47 modules.ieee1394map
-rw-r--r-- 1 root root  141 2008-03-29 16:47 modules.inputmap
-rw-r--r-- 1 root root   81 2008-03-29 16:47 modules.isapnpmap
-rw-r--r-- 1 root root   74 2008-03-29 16:47 modules.ofmap
-rw-r--r-- 1 root root   99 2008-03-29 16:47 modules.pcimap
-rw-r--r-- 1 root root   43 2008-03-29 16:47 modules.seriomap
-rw-r--r-- 1 root root 2660 2008-03-29 16:47 modules.symbols
-rw-r--r-- 1 root root  189 2008-03-29 16:47 modules.usbmap
lrwxrwxrwx 1 root root   35 2008-03-29 16:47 source -> /home2/fyodor/kernel/linux-2.6.24.3

除了build 和 source 不需要放到target檔案系統裡,其他全部複製過去

# sudo mkdir -p ~/FileSystem/rootfs/lib/modules/2.6.24.3

# sudo cp /lib/modules/2.6.24.3/* ~/FileSystem/rootfs/lib/modules/2.6.24.3

(如果有手動加 driver,還是要照對應路徑放到rootfs裡面)

vimpress

測試
用vim寫wordpress....


Apr 3, 2008

v66 被推齊

 

整間實驗室力挺到底!

V66被推齊

Apr 2, 2008

module 相關指令 & 設定

載入名為sbc的module,包含相依的modules一起載入

# modprobe sbc
列出系統可使用的模組

# modprobe -l

(也就是/lib/modules/<kernel version>/裡面的東西 )
列出已載入的模組(比 lsmod 更詳細)

# modprobe -c
載入名為sbc的module(不包含相依模組)

# insmod sbc
列出已經載入的module

# lsmod
Module             Size   Used by    Not tainted
cbc                  3904     0
blkcipher          5796     1 cbc

移除名為sbc的module,包含相依的modules一起移除

# modprobe -r sbc
module設定檔

/etc/modules.conf 或 /etc/conf.modules,視版本而定

/lib/modules/<kernel version>/
kernel:此版本kernel 編譯出來的模組

modules.dep:模組相依性的資訊

顯示模組訊息

# modinfo sbc

Linux 裡 S3C2440 的initial 順序

初始化順序在 <kernel src>/arch/arm/plat-s3c24xx/cpu.c

static struct cpu_table cpu_ids[] __initdata{....}
.idcode         = 0x32440000,
.idmask         = 0xffffffff,
.map_io         = s3c244x_map_io,
.init_clocks    = s3c244x_init_clocks,
.init_uarts     = s3c244x_init_uarts,
.init           = s3c2440_init,
.name           = name_s3c2440

這幾個function的原始碼位置:

s3c244x_map_io      --->  arch/arm/plat-s3c24xx/s3c244x.c
s3c244x_init_clocks  --->  arch/arm/plat-s3c24xx/s3c244x.c
s3c244x_init_uarts   --->   arch/arm/plat-s3c24xx/s3c244x.c
s3c2440_init            --->  arch/arm/mach-s3c2440/s3c2440.c

Apr 1, 2008

測試 windows live writer

滿好用的

聽說圖片上傳有問題?

it looks fine..

me_5 

可以抓到theme配置,顯示在程式介面裡

 

MWSnap0401_161659

下方彈出選單可以設定文章分類, 發佈日期, 關鍵字, 回應方式,

ping, 作者, 摘要說明(也就是短網址), 密碼, 引用通告..