linux内核相关镜像zImage、zImage、bzImage、vmlinuz、vmlinux、Image关系分析(摘自《国嵌-嵌入式Linux内核驱动进阶班实验手册》)

时间:2022-07-20 15:53:21

嵌入式系统构建之 2440 开发板内核制作,目地是让大家学会嵌入式内核的配置与编译,学习时应注意与前面 X86 平台内核制作做对比。比如,从生成的镜像上来看,在 pc 的 x86 平台下,我们生成的是 bzImage 、这里我们生成的是 uImage ,它们有什么联系?下面来讨论一下这几种镜像之间的关系:

  zImage 与 uImage

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

  zImage 与 bzImage

bzImage 是压缩的内核映像,需要注意, bzImage 不是用 bzip2 压缩的, bzImage 中的 bz 容易引起 误解, bz 表示 “big zImage” 。 bzImage 中的 b 是 “big” 意思。 zImage(vmlinuz) 和 bzImage(vmlinuz) 都是用 gzip 压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有 gzip 解压缩代码。所以你不能用 gunzip 或 gzip –dc 解包 vmlinuz 。

  vmlinuz 与 vmlinux

vmlinuz 是可引导的、压缩的内核。 “vm” 代表 “Virtual Memory” 。 Linux 支持虚拟内存,不像老的操作系统比如 DOS 有 640KB内存的限制。 Linux 能够使用硬盘空间作为虚拟内存,因此得名 “vm” 。 zImage 和 bzImage 是 vmlinuz 的存在形式,在 x86 系统中,我们是直接通过将 bzImage 拷贝为 /boot/vmlinuz 获得 vmlinuz 的。

vmlinux 是 ELF 文件,即编译出的最原始的文件,或者称之为基本内核。 vmlinuz ( zImage 或 bzImage )是由 ELF 文件 vmlinux经过 objcopy 后得到 binary 文件 Image ,再经过压缩后的文件。