【Linux】Image、zImage与uImage的区别

1、Image

1.1 什么是 Image

  • Image 是一种未压缩的 Linux 内核镜像文件,包含了内核的所有代码、数据和必要的元信息。
  • 它是 Linux 内核在编译过程中生成的一个原始的二进制文件,未经过任何压缩或额外的封装处理。
  • 由于未压缩,Image 文件相对较大,但它不需要解压过程,加载速度较快。

1.2 内部结构

  • 头部:包含基本的内核信息(如内核版本、加载地址等),用于引导加载程序识别。
  • 内核代码:实际的 Linux 内核代码和数据段。
  • 内核数据:初始化和常驻的数据段,包括全局变量、静态变量等。

1.3 工作原理

  • 引导加载程序(如 U-Boot、GRUB 等)从存储介质(如 NAND Flash、SD 卡、硬盘等)中读取 Image 文件。
  • Image 文件加载到内存中的指定位置(通常是 RAM)。
  • 引导加载程序将控制权转交给 Image 的入口地址。
  • 内核开始执行初始化过程,设置硬件和系统环境,最终启动用户空间的操作系统。

1.4 编译生成Image

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- Image

2、zImage

2.1 什么是 zImage

  • zImage 是一种经过压缩的 Linux 内核镜像格式,它通过 gzip 压缩内核代码和数据,使文件大小大大减小。
  • zImage 也称为 “compressed kernel image”,在加载时会自解压缩到内存中然后执行。

2.2 内部结构

  • 解压缩头部:包括解压缩代码和一个简单的引导程序,用于引导和解压缩内核。
  • 压缩的内核代码和数据:使用 gzip 压缩后的内核代码和数据。
  • 尾部校验和:用于验证文件完整性。

2.3 工作原理

  • 引导加载程序(如 U-Boot 或其他加载器)从存储介质中读取 zImage 文件。
  • zImage 文件加载到内存中。
  • 解压缩头部代码运行,解压缩内核到内存中的指定位置。
  • 内核解压完成后,控制权转移到解压后的内核入口点,开始内核初始化和启动过程。

2.4 编译生成 zImage

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

3、uImage

3.1 什么是 uImage

  • uImage 是 U-Boot 引导加载程序专用的内核镜像格式。
  • 它是在 zImageImage 的基础上加上一个 U-Boot 头部信息(U-Boot Header),使 U-Boot 能够识别并加载内核镜像。

3.2 内部结构

3.3 工作原理

  • U-Boot 读取 uImage 文件。
  • U-Boot 解析头部信息,验证镜像的合法性和完整性。
  • 将内核镜像加载到指定的内存地址。
  • 如果内核镜像是压缩的,U-Boot 会解压缩它。
  • 将控制权交给内核的入口地址,启动 Linux 内核。

3.4 编译生成 uImage

mkimage -A arm -O linux -T kernel -C gzip -a 0x8000 -e 0x8000 -n "Linux Kernel" -d zImage uImage
  • -A:目标架构(ARM)。
  • -O:操作系统(Linux)。
  • -T:镜像类型(内核)。
  • -C:压缩类型(gzip)。
  • -a:加载地址(0x8000)。
  • -e:入口点地址(0x8000)。
  • -n:镜像名称("Linux Kernel")。
  • -d:源文件(zImage)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值