篇首
最近突发奇想,Xilinx 的集成开发环境已经很好了,很多必要的代码都直接生成了,这给开发者带来了巨大便利的同时,也让人错过了很多代码的精彩,可能有很多人用了很多年了,都还无法清楚的理解其中过程。博主准备以FSBL为例,与大家深入探讨一番,从而加深对ZYNQ的加载过程的理解,以便大家作出更精彩的设计!
Zynq镜像文件BOOT.BIN结构详解
BOOT.BIN是Zynq 7000系列启动的核心镜像文件,由Xilinx工具链(如Vitis或SDK)通过bootgen工具生成。其本质是一个二进制容器,包含多个逻辑分区,每个分区对应不同的功能模块(如FSBL、PL比特流、U-Boot等)。以下是其详细结构和操作方法:
一、BOOT.BIN的组成结构
BOOT.BIN由 镜像头(Image Header) 和 多个分区(Partitions) 组成,结构如下:
BOOT.BIN
├── 启动头(BOOT Header) // BootROM执行的参数
├── 寄存器初始化区(Register initializetion) // BootROM执行时的一些寄存器配置
├── 镜像头表(Image Header table) // 描述镜像头信息
├── 分区头表(Image Header table) // 描述分区头信息
├── 分区头表(Image Header table) // 描述分区头信息
├── 镜像头(Image Header) // 描述镜像整体属性
├── 分区1(Partition 1) // 通常是FSBL
├── 分区2(Partition 2) // PL比特流(可选)
├── 分区3(Partition 3) // SSBL(如U-Boot)
└── 其他分区(用户自定义数据) // 设备树、配置文件等(可选)
二、镜像头(Image Header)
- 作用:描述镜像全局属性,包括:
- 加密标志(是否启用AES加密)
- 认证类型(如RSA签名或HMAC)
- 分区表信息(分区的数量、偏移地址、加载地址等)
- 存储位置:位于
BOOT.BIN文件起始位置,长度固定(通常为64字节)。
三、分区的结构与用途
每个分区的组成如下:
-
分区头(Partition Header)
- 长度:32字节。
- 关键字段:
Partition Type:分区类型(如FSBL、Bitstream、SSBL)。Load Address:加载到内存的目标地址。Execution Address:执行入口地址(通常与加载地址相同)。Encryption Key Source:加密密钥来源(如eFUSE或BBRAM)。Authentication Type:认证算法(如RSA-2048)。

最低0.47元/天 解锁文章
1011

被折叠的 条评论
为什么被折叠?



