一般都是使用uboot引导uImage,uImage是在压缩的内核(如zImage)加了一些信息生成的。这些信息主要内容包括此内核是那种类型,linux还是其他的;内核的入口地址等信息。长度是0x40。加这些信息主要是为了Uboot强大的多系统支持服务。在uboot的代码中(bootm)也有一部分代码把这些信息读出来放在一个叫struct bootm_headers 的结构体中,对内核进行分类,进而调用不同内核对应的代码。
在系统启动过程中,使用压缩的内核需要解压,但是由于已经压缩过,从外存加载到内存的速度比较快。大部分系统都使用这种压缩的内核。
那么怎么让uboot使用非压缩的内核呢?
方法是在非压缩的内核头部加入uboot需要的信息。uboot提供了mkimage工具。可以使用它对vmlinux.bin进行添加头部信息,别忘了修改uboot读kernel的大小,因为vmlinux.bin比zImage至少大一倍(下边的0x600000)。
CONFIG_BOOTCOMMAND "sfcnand read 0x100000 0x600000 0x80600000 ;bootm 0x80600000"
mkimage指令参考
mkimage -A mips -O linux -T kernel -C none \
-a 0x80010000 -e 0x80353c40 \-n 'Linux-3.0.8' \
-d arch/mips/boot/zcompressed/vmlinux.bin arch/mips/boot/zcompressed/vImage
其他相关可以看看我转载的一篇文章
http://blog.csdn.net/yafeixi/article/details/53925083