u-boot引导友善之臂Linux内核
作者:kangear
Email:kangear@163.com
Blog:kangear.blog.chinaunix.net
当我刚接触u-boot时,不想自产自用,先用人家移植好的。可是困难重重,国嵌的u-boot不支持下载到nandflash,找到tekkamanninja的,连编译都不会(他用的是他自己的交叉工具链,我用的友善的)。这个u-boot呢,友善不提供技术支持,tekkamanninja也没有义务去一点点解惑。这可就难为初学者了。
不过现在好了,终于把两个强者结合到一起了,用tekkamanninja的u-boot引导友善的强大linux内核。这样你的mini2440从头到尾都开源了。
看《mini2440之linux移植开发实战指南》时看到神奇的surpervivi,是怎样工作的:
起点 |
大小 |
内容 |
0 |
40000 |
bootloader |
20000 |
20000 |
Linux启动参数 |
60000 |
500000 |
kernel |
560000 |
rest |
根文件系统 |
这是mach-mini2440.c中nandflash的分区,原则上来说按照分区把bootloader,kernell,fs下载进去就可以了。但经过实验发现事实不是这样的。
我实际下载分区是:
起点 |
大小 |
内容 |
0 |
40000 |
U-boot |
20000 |
20000 |
U-boot环境变量 |
80000 |
250000 |
kernel |
560000 |
X/4000000 |
根文件系统 |
都留了一点空隙,且x是下载到内存后看到的根文件系统大小,4000000是擦除时大小。
(x是小于4000000(64M)的因为nandflash的东西都是通过内存中转下载的)。
分析完毕下面博览会步骤:
1.用mkimage工具加工一下linux内核。
mkimage是编译u-boot时连带产生的一个工具,用它加工后的zImage文件即可用u-boot引导!
mkimage使用方法:
倒数第二个是源文件的名字,做好后会出现一个zImage.img,,把其放到tftpboot目录。
2.裁剪根文件系统
根文件系统rootfs_qtopia_qt4大小为96M远远大于内存64M大小,这样就无法通过内存中转下载到nandflash中了(天嵌好像解决了这个问题,但是人家不开源 %>_)。
我的裁剪方法是去掉了两个图形化软件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了)