Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322287
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-18 15:21
文章分类

全部博文(85)

文章存档

2017年(1)

2016年(19)

2015年(55)

2014年(10)

我的朋友

分类: 嵌入式

2015-07-01 23:27:38

前言
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。

一 编译制作上的区别
制作zImage文件内核顶层目录下的Makefile中设置好相关参数后,make zImage即可生成
制作uImage文件首先在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImage。

Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。

生成 zImage的Makefile 和生成uImage有什么不同?加了什么支持
E:\my works\SourceInsight\linux-2.6.32.2-20130614\arch\arm\boot\Makefile
14行 MKIMAGE         := $(srctree)/scripts/mkuboot.sh
63行 quiet_cmd_uimage = UIMAGE  $@
          cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
           -C none -a $(LOADADDR) -e $(STARTADDR) \
           -n 'Linux-$(KERNELRELEASE)' -d $< $@

E:\my works\SourceInsight\linux-2.6.32.2-20130614\scripts\mkuboot.sh
  1. MKIMAGE=$(type -path "${CROSS_COMPILE}mkimage")

  2. if [ -z "${MKIMAGE}" ]; then
  3.     MKIMAGE=$(type -path mkimage)
  4.     if [ -z "${MKIMAGE}" ]; then
  5.         # Doesn't exist
  6.         echo '"mkimage" command not found - U-Boot images will not be built
  7. exit 0;
  8.     fi
  9. fi
  10. # Call "mkimage" to create U-Boot image
  11. ${MKIMAGE} "$@"

二 zImage和uImage本体上的区别
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。
换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。

三 放在NAND Flash中启动时的区别

阅读(996) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~