3.11.5. 镜像配置文件
当使用 mk_image.py
打包生成烧录镜像文件时,需要使用对应的 JSON 配置文件描述具体的打包数据和处理流程。
3.11.5.1. 配置文件总览
该 JSON 文件通过嵌套对象的方式,描述一个待生成的镜像文件所包含的数据和信息。 其中最终输出的 “image” 对象,由 “info” 数据,”updater” 数据,”target” 数据组成, 制作 “image” 的过程中需要生成和使用的临时文件由 “temporary” 描述。
{
"image": {
"info": {
"platform": "m4",
"product": "fpga_nand",
"version": "1.0.0",
"media": {
"type": "spi-nand",
"device_id": 0,
"nand_id" : ["0xef", "0xba", "0x21"],
}
},
"updater": {
"spl": {
"file": "u-boot-spl-updater.aic",
"attr": ["required", "run"],
"ram": "0x00103000"
},
"bootui": {
"file": "bootui.img",
"attr": "optional",
"ram": "0x80300000"
},
"env": {
"file": "env.bin",
"attr": ["required"],
"ram": "0x83100000"
},
"uboot": {
"file": "u-boot-updater.aic",
"attr": ["required", "run"],
"ram": "0x80007F00"
}
},
"target": {
"spl": {
"file": "u-boot-spl.aic",
"attr": ["mtd", "required", "burn"],
"part": ["spl"]
},
"uboot": {
"file": "u-boot-dtb.img",
"attr": ["mtd", "required", "burn"],
"part": ["uboot"]
},
"env": {
"file": "env.bin",
"attr": ["mtd", "required", "burn"],
"part": ["env", "envbak"]
},
"bootui": {
"file": "bootui.img",
"attr": ["mtd", "optional", "burn"],
// <mtd part name>:<ubi volume name>
"part": ["bootui"]
},
"dtb": {
"file": "u-boot.dtb",
"attr": ["mtd", "required", "burn"],
"part": ["dtb"]
},
"kernel": {
"file": "Image.gz",
"attr": ["mtd", "required", "burn"],
"part": ["kernel"]
},
"rootfs": {
"file": "rootfs.ubifs",
"attr": ["ubi", "optional", "burn"],
"part": ["ubiroot:rootfs"]
},
"app": {
"file": "user.img",
"attr": ["ubi", "optional", "burn"],
"part": ["ubisystem:user"]
}
}
},
"temporary": {
"aicboot": {
"u-boot-spl.aic": {
"head_ver": "0x00010000",
"anti-rollback counter": 1,
"loader": {
"file": "u-boot-spl.bin",
"load address": "0x103100",
"entry point": "0x103100",
},
"resource": {
"private": "private.bin",
"pubkey": "rsa_pub_key.der",
"pbp": "m4.pbp",
},
"encryption": {
"algo": "aes-128-cbc",
"key": "aes-128-cbc-key.bin",
"iv": "aes-128-cbc-iv.bin",
},
"signature": {
"algo": "rsa,2048",
"privkey": "rsa-2048-private.der",
},
},
},
"itb": {
"u-boot.itb": {
"its": "u-boot.its"
},
},
},
}
3.11.5.2. Info 数据描述
“info” 对象用于描述该烧录镜像的基本信息,这些信息用于生成 Image Header。
其中 “info” 对象可配置的信息有:
- “platform”
当前项目所使用的芯片型号。以字符串形式提供。
- “product”
使用镜像文件的产品型号/名字。以字符串形式提供。
- “version”
镜像的版本信息,以字符串形式提供。
- “media”
镜像文件可烧录的存储介质信息组成的对象。其中包含
“type”: 存储介质的类型,以字符串形式提供。可填写的类型:
“mmc” 当存储介质为 eMMC/SD Card 时填写 “mmc”
“spi-nand”
“spi-nor”
“device_id”: 要烧录的存储介质 ID 号
当设备上有多个相同类型的存储设备是,需要提供存储设备的 ID 号。比如设备上同时又 eMMC 和 SD 卡。
“nand_id”: NAND 器件的厂商 ID 号,当存储设备为 “spi-nand” 时,需要提供。
NAND ID 应以16进制字符串的数组的形式提供,如 [“0xef”, “0xba”, “0x21”]。填写 NAND ID 的原因是 在制作 UBIFS 时,需要知道具体的 NAND 器件的参数,如 Block 大小, Page 大小等。 因此这里提供 NAND ID,以便在制作 UBIFS 时查询。
3.11.5.3. Updater 数据描述
Updater 是进行 USB 升级或者进行 SD 卡时需要运行的 SPL/U-Boot 程序,该程序可能与正常启动时所运行的 SPL/U-Boot 相同,也可能不同,因此需要单独列出。
“updater” 对象描述在升级过程中需要使用到的组件数据。其中下列的组件数据是已知和必要的。
- “spl”
第一级引导程序。
- “env”
升级时 U-Boot 所用的环境变量内容。
- “uboot”
第二级引导程序,升级的具体功能实现在里面。
上述的组件名字并非固定,可根据项目的需要修改、增加或者删除。
Updater 中的组件数据对象都有以下的配置字段:
“file” : 指定该组件的数据来源文件
“ram” : USB 升级时,指定该文件下载的内存地址
“attr” : 该数据对象的属性,可选的内容有:
“required” : 该数据是必需的,如果指定文件不存在,则生成镜像文件出错。
“optional” : 该数据不是必需的,如果指定文件不存在,则在生成镜像文件时忽略该数据对象。
“run” : 该数据是可执行文件,USB 升级时,该数据下载完成之后会被执行。
重要
“updater” 中组件对象的顺序很重要。
在 USB 升级的过程中,组件数据传输和执行的顺序即为 “updater” 中组件数据出现的顺序, 因此如果组件数据之间有顺序依赖关系,需要按照正确的顺序排布。
3.11.5.4. Target 数据描述
“target” 描述要烧录到设备存储介质上的组件数据。与 “updater” 中的组件一样,”target” 中出现的组件根据实际需要进行添加,组件的名字也可自行定义。
“target” 中的组件,都有下面的配置字段:
“file” : 指定该组件的数据来源文件
“part” : 指定该组件被烧录的分区
分区名字通过字符串数组的形式提供,如果一个组件被烧录到多个分区,则在数组中提供多个分区的名字, 如 [“uboot1”, “uboot2”]。
对于 UBI 的卷,使用 “<MTD Part>:<UBI Volume>” 的形式提供,如 [“ubiboot:kernel”]。 这里 “ubiboot” 是该 UBI 设备所在的 MTD 分区名字,”kernel” 是该 UBI 设备中的 Volume 名字。
“attr” : 该数据对象的属性,可选的内容有:
“required” : 该组件数据是必需的,如果指定文件不存在,则生成镜像文件出错。
“optional” : 该组件数据不是必需的,如果指定文件不存在,则在生成镜像文件时忽略该数据对象。
“burn” : 该组件数据是需要烧录到指定分区当中。
“mtd” : 表示该组件要烧录的设备是 MTD 设备。
“ubi” : 表示该组件要烧录的设备是 UBI 设备。
“block” : 表示该组件要烧录的设备是块设备。
重要
“target” 中组件对象的顺序
在 USB 升级的过程中,组件数据传输和烧录的顺序即为 “target” 中组件数据出现的顺序。
3.11.5.5. Temporary 数据描述
“temporary” 描述的是镜像文件生成过程中需要生成的中间文件。通过描述数据对象的方式, 描述不同类型的中间文件的生成过程,可用于对组件的签名、加密、再次打包等处理。
当前支持下列两种不同的数据处理:
“aicboot” 描述 AIC 启动镜像的生成
“itb” 描述 FIT Image 的打包
AIC 启动镜像
AIC 启动镜像是 BROM 解析和执行的启动程序文件,其格式如 AIC启动镜像格式 所描述。 当需要在打包过程中生成一个中间的 AIC 启动镜像文件时,需要在 “aicboot” 对象中添加一个子对象, 其对象名字即为生成的文件名字,可配置的内容如下面的示例所示。所列的属性中,只有 “loader” 是必需的, 其他的可根据项目需要进行删减。
"aicboot": {
"u-boot-spl.aic": {
"head_ver": "0x00010000",
"anti-rollback counter": 1,
"loader": {
"file": "u-boot-spl.bin",
"load address": "0x103100",
"entry point": "0x103100",
},
"resource": {
"private": "private.bin",
"pubkey": "rsa_pub_key.der",
"pbp": "m4.pbp",
},
"encryption": {
"algo": "aes-128-cbc",
"key": "aes-128-cbc-key.bin",
"iv": "aes-128-cbc-iv.bin",
},
"signature": {
"algo": "rsa,2048",
"privkey": "rsa-2048-private.der",
},
},
}
FIT Image
FIT Image 是 U-Boot 中常用的数据打包方式,用于将一些相关的启动数据打包在一起,
使用 .its
文件描述打包过程。
如果生成烧录镜像文件的过程中,有些数据需要打包组合为一个 FIT Image 文件,则可以在
“itb” 对象中添加一个子对象,其对象名字即为生成的文件名字,可配置的内容位描述该打包
过程的 .its
文件。
"itb": {
"u-boot.itb": {
"its": "u-boot.its"
},
},
烧录镜像文件生成过程中,会调用相应的 mkimage 工具生成 itb 文件。