此系列博客,仅对Xilinx平台PS端(ARM部分)开发做介绍,不对PL(FPGA)做过多介绍。
目录
4.1 Partition Header Validation
4.3 Partition Validation
三. Boot Device Initalization
此部分主要完成启动设备的初始化工作,支持多设备,多镜像启动方式,
1.第一段启动设备初始化
2.启动Header验证
3.第二段启动设备初始化
3.1 Primary Boot Device Init
1.读取BootMode(启动引脚决定),读取CRL_APB_BOOT_MODE_USER寄存器
2.初始化CSU DMA,其可用于PL配置,和镜像传输
3.根据不同的启动模式,初始化对应的外设驱动,例如USB,QSPI,SD/EMMC等驱动
3.2 Secondary Boot Device
1.通过image header table 中的值获取 启动方式
2.根据不同的启动方式初始化对应驱动
3.验证validateheader
注意:如果启动方式是JTAG ,将不会进入第三阶段PartitionLoad
3.3 Validate Header
BOOT.BIN结构
头文件验证流程:
- 获取boot header内容
- 读取boot image attr
- 获取image heaer table
- 验证image header table信息
5.读取对应镜像的image header
四. Partition Load
主要完成分区头文件验证,镜像拷贝等工作
- 验证分区头文件
- 镜像拷贝
- 分区验证
4.1 Partition Header Validation
1.验证头文件 CheckSum
2.加解密长度验证
3.获取目标CPU,目标设备(PS/PL)
4.验证加载的RAM地址是否有效,包括TCM,DDR
4.2 Partition Copy
1.拷贝PL程序到 temp DDR 地址
2.拷贝PS到加载地址
3.拷贝PMU Firmware 到 PMU RAM
4.3 Partition Validation
- PS端如果需要加密认证,则进行解密,拷贝到目标
- 加载PL端bit, 初始化PACP,通过CSUDMA发送bit到PACP,等待PL端完成。
- 唤醒PMU处理器
五. Handoff
主要完成以下工作:
- PM初始化
- 保护配置
- 唤醒CPU
5.1 PM Init
Platform Managerment相关的初始化工作:
1.通过IPI的ID查找IPI配置
2.初始化PMU 的IPI
3.初始化IPI库
4.配置Power Mangerment
5.2 Protection Config
1.关闭SYSMON的报警
2.应用XMPU保护相关配置
3.锁住XMPU
4.开启SYSMON报警
5.3 Handoff
所有所有镜像分区内容:
一.镜像目标CPU为其他CPU且需要提前启动
1.Power up 对应CPU
2.更新CPU运行,复位地址
3.复位CPU,此CPU将开始执行其对应的程序
二. 镜像目标CPU为正在运行的CPU需要提前启动
1.更新启动地址
三.正在运行的CPU处理
5.标志FSBL 完成
6.退出FSBL,XFsbl_Exit((PTRSIZE) HandoffAddress, Flags);
7.进入xfsbl_exit.S 的XFsbl_Exit函数
8.跳转到目标地址执行 后面的应用程序
C语言传过来的目标运行地址存在R0/X0中
32位时:
64位时:X30是链接寄存器
参考文档
ug1085-zynq-ultrascale-trm.pdf
ug1283-bootgen-user-guide-zh-cn-2022.2.pdf
ug1137-zynq-ultrascale-mpsoc-swdev.pdf