uImage的制作

来源:互联网 发布:淘宝分享链接生成器 编辑:程序博客网 时间:2024/05/16 06:17
 

对于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 选项指定解压缩后内核的入口地址,这一地址要和内核生成时的地址保持一致。

 

 

 

内核裁剪完成后,执行# make Image,会在内核源码的“arch/arm/boot/”目录下生成名为“Image”的镜像。Image是内核映像文件,而uboot专用的映像文件是uImage,利用“/usr/local/arm/3.4.1/bin/”目录下的arm-linux-objcopy工具生成linux.bin文件,并压缩该文件,最后利用mkimage工具把linux.bin.gz压缩文件转换成uImage。

步骤如下:
(1) /usr/local/arm/3.4.1/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin
(2) gzip -v9 linux.bin
(3) ./mkimage -A arm -O linux -T kernel -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage
       参数意义:
-A arm                     -------- 架构是arm
-O linux                      --------
操作系统是linux
-T kernel                    --------
类型是kernel
-C gzip                     --------
为压缩类型
-a 20008000              ---- image
的载入地址(hex)
-e 20008000              ----
内核的入口地址(hex)
-d linux.bin.gz         ---- image
压缩文件名
uImage                      ----
生成的image文件名

 

 声明:

以上两篇转自:http://hi.baidu.com/kkernel/blog/item/afac2b58207cf684800a189c.html

                            http://bbs.sciencenet.cn/home.php?mod=space&uid=39626&do=blog&id=332576

 

原创粉丝点击