<b>u-boot</b><b>引導友善之臂</b><b>Linux</b><b>核心</b><b></b>
作者:kangear
Blog:kangear.blog.chinaunix.net
當我剛接觸u-boot時,不想自産自用,先用人家移植好的。可是困難重重,國嵌的u-boot不支援下載下傳到nandflash,找到tekkamanninja的,連編譯都不會(他用的是他自己的交叉工具鍊,我用的友善的)。這個u-boot呢,友善不提供技術支援,tekkamanninja也沒有義務去一點點解惑。這可就難為初學者了。
不過現在好了,終于把兩個強者結合到一起了,用tekkamanninja的u-boot引導友善的強大linux核心。這樣你的mini2440從頭到尾都開源了。
看《mini2440之linux移植開發實戰指南》時看到神奇的surpervivi,是怎樣工作的:
起點
大小
内容
40000
bootloader
20000
Linux啟動參數
60000
500000
kernel
560000
rest
根檔案系統
這是mach-mini2440.c中nandflash的分區,原則上來說按照分區把bootloader,kernell,fs下載下傳進去就可以了。但經過實驗發現事實不是這樣的。
我實際下載下傳分區是:
U-boot
U-boot環境變量
80000
250000
X/4000000
都留了一點空隙,且x是下載下傳到記憶體後看到的根檔案系統大小,4000000是擦除時大小。
(x是小于4000000(64M)的因為nandflash的東西都是通過記憶體中轉下載下傳的)。
分析完畢下面博覽會步驟:
1.用mkimage工具加工一下linux核心。
mkimage是編譯u-boot時連帶産生的一個工具,用它加工後的zImage檔案即可用u-boot引導!
mkimage使用方法:

倒數第二個是源檔案的名字,做好後會出現一個zImage.img,,把其放到tftpboot目錄。
2.裁剪根檔案系統
根檔案系統rootfs_qtopia_qt4大小為96M遠遠大于記憶體64M大小,這樣就無法通過記憶體中轉下載下傳到nandflash中了(天嵌好像解決了這個問題,但是人家不開源 %>_)。
我的裁剪方法是去掉了兩個圖形化軟體qtopia和qt4.即删除opt目錄下的qtopia目錄以及usr/local/下的Trolltech目錄。這樣就剛好小于64M了。
另外把/etc/init.d/rcS中qtopia的啟動項注釋掉。
現在就可以用友善的mkyaffs2-128M重新制作成映像,把其放到tftpboot目錄。
3.使用U-boot進行下載下傳
準備工作都做好了,下面就開始下載下傳:
nand scrub 注釋:格式化nandflash
tftp u-boot.bin
nand write 30008000 0 40000
tftp zImage.img
nand wirte 30008000 80000 250000
tftp rootfs_qtopia_qt4.img 注釋:下載下傳完成後注意會出現實際大小(hex x)
nand erase 560000 4000000
nand write.yaffs 30008000 560000 x 注釋:這個x是上邊實際大小
成功後就可以改u-boot中環境變量:bootargs 和 bootcmd了
改為:bootargs 'noinitrd root=/dev/mtdblock3 console=ttySAC0,115200 init=/linuxrc mem64M'
bootcmd 'nand read 0x30008000 0x80000 0x250000;bootm'
重新開機開發闆即可成功引導了。有不明白的可以回複或是發郵件。(下一步要做的是實作下載下傳完整根檔案系統的u-boot了)