嵌入式Linux之我行——u-boot-2009.08在2440上的移植詳解(五)
- 主
機: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默認分區(qū),注意此處的分區(qū)要和你的內核中的分區(qū)保持一致 |
②、在原來對Nand操作的命令集列表中添加Yaffs2對Nand的寫命令,如下:
#gedit common/cmd_nand.c |
U_BOOT_CMD(nand, CONFIG_SYS_MAXARGS, 1, do_nand, //注意:這里只添加了yaffs2的寫命令,因為我們只用u-boot下載(即寫)功能,所以我們沒有添加yaffs2讀的命令
|
接著,在該文件中對nand操作的do_nand函數中添加yaffs2對nand的操作,如下:
//添加yaffs2相關操作,注意該處又關聯(lián)到nand_write_skip_bad函數 #if defined(CONFIG_MTD_NAND_YAFFS2) |
③、在include/linux/mtd/mtd.h頭文件的mtd_info結構體中添加上面用到rw_oob和skipfirstblk數據成員,如下:
#gedit include/linux/mtd/mtd.h |
#if defined(CONFIG_MTD_NAND_YAFFS2) |
④、在第二步關聯(lián)的nand_write_skip_bad函數中添加對Nand OOB的相關操作,如下:
#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函數中我們看到又對nand_write函數進行了訪問,所以這一步是到nand_write函數中添加對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,對yaffs2支持的代碼已修改完畢,重新編譯u-boot并下載到nand中,啟動開發(fā)板,在u-boot的命令行輸入:nand help查看nand的命令,可以看到多了一個nand write[.yaffs2]的命令,這個就是用來下載yaffs2文件系統(tǒng)到nand中的命令了。
⑥、使用nand write[.yaffs2]命令把事前制作好的yaffs2文件系統(tǒng)下載到Nand Flash中(yaffs2文件系統(tǒng)的制作請參考:Linux-2.6.30.4在2440上的移植之文件系統(tǒng)),下載操作步驟和效果圖如下:
tftp 0x30000000 root-2.6.30.4.bin |
⑦、結合u-boot和內核來測試啟動下載的yaffs2文件系統(tǒng)
設置u-boot啟動參數bootargs,注意:這一長串參數要與內核配置里面的Boot options-->Default kernel command string的設置要一致。特別是mtdblock3要根據內核具體的分區(qū)來設,在上一篇中講到了內核中Nand的分區(qū)情況,u-boot屬于mtdblock0,param屬于mtdblock1,kernel屬于mtdblock2,root就屬于mtdblock3,所以這里要設置成root=/dev/mtdblock3,否則文件系統(tǒng)無法啟動成功,會出現(xiàn)一些什么I/O之類的錯誤
好了,最后重啟開發(fā)板,內核引導成功,yaffs2文件系統(tǒng)也掛載成功,效果圖如下:
評論