Linux内核源码的make zImage过程

一. 内核镜像文件 zImage

前面几篇文章重点讲 vmlinux 是如何编译出来的?
vmlinux ELF 格式的文件,但是在实 际中我们不会使用 vmlinux ,而是使用 zImage uImage 这样的 Linux 内核镜像文件。

本文简单说明一下 内核镜像文件 zImage的生成过程。

二.   Linux内核源码的make zImage过程

使用“ make ”、“ make all ”、“ make zImage ”这些命令就可以编译出 zImage 镜像。
在 arch/arm/Makefile 中有如下代码:
310 BOOT_TARGETS = zImage Image xipImage bootpImage uImage
......
315 $(BOOT_TARGETS): vmlinux
316 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
310 行,变量 BOOT_TARGETS 包含 zImage Image xipImage 等镜像文件。
315 行, BOOT_TARGETS 依赖 vmlinux ,因此如果使用“ make zImage ” 编译的 Linux 核的话,首先肯定要先编译出 vmlinux
316 行,具体的命令,比如要编译 zImage ,那么命令展开以后如下所示:
@ make -f ./scripts/Makefile.build obj=arch/arm/boot MACHINE=arch/arm/boot/zImage
看来又是使用 scripts/Makefile.build 文件来完成 vmlinux zImage 的转换。

关于 Linux 顶层 Makefile 就讲解到这里,基本和 uboot 的顶层 Makefile 一样,重点在于
vmlinux 的生成。最后将 vmlinux 压缩成我们最常用的 zImage uImage 等文件。

三.  vmlinux、Image,zImage、uImage 的区别

vmlinuxzImageuImage 他们之间有什么区别呢?
1. vmlinux 是编译出来的最原始的内核文件,是未压缩的,比如正点原子提供的 Linux
码编译出来的 vmlinux 差不多有 16MB ,如下 所示:

2.  Image Linux 内核镜像文件,但是 Image 仅包含可执行的二进制数据。Image 就是使objcopy 取消掉 vmlinux 中的一些其他信息,比如符号表什么的。但是 Image 是没有压缩过的,Image 保存在 arch/arm/boot 目录下,其大小大概在 12MB 左右,如下 所示:

3. zImage 是经过 gzip 压缩后的 Image,经过压缩以后其大小大概在 6MB 左右,如下所示:

4.  uImage 是老版本 uboot 专用的镜像文件,uImag 是在 zImage 前面加了一个长度为 64字节的“头”,这个头信息描述了该镜像文件的类型、加载位置、生成时间、大小等信息。但是新的 uboot 已经支持了 zImage 启动!所以已经很少用到 uImage 了,除非你用的很古老的 uboot

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值