一,Zynq-7000 SoC 启动头文件
0x00-0x1F | Arm® 矢量表 | 由 Bootgen 使用虚拟矢量表填充(Arm 操作代码 0xEAFFFFFE,即用于捕获未初始化矢量的 branch-to-self 无限循环)。 |
0x20 | 宽度检测字 | 此项是识别单堆栈模式、双堆栈模式或双并行模式下的 QSPI 闪存所必需的。0xAA995566(小字节序格式)。 |
0x24 | 头文件签名 | 包含 4 个字节的“X”、“N”、“L”、“X”(按字节顺序),按小字节序格式为 0x584c4e58。 |
0x28 | 密钥源 | 器件中加密密钥的位置:
- 0x3A5C3C5A:BBRAM 中的加密密钥。
- 0xA5C3C5A3:eFUSE 中的加密密钥。
- 0x00000000:未加密。
|
0x2C | 头文件版本 | 0x01010000 |
0x30 | 源偏移 | 此镜像文件中 FSBL(启动加载程序)的位置。 |
0x34 | FSBL 镜像长度 | 解密后 FSBL 的长度。 |
0x38 | FSBL 加载地址 (RAM) | FSBL 要复制到的目标 RAM 地址。 |
0x3C | FSBL 执行地址 (RAM) | FSBL 执行的入口矢量。 |
0x40 | FSBL 总长 | 加密后 FSBL 的总大小,包括身份验证证书(如有)和填充。 |
0x44 | QSPI 配置字 | 硬编码为 0x00000001。 |
0x48 | 启动头文件校验和 | 从偏移 0x20 到 0x44(含)的字数总和。这些字假定按小字节序。 |
0x4c-0x97 | 用户定义的字段 | 76 个字节 |
0x98 | 镜像头文件表偏移 | 指向镜像头文件表的指针 |
0x9C | 分区头文件表偏移 | 指向分区头文件表的指针 |
二,Zynq-7000 SoC 寄存器初始化表
Bootgen 中的“寄存器初始化表”采用 256 个地址/值对格式,用于为 MIO 多路复用器和闪存时钟初始化 PS 寄存器。
地址偏移 | 参数 | 描述 |
0xA0 到 0x89C | 寄存器初始化对:<address>:<value>: | Address = 0xFFFFFFFF 表示跳过该寄存器并忽略该值。 所有未使用的寄存器字段都必须设置为 Address=0xFFFFFFFF 和 value = 0x0。 |
三,Zynq-7000 SoC 镜像头文件表
Bootgen 通过从 ELF 文件、比特流、数据文件等中提取数据来创建启动镜像。从中提取数据的这些文件被称为镜像。每个镜像都包含一个或多个分区。“镜像头文件 (Image Header)”表采用包含所有镜像公用的信息以及如下信息的结构:镜像数量、启动镜像中存在的分区数量以及指向其它头文件表的指针。下表提供了 Zynq®-7000 SoC 器件的地址偏移、参数和描述。
Zynq-7000 SoC 镜像头文件表 |
地址偏移 | 参数 | 描述 |
0x00 | Version | 0x01010000:仅包含以下可用字段:0x0、0x4、0x8、0xC 和填充 0x01020000:0x10 字段为添加的字段。 |
0x04 | 镜像头文件计数 | 表示镜像头文件的数量。 |
0x08 | 首个分区头文件偏移 | 指向首个分区头文件的指针。(字偏移) |
0x0C | 首个镜像头文件偏移 | 指向首个镜像头文件的指针。(字偏移) |
0x10 | 头文件身份验证证书偏移 | 指向身份验证证书头文件的指针。(字偏移) |
0x14 | 保留 | 默认为 0xFFFFFFFF。 |
Zynq-7000 SoC 镜像头文件
“镜像头文件 (Image Header)”为阵列结构,其中包含每个镜像的相关信息,例如,ELF 文件、比特流、数据文件等。每个镜像都可具有多个分区,例如,每个 ELF 均可包含多个可加载节,每个节均构成启动镜像中的一个分区。该表还包含镜像相关分区数量的信息。下表提供了 Zynq-7000 SoC 器件的地址偏移、参数和描述。
Zynq-7000 SoC 镜像头文件 |
地址偏移 | 参数 | 描述 |
0x00 | 下一个镜像头文件。 | 链接到下一个镜像头文件。如果当前镜像头文件为 最后一个镜像头文件,则为 0(字偏移)。 |
0x04 | 对应的分区头文件。 | 链接到首个关联的分区头文件(字偏移)。 |
0x08 | 保留 | 始终为 0。 |
0x0C | 分区计数长度 | 与此镜像关联的分区数量。 |
0x10 到 N | 镜像名称 | 以大字节序打包。为对该字符串进行重构,请每次解包 4 个字节、 反转顺序然后串联。例如,字符串“FSBL10.ELF”打包为 0x10: ‘L’,’B’,’S’,’F’, 0x14: ’E’,’.’,’0’,’1’, 0x18: ’\0’,’\0’,’F’,’L’。 打包的镜像名称为 4 个字节的倍数。 |
否 | 字符串终止符 | 0x00000000 |
N+4 | 保留 | 默认为 0xFFFFFFFF,边界为 64 个字节。 |
四,Zynq-7000 SoC 分区头文件
“分区头文件 (Partition Header)”为阵列结构,其中包含每个分区的相关信息。每个分区头文件表均由启动加载程序进行解析。该表中将包含分区大小、闪存中的地址、RAM 中的加载地址、已加密/已签名等信息。针对每个分区(包含 FSBL)均存在一个此类结构。表中最后一个结构将全部标记 NULL 值(校验和除外)。下表显示了有关 Zynq-7000 SoC 分区头文件的偏移、名称和注释。
Zynq-7000 SoC 分区头文件 |
偏移 | 名称 | 注释 |
0x00 | 已加密的分区长度 | 已加密的分区数据长度。 |
0x04 | 未加密的分区长度 | 未加密的数据长度。 |
0x08 | 分区总字长(包括身份验证证书) | 分区总字长由已加密的信息长度(含填充)、扩展长度和身份验证长度组成。 |
0x0C | 目标加载地址。 | 此分区要加载到的 RAM 地址。 |
0x10 | 目标执行地址。 | 此分区执行时的入口点。 |
0x14 | 镜像中的数据字偏移 | 与启动镜像开始位置相关的分区数据的位置 |
0x18 | 属性位数 | 请参阅 Zynq-7000 SoC 分区属性位 |
0x1C | 节数 | 单一分区内的节数。 |
0x20 | 校验和字偏移 | 启动镜像中对应校验和字的位置。 |
0x24 | 镜像头文件字偏移 | 启动镜像中对应镜像头文件的位置。 |
0x28 | 身份验证证书字偏移 | 启动镜像中对应身份验证证书的位置。 |
0x2C-0x38 | 保留 | 保留 |
0x3C | 头文件校验和 | “分区头文件”中的先前字数总和。 |
五,Bootgen GUI 选项
Vitis GUI 中的Create Boot Image Wizard 可提供有限数量的 Bootgen 选项以生成启动镜像。
要使用 GUI 创建启动镜像,请执行以下操作:
1,在Project Navigator或C/C++ Projects视图中选择应用工程,然后右键单击Create Boot Image。或者,单击Xilinx Create Boot Image。
这样会打开Create Boot Image对话框,其中包含从所选 C 语言工程上下文中预选的默认值。注意:
(1)针对应用首次运行Create Boot Image时,在此对话框中将预填充 FSBL ELF 文件路径、所选硬件的比特流(如果在硬件工程中存在此比特流)以及所选应用 ELF 文件。
(2)如果先前为此应用运行了启动镜像,并且存在 BIF 文件,那么在此页面中将预填充来自 /bif 文件夹的值。
2,在Create Boot Image对话框中填充以下信息:
(1)从Architecture下拉菜单中选择所需的架构。
(2)选择Create a BIF file或Import an existing BIF file。
(3)从Basic选项卡中,指定Output BIF file path。
(4)如果适用,请指定 UDF data:请参阅 udf_data 以获取有关该选项的更多信息。
(5)指定 Output path:
3,在Boot image partitions中,单击Add按钮以添加其它分区镜像。
4,为启动镜像中的分区创建偏移值、对齐值和分配值(如适用)。
默认情况下,输出文件路径设置为所选应用工程下的 /bif 文件夹。
5,从Security选项卡中,可指定用于创建安全镜像的属性。此安全选项可根据需要应用于各分区。
6,要为分区启用身份验证,请选中Use Authentication选项,然后指定 PPK、SPK、PSK 和 SSK 值。如需了解更多信息,请参阅 使用身份验证 主题。
(1)要为分区启用加密,请选择Encryption视图,然后选中Use Encryption选项。如需了解更多信息,请参阅 使用加密。
(2)逐一为每个分区创建或导入 BIF 文件启动镜像,从启动加载程序开始。分区列表可显示 BIF 文件中的分区摘要信息。其中可显示文件路径、加密设置和身份验证设置。此区域可用于对分区进行添加、删除、修改和重新排序。您还可为启用加密、身份验证和校验和设置值,并指定其它分区相关的值,如,Load、Alignment和Offset。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)