目标:在mini2440开发板上,利用u-boot的nfs加载kernel,使得kernel修改编译后,不需要重新烧写,只需重启就可以进行调试。
linux主机环境:
1、整个mini2440目录通过smb共享出来,方便在window下用SI3.5进行代码阅读、编辑。
2、将kernel/arch/arm/boot目录及root_fs通过nfs共享出来,方便u-boot加载kernel,kernel加载文件系统。
用到的资源:
1、mini2440附带光盘u-boot版本u-boot-1.1.6-FA24x0.tar.gz
2、mini2440附带光盘kernel版本linux-2.6.13-mini2440-20080910.tgz
3、本论坛kernel补丁uImage.patch.gz.zip
存在的问题及原因:
1、u-boot加载kernel不成功。
==》u-boot与kernel对mach_id的设置不同(不配套),修改相同即可。
2、u-boot在nand flash下不能启动
==》u-boot没有真正烧录进nand flash,nand flash对烧录的size要求8字节对齐,烧录命令修改一下即可。
3、修改参数使得u-boot可以通过nfs加载kernel,kernel能通过nfs加载root_fs
==》修改bootcmd和bootarg两个参数即可,对于nand flash启动最好修改u-boot的源代码,因为nand flash启动时,读写nor flash有些问题,参数没有办法保存。所以只能用默认参数。
解决方法:
1、修改u-boot open24x0.c line 68 将 MACH_TYPE_S3C2440 替换为 MACH_TYPE_SMDK2440
2、修改u-boot open24x0.h line 56 处改为

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:2m@0(kernel)," \
"8m(jffs2)," \
"-(yaffs)"
u-boot cmd_menu.c line 190 处改为
strcpy(cmd_buf, "usbslave 1 0x30000000; nand erase bios; nand write.raw 0x30000000 bios 0x40000");
3、按照自己网络配置修改即可
需要注意的是 :
新编译后的u-boot先烧录到nor flash中,并通过u-boot对nand flash重新分区格式化,做好后最好查看一下分区信息
再将u-boot烧录进nand flash,这个时候从nand flash启动系统应该就没有问题了。