vmlinux Image zImage uImage之区别&镜像启动

vmlinux Image zImage uImage之区别

vmlinux/vmlinuz

vmlinuz是可引导的、可压缩的内核镜像,vm代表Virtual Memory.Linux支持虚拟内存。Linux内核源文件经过编译生成后缀为 elf 格式的文件vmlinux或vmlinuz,这种文件没有经过压缩处理,在PC机上直接启动运行它。因为PC机存储空间足够大,不需要压缩。而嵌入式系统的存储空间有限(在嵌入式发展初期是这样的),很有必要压缩内核文件。

ELF,Executable and Linkable Format,可执行可链接格式,是UNIX实验室作为应用程序二进制接口而发布的,扩展名为elf.可以简单的认为,在elf格式的文件中,除二进制代 码外,还包括该可执行文件的某些信息,比如符号表等.


Image

Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩.

zImage

vmlinux或vmlinuz加工成zImage。
ARM linux常用的一种压缩镜像文件。嵌入式中,后缀为 elf 格式的文件vmlinux或vmlinuz经过objcopy工具,把它加工成Image,处理过程就是精简大小和压缩,并且在头部增加了解压缩代码(解压代码是没有压缩的),这样就生成了zImage,这么做仅仅是为了节约空间。


uImage

它把zImage加工成uImage
Uboot中有个工具mkimage(在Uboot的目录下/tools/mkimage,它是编译后生成的,我们要把它拷贝到/usr/local/bin下供编译内核时使用)。 mkimage它在zImage前加了64字节的头,这个头信息包含了内核文件的一些信息,Uboot在加载内核时,通过解析这个头信息,把它解析成zImage后再启动它。


总结:

1、vmlinux 编译出来的最原始的内核文件,未压缩。vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
2、zImage 是vmlinux经过gzip压缩后的文件。
3、uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
4、bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。


Uboot如何启动内核

Uboot重定位内核(把内核从SD卡)搬移到DDR中。使用命令movi read kernel 0x30008000,把内核从kernel分区的内核读取到地址是0x30008000处,然后用命令bootm 0x30008000启动内核。

Uboot也支持zImage的启动,条件是Uboot 中是否定义了宏LINUX_ZIMAGE_MAGIC,(在Uboot的do_bootm函数中)。

对于s5pv210,内核的链接地址是0x30008000。Uboot中的启动环境变量和启动命令:bootcmd movi read kernel 0x30008000 ;bootm 0x30008000


关于U_boot.bin

Uboot编译后生成可执行文件u-boot(elf格式),它经过工具arm-linux-objcopy加工,得到u-boot.bin文件(可烧录文件镜像),这个工具作用就是删减了一些无用的字节。这个.bin文件,实际上和zImage一样,只是它后缀了.bin而已。 Uboot在第二阶段重定位,将整个Uboot镜像加载到DDR内存中的0xc3e00000中。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值