Chinaunix首页 | 论坛 | 博客
  • 博客访问: 806595
  • 博文数量: 244
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2420
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-29 09:07
文章分类

全部博文(244)

文章存档

2011年(4)

2010年(3)

2009年(72)

2008年(119)

2007年(46)

我的朋友

分类: LINUX

2008-04-29 22:42:48

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生成uImagemkimage命令的具体使用可以用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只是简单的将image0x30800000搬到-a 指定的地址。对于 –C gzip u-boot将会跳过image 64Byte的头部分,将压缩的内核解压缩到-a指定的地址,所以bootm 后面跟的地址和-a 的地址最好要有一定的间隔。-e 选项指定解压缩后内核的入口地址,这一地址要和内核生成时的地址保持一致。
阅读(559) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~