uImage与zImage的区别

转载 2012年08月05日 12:56:59
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M

        那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。

        如何生成uImage文件?首先在uboot/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行makeuImage,如果成功,便可以在arch/arm/boot/目录下发现uImage文件,其大小比zImage64个字节。

其实就是一个自动跟手动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要自己手动去搞那些参数

U-bootU是“通用”的意思

zImageARMLinux常用的一种压缩映像文件,uImageU-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage0x40位置开始执行,zImageuImage没有任何区别。另外,Linux2.4内核不支持uImageLinux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置,这个以后我会介绍。


几种linux内核文件的区别

1vmlinux编译出来的最原始的内核文件,未压缩。

2zImagevmlinux经过gzip压缩后的文件。

3bzImagebz表示“bigzImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K)bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImagebzImage都行,如果比较大应该用bzImage

4uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40tag

5vmlinuzbzImage/zImage文件的拷贝或指向bzImage/zImage的链接。

6initrd是“initialramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态


一般情况下都在生成vmlinux后,再对内核进行压缩成为zImage,压缩的目录是

kernel/arch/arm/boot

下载到flash中的是压缩后的zImage文件,zImage是由压缩后的vmlinux和解压缩程序组成,如下图所示:


查看2410datasheet,发现内存映射的基址是0x30000000 ,那么0x30008000又是如何来的呢?

在内核文档kernel/Document/arm/Booting文件中有:

Calling the kernel image

Existingboot loaders: MANDATORY
New boot loaders: MANDATORY
There aretwo options for calling the kernel zImage. If the zImage is stored inflash, and is linked correctly to be run
from flash, then it islegal for the boot loader to call the zImage in flash directly.
ThezImage may also be placed in system RAM (at any location) and calledthere. Note that the kernel uses 16K of
RAM below the image tostore page tables. The recommended placement is 32KiB into RAM.
看来在image下面用了32K(0x8000)的空间存放内核页表,

0x30008000就是2410的内核在RAM中的启动地址,这个地址就是这


          通常情况下,将U-BOOT  内核及文件系统都通过TFTP下载到SDRAM中,然后再烧写到NAND FLASH中,因为SDRAM是掉电易失的。下载地址通过数据手册查询SDRAM的起始地址,然后固化。SDRAM类似于内存,NAND FLASH相当于硬盘。烧写固化后设置U-BOOT从NAND FLASH中启动。

转载地址:http://blog.csdn.net/ilyfeng1314/article/details/7026766

linux的uboot启动映像、zImage和uImage的区别

linux的uboot启动映像、zImage和uImage的区别 因为都是从各网站上搜集过来的资料,如果有涉权请告知............. uboot启动zImage(go)和...
  • yyf0986
  • yyf0986
  • 2013年06月07日 16:48
  • 2275

zImage和uImage的区别联系

linux内核经过编译后会生成一个elf格式的可执行程序,叫vmlinux或vmlinuz,这个就是原始的未经任何处理加工的原版内核elf文件;嵌入式系统部署时烧录的一般不是这个vmlinuz/vml...
  • Ultraman_hs
  • Ultraman_hs
  • 2016年10月17日 15:20
  • 3135

嵌入式linux-利用mkimage 把zImage转换为uImage的方法

通常,u-boot为kernel提供一些kernel无法知道的信息,比如ramdisk在RAM中的地址。Kernel也必须为U-boot提供必要的信息,如通过mkimage这个工具(在u-boot代码...
  • chuanzhilong
  • chuanzhilong
  • 2016年07月30日 23:34
  • 603

linux kernel编译生成zImage过程详解

http://blog.csdn.net/skyflying2012/article/details/35230263 可以看到,在顶层makefile的第278行,包含了scripts/Kbuil...
  • sunjing_
  • sunjing_
  • 2016年08月10日 16:56
  • 609

zImage和uImage的区别

zImage和uImage的区别         vmlinux是内核文件,zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到。而uImage则是使用工具mk...
  • u012183924
  • u012183924
  • 2016年11月26日 17:34
  • 139

zImage和uImage的区别

zImage和uImage的区别     vmlinux是内核文件, zImage是一般情况下默认的压缩内核映像文件,压缩vmlinux,加上一段解压启动代码得到,只能从0X0地址运行。 uIm...
  • cosmoslhf
  • cosmoslhf
  • 2013年05月07日 17:21
  • 501

zImage和uImage的区别

zImage和uImage的区别 一、简介 对于Linux内核,编译可以生成不同格式的映像文件,例如: # make zImage # make uImage zImage是ARM Linu...
  • chunlovenan
  • chunlovenan
  • 2015年01月18日 16:47
  • 534

uImage 和zImage的微小区别

make uImage 和make zImage的区别 - 嵌入式系统 - 21IC电子工程师论坛 内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核...
  • tpfgfxz
  • tpfgfxz
  • 2013年04月12日 19:21
  • 527

zImage和uImage的区别

对于Linux内核,编译可以生成不同格式的映像文件,例如: # make zImage # make uImage zImage是ARM Linux常用的一种压缩映像文件,uImage是U-...
  • yyf0986
  • yyf0986
  • 2013年06月07日 16:47
  • 591

zImage和uImage的区别联系

注:本文是学习朱老师课程整理的笔记,基于linux2.6.35.7和九鼎X210BV3S开发板进行移植。 linux内核经过编译后会生成一个elf格式的可执行程序,叫vmlinu...
  • qq_28779021
  • qq_28779021
  • 2017年12月01日 16:45
  • 37
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uImage与zImage的区别
举报原因:
原因补充:

(最多只允许输入30个字)