Edit online

FIT Image 介绍

28 May 2024
Read time: 2 minute(s)
在 ArtInChip 启动系统的开发过程中,使用过不同的 Kernel Image 格式:
注:

Kernel Image 外网参考资源:http://www.wowotech.net/u-boot/fit_image_overview.html。未来需要改用 FIT Image (ITB Image)。

  • uImage:U-Boot 定义的一种启动镜像格式,由 64 字节的 U-Boot Image header 加上镜像内容构成。

    uImage 中的镜像内容,可以是未压缩的 Image,也可以是压缩的 Image,由 Linux kernel 编译时生成(依赖 uboot-tools 包中的 mkimage 工具)。新版的 Linux kernel 不再生成 uImage 文件。

    uImage 文件的启动命令:

    bootm  kernel addr - dtb addr

    其中 kernel addr 即 uImage 所在的内存地址。

  • zImage:Image 经过压缩和打包后,生成的文件。

    将压缩后的 Image 作为 Payload,与一段解压缩代码一起编译链接,生成 zImage,因此 zImage 是一个可直接启动的自解压镜像。

    启动命令为:
    bootz kernel addr - dtb addr

    其中 kernel addr 即 zImage 所在的内存地址。

    ARM64,RISCV 架构的 Linux kernel 编译,不再生成 zImage 格式的文件。

  • Image.gz:Linux kernel 编译时生成的压缩文件,使用 gzip 算法直接对 Image 文件进行压缩生成。

    除了 Image.gz,使用其他压缩算法和压缩工具还可以生成下列标准压缩文件:

    • Image.lzo

    • Image.lz4

    • Image.bz2

    • Image.lzma

    U-Boot 的启动命令为:

    booti  kernel addr - dtb addr

    其中 kernel addr 即 Kernel 压缩文件所在的内存地址。

  • Image:Linux kernel 编译时生成的未压缩 Image。

    U-Boot 可以通过 booti 命令直接运行该 Image(ARMv7 是 ArtInChip 自行添加的命令支持启动),启动命令格式为:
    booti kernel addr - dtb addr

    其中kernel addr 是 Image 文件所在的内存地址。

    Image 文件的格式,在不同芯片架构上是不一样的。对于 ARM64 和 RISCV64,会有一个格式头。但是对于 ARM32,则没有 头信息。

  • FIT Image (ITB Image):Flattened Image Tree

    原始参考文档:
    source/uboot-2021.10/doc/usage/fit.rst
    source/uboot-2021.10/doc/uImage.FIT/howto.txt
    source/uboot-2021.10/doc/uImage.FIT/source_file_format.txt
    source/uboot-2021.10/doc/uImage.FIT/command_syntax_extensions.txt

    如 howto.txt 开篇所提,当前社区使用 FIT Image 的主要理由是:

    • 更灵活的处理各种类型的 image 类型(压缩、非压缩、各种格式,各种配置组合)

    • 可以处理安全启动过程中的安全校验(签名校验)