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

该文章详细介绍了Xilinx平台ARM部分的启动流程,包括BootDeviceInitialization的设备初始化和启动头验证,PartitionLoad的分区头文件验证与镜像拷贝,以及Handoff阶段的PM初始化和保护配置。在启动过程中涉及了多种启动设备如USB、QSPI、SD/EMMC,还有加密解密、镜像验证和CPU的唤醒管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此系列博客,仅对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有意思科技

给与不给,我都会更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值