3.10.1. 镜像类型

这里介绍 U-Boot 中涉及到的各种镜像类型。比如与内核相关的:

Image

Image 文件是 Linux 编译生成的非压缩镜像文件,基于 ELF 文件 vmlinux 提取得到。

riscv64-unknown-linux-gnu-objcopy -O binary -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/riscv/boot/Image

ARM64 和 RISCV 产生的 Image 文件,自带一个镜像信息头,U-Boot 可以使用 booti 命令对该镜像进行解析和启动。 ARM32 上产生的 Image 文件没有相关的镜像信息头。ZX 方案中,U-Boot 也实现了一个特殊的 booti32 命令, 可以直接启动未压缩的 Image 文件。

Image.gz

Image.gz, Image.bz2, Image.lzo, Image.lzmo, Image.lz4 等压缩文件,是基于 Image 文件直接压缩得到。 ARM64 和 RISCV 都采用这种方式产生对应的压缩文件。

U-Boot 中可以使用 booti 命令解析和启动对应的压缩镜像文件。

zImage

zImage 是 Linux 编译生成的压缩内核 Image 格式,基于 Image 文件生成。

内核生成 zImage 时,首先将未压缩的 Image 通过 gzip 压缩(默认选择 gzip 压缩),生成 pyggy_data, 然后再与相关的解压缩代码编译和链接,生成 zImage。

cat arch/arm/boot/compressed/../Image | gzip -n -f -9 > arch/arm/boot/compressed/piggy_data

该镜像文件可以在 U-Boot 中使用 bootz 命令进行解析和启动。

zImage 是一个运行时自解压缩的镜像文件。

uImage

uImage 基于 zImage 生成,仅在头部添加 U-Boot Image 的头信息,以便 U-Boot 正确解析。 实际上在新的内核中,已经不再生成该镜像文件。

该镜像文件可以在 U-Boot 中使用 bootm 命令进行解析和启动。

FIT Image

FIT Image 是一种打包格式,可以将多个镜像文件打包在一起,合并成一个 .itb 文件。 打包的具体细节通过对应的 .its 描述,然后通过 mkimage 工具进行打包。

FIT Image 可以通过 bootm 命令进行解析和启动。

AIC 镜像

在固件升级和 BROM 启动过程中,BROM 需要读取 AIC 自定义格式的镜像,以 .aic 结尾。 AIC 镜像使用 mk_image.py 脚本生成,生成的细节通过 image_cfg.json 文件进行描述。