主题 : 利用u-boot的nfs加载kernel,简化kernel调试。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2234
精华: 0
发帖: 9
金钱: 55 两
威望: 27 点
综合积分: 18 分
注册时间: 2008-11-04
最后登录: 2013-03-28
楼主  发表于: 2009-04-05 14:31

 利用u-boot的nfs加载kernel,简化kernel调试。

目标:在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启动系统应该就没有问题了。
级别: 新手上路
UID: 2234
精华: 0
发帖: 9
金钱: 55 两
威望: 27 点
综合积分: 18 分
注册时间: 2008-11-04
最后登录: 2013-03-28
1楼  发表于: 2009-04-05 14:34

 回 楼主(hai_john) 的帖子

3、本论坛kernel补丁uImage.patch.gz.zip  ====》 方便uImage的生成。

2、修改u-boot open24x0.h line 56
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:2m@0(kernel)," \
                            "8m(jffs2)," \
                            "-(yaffs)"
修改为
"mtdparts=nandflash0:256k@0(bios),2m(kernel)," \
                            "8m(jffs2)," \
                            "-(yaffs)"