镜像类型
-
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 文件不带镜像信息头。在 ArtInChip 方案中,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 是一个运行时自解压缩的镜像文件。
内核生成 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 命令进行解析和启动该镜像文件。
-
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 文件进行描述。