uImage生成过程 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

uImage生成过程

点滴 admin 11年前 (2013-12-09) 4361次浏览 已收录 扫描二维码

当编译linux的时候,运行make uImage,如果一切正常,最后会生成uImage

如下具体讲解uImage生成过程:

1. 生成uImag的工具mkimage由arch/arm/boot/Makefile中的MKIMAGE定义

[c-sharp]

  1. MKIMAGE:=$(srctree)/scripts/mkuboot.sh

mkuboot.sh的作用是去找到是否存在”mkimage”,此工具是用来生成最后的uImage

mkuboot.sh 首先检查toolchain是否拥有mkimage (使用-z来判空),如果没有,再检查系统中是否拥有mkimage;如果没有则报错。

:其中使用type命令来查找。

type:Display information about command type (type [-afptP] name [name …])

== # type mkimage

==mkimage is /usr/bin/mkimage

2. 从makefile.boot中传入生成uImage的相关参数(e.g: arm/arm/mach-at91/Makefile.boot)

[c-sharp]

  1. ifneq($(MACHINE),)
  2. include$(srctree)/$(MACHINE)/Makefile.boot
  3. endif

3. 通过mkimage来生成uImage,其过程是加上0x40bytes的kernel头 on zImage.

[c-sharp]

  1. quiet_cmd_uimage=UIMAGE$@
  2. cmd_uimage=$(CONFIG_SHELL)$(MKIMAGE)-Aarm-Olinux-Tkernel/
  3. -Cnone-a$(LOADADDR)-e$(STARTADDR)/
  4. -n’Linux-$(KERNELRELEASE)’-d$$@

mkimage的参数如下:

[c-sharp]

  1. Usage:mkimage-limage
  2. -l==listimageheaderinformation
  3. mkimage[-x]-Aarch-Oos-Ttype-Ccomp-aaddr-eep-nname-ddata_file[:data_file…]image
  4. -A==setarchitectureto’arch’
  5. -O==setoperatingsystemto’os’
  6. -T==setimagetypeto’type’
  7. -C==setcompressiontype’comp’
  8. -a==setloadaddressto’addr’(hex)
  9. -e==setentrypointto’ep’(hex)
  10. -n==setimagenameto’name’
  11. -d==useimagedatafrom’datafile’
  12. -x==setXIP(executeinplace)

Load address 由下面代码获得

[c-sharp]

  1. ifeq($(CONFIG_ZBOOT_ROM),y)
  2. $(obj)/uImage:LOADADDR=$(CONFIG_ZBOOT_ROM_TEXT)
  3. else
  4. $(obj)/uImage:LOADADDR=$(ZRELADDR)
  5. endif

start address 由下面代码获得

[c-sharp]

  1. $(obj)/uImage:STARTADDR=$(LOADADDR)

由zImage生成uImage:

[c-sharp]

  1. $(obj)/uImage:$(obj)/zImageFORCE
  2. $(callif_changed,uimage)
  3. @echo’Image$@isready’

也可以自行用mkimage来生成uImage

mkimage -A arm -O linux -T kernel -C none -a load_addr -e entry_addr -n name -d zImage uImage

e.g :mkimage -A arm -O linux -T kernel -C none -a 0x70008000 -e 0x70008000 -n linux-2.6.30 -d zImage uImage

其中:0x8000这32K 空间是Note that the kernel uses 16K of RAM below the imageto store page tables. The recommended placement is 32KiB into RAM. (来自Documentation/arm/booting文件)

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。