uImage的制作

对于Linux 2.6 以上内核,内核编译的时候支持uImage目标
#make menuconfig
#make 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
这里的CROSS_COMPILE是交叉编译前缀,比如常用的arm-linux
3)压缩linux.bin
#gzip -9 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 选项指定解压缩后内核的入口地址,这一地址要和内核生成时的地址保持一致。

你可能感兴趣的:(uImage的制作)