嵌入式Linux之我行——u-boot-2009.08在2440上的移植詳解(五)
- 主
機(jī):VMWare--Fedora 9 - 開發(fā)板:Mini2440--64MB Nand,Kernel:2.6.30.4
- 編譯器:arm123.com.cn/linux/arm-linux-gcc-4.3.2.tgz" target="_blank">arm-linux-gcc-4.3.2.tgz
- u-boot:u-boot-2009.08.tar.bz2
二、移植步驟
本文引用地址:http://m.butianyuan.cn/article/201611/319003.htm
|
#gedit include/configs/my2440.h |
#define CONFIG_MTD_NAND_YAFFS2 //開啟Nand Flash默認(rèn)分區(qū),注意此處的分區(qū)要和你的內(nèi)核中的分區(qū)保持一致 |
②、在原來(lái)對(duì)Nand操作的命令集列表中添加Yaffs2對(duì)Nand的寫命令,如下:
#gedit common/cmd_nand.c |
U_BOOT_CMD(nand, CONFIG_SYS_MAXARGS, 1, do_nand, //注意:這里只添加了yaffs2的寫命令,因?yàn)槲覀冎挥胾-boot下載(即寫)功能,所以我們沒有添加yaffs2讀的命令
|
接著,在該文件中對(duì)nand操作的do_nand函數(shù)中添加yaffs2對(duì)nand的操作,如下:
//添加yaffs2相關(guān)操作,注意該處又關(guān)聯(lián)到nand_write_skip_bad函數(shù) #if defined(CONFIG_MTD_NAND_YAFFS2) |
③、在include/linux/mtd/mtd.h頭文件的mtd_info結(jié)構(gòu)體中添加上面用到rw_oob和skipfirstblk數(shù)據(jù)成員,如下:
#gedit include/linux/mtd/mtd.h |
#if defined(CONFIG_MTD_NAND_YAFFS2) |
④、在第二步關(guān)聯(lián)的nand_write_skip_bad函數(shù)中添加對(duì)Nand OOB的相關(guān)操作,如下:
#gedit drivers/mtd/nand/nand_util.c |
int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, u_char *buffer) #if defined(CONFIG_MTD_NAND_YAFFS2)
#if !defined(CONFIG_MTD_NAND_YAFFS2)
#if defined(CONFIG_MTD_NAND_YAFFS2) #if defined(CONFIG_MTD_NAND_YAFFS2)
|
⑤、在第四步nand_write_skip_bad函數(shù)中我們看到又對(duì)nand_write函數(shù)進(jìn)行了訪問(wèn),所以這一步是到nand_write函數(shù)中添加對(duì)yaffs2的支持,如下:
#gedit drivers/mtd/nand/nand_base.c |
static int nand_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const uint8_t *buf) #if defined(CONFIG_MTD_NAND_YAFFS2)
#if defined(CONFIG_MTD_NAND_YAFFS2)
#if defined(CONFIG_MTD_NAND_YAFFS2)
|
OK,對(duì)yaffs2支持的代碼已修改完畢,重新編譯u-boot并下載到nand中,啟動(dòng)開發(fā)板,在u-boot的命令行輸入:nand help查看nand的命令,可以看到多了一個(gè)nand write[.yaffs2]的命令,這個(gè)就是用來(lái)下載yaffs2文件系統(tǒng)到nand中的命令了。
⑥、使用nand write[.yaffs2]命令把事前制作好的yaffs2文件系統(tǒng)下載到Nand Flash中(yaffs2文件系統(tǒng)的制作請(qǐng)參考:Linux-2.6.30.4在2440上的移植之文件系統(tǒng)),下載操作步驟和效果圖如下:
tftp 0x30000000 root-2.6.30.4.bin |
⑦、結(jié)合u-boot和內(nèi)核來(lái)測(cè)試啟動(dòng)下載的yaffs2文件系統(tǒng)
設(shè)置u-boot啟動(dòng)參數(shù)bootargs,注意:這一長(zhǎng)串參數(shù)要與內(nèi)核配置里面的Boot options-->Default kernel command string的設(shè)置要一致。特別是mtdblock3要根據(jù)內(nèi)核具體的分區(qū)來(lái)設(shè),在上一篇中講到了內(nèi)核中Nand的分區(qū)情況,u-boot屬于mtdblock0,param屬于mtdblock1,kernel屬于mtdblock2,root就屬于mtdblock3,所以這里要設(shè)置成root=/dev/mtdblock3,否則文件系統(tǒng)無(wú)法啟動(dòng)成功,會(huì)出現(xiàn)一些什么I/O之類的錯(cuò)誤
好了,最后重啟開發(fā)板,內(nèi)核引導(dǎo)成功,yaffs2文件系統(tǒng)也掛載成功,效果圖如下:
評(píng)論