【Xilinx】MPSOC启动流程(三)- 第一段bootloader(FSBL)

此系列博客,仅对Xilinx平台PS端(ARM部分)开发做介绍,不对PL(FPGA)做过多介绍。

目录

三. Boot Device Initalization

3.1 Primary Boot Device Init

3.2 Secondary Boot Device

​​​​​​​3.3 Validate Header

​​​​​​​四. Partition Load

​​​​​​​4.1 Partition Header Validation

​​​​​​​4.2 Partition Copy

​​​​​​​4.3 Partition Validation

五. ​​​​​​​​​​​​​​Handoff

​​​​​​​5.1 PM Init

​​​​​​​5.2 Protection Config

​​​​​​​5.3 Handoff

参考文档


三. 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结构

头文件验证流程:

  1. 获取boot header内容
  2. 读取boot image attr

  1. 获取image heaer table
  2. 验证image header table信息

5.读取对应镜像的image header

​​​​​​​四. Partition Load

主要完成分区头文件验证,镜像拷贝等工作

  1. 验证分区头文件

 

  1. 镜像拷贝
  2. 分区验证

​​​​​​​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

 

  1. PS端如果需要加密认证,则进行解密,拷贝到目标
  2. 加载PL端bit, 初始化PACP,通过CSUDMA发送bit到PACP,等待PL端完成。
  3. 唤醒PMU处理器

五. ​​​​​​​​​​​​​​Handoff

主要完成以下工作:

  1. PM初始化
  2. 保护配置
  3. 唤醒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

猜你喜欢

转载自blog.csdn.net/qq_37755518/article/details/130128145
今日推荐