分类: LINUX
2008-04-29 22:42:48
对于Linux 2.6 以上内核,内核编译的时候支持uImage目标
|
或者按照u-boot源代码根目录下的README文件中关于Building a Linux Image一节,手动生成uImage
1)配置编译内核,生成vmlinux(未压缩的内核镜像)
2)把vmlinux转成原始二进制形式
#{ CROSS_COMPILE }-objcopy –O binary \
-R .note –R .comment \
-S vmlinux linux.bin
|
4)用mkimage生成uImage,mkimage命令的具体使用可以用mkimage –help查看
#mkimage –A arm –O linux –T kernel –C gzip –a 0x30008000 –e 0x30008000 –n “Linux Kernel Image” –d linux.bin.gz uImage
这里有几个参数要注意①-C gzip 指明原始的二进制内核是用gzip压缩的②-a 0x30008000 –e 0x30008000对于不同的image类型-a –e 选项有不同的用途,可以参考cmd_bootm.c中的do_bootm函数。对于Linux Kernel,以具体的例子说明:
#tftp 0x30800000 image
#bootm 0x30800000
对于生成uImage时使用-C NONE时,u-boot只是简单的将image从0x30800000搬到-a 指定的地址。对于 –C gzip u-boot将会跳过image 64Byte的头部分,将压缩的内核解压缩到-a指定的地址,所以bootm 后面跟的地址和-a 的地址最好要有一定的间隔。-e 选项指定解压缩后内核的入口地址,这一地址要和内核生成时的地址保持一致。