1、背景
FIT是flattened image tree的简称,它采用了device tree source file(DTS)的语法,生成的image文件也和dtb文件类似(称做itb)。
结构如下图:
其中image source file(.its)和device tree source file(.dts)类似,负责描述要生成的image file的信息。mkimage和dtc工具,可以将.its文件以及对应的image data file,打包成一个image file。
2、语法
image source file的语法和device tree source file完全一样,只不过自定义了一些特有的节点,包括images、configurations等。说明如下:
(1) images节点
指定所要包含的二进制文件,可以指定多种类型的多个文件,例如u-boot.its中的包含了1个standalone image、5个firmware image、1个fdt image。每个文件都是images下的一个子node,例如:
atf@1 {
description = "ARM Trusted Firmware";
data = /incbin/("bl31_0x00040000.bin");
type = "firmware";
arch = "arm64";
os = "arm-trusted-firmware";
compression = "none";
load = <0x00040000>;
entry = <0x00040000>;
};
可以包含如下的关键字:
description:描述,可以随便写;
data:二进制文件的路径,格式为/incbin/("path/to/data/file.bin");
type:二进制文件的类型,"standalone","firmware","kernel", "ramdisk", "flat_dt"等;
arch:平台类型,“arm”, "arm64", “i386”等;
os:操作系统类型,linux、vxworks等;
compression:二进制文件的压缩格式,SPL、或uboot会按照执行的格式解压;
load:二进制文件的加载位置,SPL、或uboot会把它copy对应的地址上;
entry:二进制文件入口地址,一般kernel image需要提供,uboot会跳转到该地址上执行;
hash:使用的数据校验算法。
具体可以参考:doc/uImage.FIT/source_file_format.txt。
(2) configurations节点
可以将不同类型的二进制文件,根据不同的场景,组合起来,形成一个个的配置项,u-boot在boot的时候,以配置项为单位加载、执行,这样就可以根据不同的场景,方便的选择不同的配置。下面是u-boot.its中的配置节点:
configurations {
default = "config";
config {
description = "Rockchip armv8 with ATF";
rollback-index = <0x0>;
firmware = "atf@1";
loadables = "uboot", "atf@2" , "atf@3" , "atf@4" , "atf@5" , "atf@6" ;
fdt = "fdt";
signature {
algo = "sha256,rsa2048";
padding = "pss";
key-name-hint = "dev";
sign-images = "fdt", "firmware", "loadables";
};
};
};
这里只包含了1种配置,默认配置项由“default”指定,当然也可以在运行时指定。