打包镜像
本章节描述 U-Boot 涉及到的打包镜像相关的内容,以及相关工具。
1. AIC 启动镜像格式
ArtInChip BROM 所使用的启动镜像格式。
表 3.15 AIC启动镜像格式
| 数据区域 | 数据分块 | 字段 | 字节 | 描述 |
|---|---|---|---|---|
| Signed Area | Block1(256B) | Magic | 4 | 特征字符串,固定为 ”AIC ” |
| Checksum | 4 | 32 bit 累加和校验的校验值。安全启动方案设为0. | ||
| Header version | 4 | 本文件头结构的版本号,当前版本为v1.0: 0x00010001 | ||
| Image length | 4 | 从文件开头到结束的总数据长度 | ||
| Firmware version | 4 | 固件版本号,不同版本之间应单调递增 | ||
| Loader length | 4 | 第一级引导程序的有效数据的长度,不包括填充数据 | ||
| Load address | 4 | 镜像数据加载到内存的目标地址 | ||
| Entry point | 4 | 第一级引导程序的可执行代码入口地址 | ||
| Signature algorithm | 4 | 0:没有签名,仅计算Checksum;1:RSA-2048; | ||
| Encryption algorithm | 4 | 0:固件不加密;1:AES-128-CBC 加密 | ||
| Signature result offset | 4 | 数字签名数据区域的偏移,从文件头开始计算 | ||
| Signature result length | 4 | 数字签名的长度 | ||
| Signature key offset | 4 | RSA 公钥数据区域的偏移 | ||
| Signature key length | 4 | RSA 公钥数据的长度 | ||
| IV data offset | 4 | AES-CBC IV数据区域的偏移 | ||
| IV data length | 4 | IV 的长度 | ||
| Private data offset | 4 | 第一级引导程序私有数据区域的偏移 | ||
| Private data length | 4 | 第一级引导程序私有数据区域的长度 | ||
| PBP offset | 4 | PBP 数据区域的偏移 | ||
| PBP length | 4 | PBP 数据的长度 | ||
| Padding | 176 | 填充,使得头部刚好 256 字节 | ||
| Block2 | Loader binary data | X | 第一级引导程序的保存区域 | |
| Padding | X | 增加填充,使得 256 字节对齐 | ||
| Block3 | Private data area | X | 存放镜像代码中可能使用的私有数据。 | |
| Signature key area | X | 存放 RSA 公钥,DER 格式的密钥文件。应4字节对齐。 | ||
| IV data area | 16 | 存放 AES IV 数据,16字节。应4字节对齐。 | ||
| PBP area | X | 存放 PBP 程序。应16字节对齐。 | ||
| Padding | X | 填充,使得 256 byte 对齐,方便计算数字签名 | ||
| Block4 | Signature result area | 256 | 前面所有内容的数字签名 |
对于 NAND,在保存第一级引导程序的时候,还会在每个 NAND Block 的第一个 Page 生成 Page Table。Page Table 的作用是用于快速索引镜像数据所在的不同备份 Page 地址。
表 3.16 NAND Page Table 格式
| Index | Content (20 Bytes) | ||||
|---|---|---|---|---|---|
| 0 | Magic(4 Bytes) | Count(4 Bytes) | Padding (12 Bytes) | ||
| 1 | PA(4 Bytes)(Backup 0) | PA(4 Bytes)(Backup 1) | PA(4 Bytes)(Backup 2) | PA(4 Bytes)(Backup 3) | Checksum(4 Bytes) |
| 2 | PA(4 Bytes)(Backup 0) | PA(4 Bytes)(Backup 1) | PA(4 Bytes)(Backup 2) | PA(4 Bytes)(Backup 3) | Checksum(4 Bytes) |
| … | … | … | … | … | … |
Magic 开头的 20 字节,是 Page Table 的头信息,其中 Magic 的值固定为 “AICP”, Count 表示 BootLoader 的数据被分为几个 Page 进行保存。
从 Index 1 表示 BootLoader 的第一个 Page 数据有4个备份,被分别存放在对应 PA(Page address) 所指的 NAND Page 中,Checksum 值是该 Page 数据的校验值。