天天看點

u-boot引導友善之臂Linux核心

<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使用方法:

u-boot引導友善之臂Linux核心

倒數第二個是源檔案的名字,做好後會出現一個zImage.img,,把其放到tftpboot目錄。

2.裁剪根檔案系統

  根檔案系統rootfs_qtopia_qt4大小為96M遠遠大于記憶體64M大小,這樣就無法通過記憶體中轉下載下傳到nandflash中了(天嵌好像解決了這個問題,但是人家不開源 %&gt;_)。

  我的裁剪方法是去掉了兩個圖形化軟體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了)

繼續閱讀