seo站长网,家庭电脑可以做网站吗,织梦系统网站打开速度慢,旅游网站建设的论文篇首
最近突发奇想#xff0c;Xilinx 的集成开发环境已经很好了#xff0c;很多必要的代码都直接生成了#xff0c;这给开发者带来了巨大便利的同时#xff0c;也让人错过了很多代码的精彩#xff0c;可能有很多人用了很多年了#xff0c;都还无法清楚的理解其中过程。博…篇首
最近突发奇想Xilinx 的集成开发环境已经很好了很多必要的代码都直接生成了这给开发者带来了巨大便利的同时也让人错过了很多代码的精彩可能有很多人用了很多年了都还无法清楚的理解其中过程。博主准备以FSBL为例与大家深入探讨一番从而加深对ZYNQ的加载过程的理解以便大家作出更精彩的设计 LoadBootImage() 解读
本文以Zynq7000 FSBL工程代码为基础分析启动流程核心函数 L o a d B o o t I m a g e ( ) LoadBootImage() LoadBootImage()的执行逻辑与关键技术细节。
一、函数调用框架
int LoadBootImage(void) {FsblHookBeforeBitstreamDdr(); // 钩子函数Status XFsbl_LoadPartitions(...); // 核心加载FsblHookBeforeHandoff(); // 移交前预处理return Status;
}二、 函数执行全流程分解
** 函数入口与预处理**
int LoadBootImage(void) {u32 Status XFSBL_SUCCESS;XTime tStart, tEnd; // 64位计时器若启用性能分析硬件依赖 依赖psu_init.c完成的PS端基础初始化时钟、MIO、SLCR锁等DDR物理层已通过Xil_DDRInit()完成训练psu_ddr_phyinit.c
** F s b l H o o k B e f o r e B i t s t r e a m D d r ( ) FsblHookBeforeBitstreamDdr() FsblHookBeforeBitstreamDdr() 钩子函数**
#ifdef FSBL_PERFXTime_GetTime(tStart); // 记录TSC起始值AXI Timer 0
#endif
/* 用户自定义扩展点可插入DDR重配置代码 */关键寄存器操作 DDRC控制通过Xil_Out32(0xFD070000, 0x00040010)设置DDRC_ADDRMAP0调整地址映射OCM重映射关闭OCM缓存SLCR.OCM_CFG寄存器位3置1 X F s b l L o a d P a r t i t i o n s ( ) XFsbl_LoadPartitions() XFsblLoadPartitions() 核心加载
阶段1Boot Header解析
XFsblPs_BootHdr Header;
XFsbl_CheckBootHeader(ImageAddr, Header); // 从QSPI/NAND读取头部头部结构体xfsbl_ps_boothdr.htypedef struct {u32 ImageID; // 魔数0xAA995566u32 NumPartitions; // 分区总数含PL比特流应用u32 AuthType; // 加密类型0None, 1RSA-2048u32 Checksum; // 头部的CRC32校验// ... 其他字段分区表偏移、证书偏移等
} XFsblPs_BootHdr;阶段2安全认证以RSA-2048为例
XSecure_Sha3Init(Sha3Instance); // 初始化SHA-3引擎
XSecure_Sha3Update(Sha3Instance, (u8*)ImageAddr, Header.HashLength);
XSecure_Sha3Final(Sha3Instance, CalculatedHash); // 计算哈希
XSecure_VerifySignature(CalculatedHash, StoredSignature); // RSA验签硬件加速 使用PS内置的CSU模块Crypto SubsystemRSA密钥存储在eFUSE或BBRAM中通过XSecure_GetEfuseKek()读取
阶段3分区加载循环
for (u8 i0; iHeader.NumPartitions; i) {XFsblPs_PartitionHdr PartHdr;XFsbl_ReadPartitionHdr(ImageAddr Offset, PartHdr);if (PartHdr.Attr PART_ATTR_PL) { // PL比特流分区XFsbl_LoadPlBitstream(PartHdr.LoadAddr, PartHdr.Size);} else { // PS应用程序分区XFsbl_LoadElf(PartHdr.LoadAddr, PartHdr.Size); // ELF解析}
}关键操作细节 PL加载通过DevCfg接口XDcfg_CfgInitialize()写入PCAPELF加载解析Program Headers使用Xil_Out32()逐段写入DDR地址对齐通过XLAT_FSBL_TABLE处理非32位对齐访问触发Data Abort时自动转换 F s b l H o o k B e f o r e H a n d o f f ( ) FsblHookBeforeHandoff() FsblHookBeforeHandoff() 移交前处理
Xil_DCacheFlush(); // 数据缓存刷新确保DDR数据一致性
Xil_Out32(CRL_APB_BASE 0x24, 0x01000F00); // 配置时钟分频寄存器详解 CRL_APB (0xFF5E0024): 设置RPLL_CTRL分频系数CPU1.3GHz, DDR1066MHzSLCR_UNLOCK (0xF8000008): 写入0xDF0D解锁保护寄存器 三、关键子函数解析 F s b l H o o k B e f o r e B i t s t r e a m D d r ( ) FsblHookBeforeBitstreamDdr() FsblHookBeforeBitstreamDdr() 作用DDR初始化前的预处理钩子执行内容#ifdef FSBL_PERF
XTime_GetTime(tStart); // 性能计数器启动
#endifX F s b l L o a d P a r t i t i o n s ( ) XFsbl_LoadPartitions() XFsblLoadPartitions() 流程分解 X F s b l C h e c k B o o t H e a d e r ( ) XFsbl_CheckBootHeader() XFsblCheckBootHeader() 验证BIN文件头结构含 s i z e o f ( X F s b l P s B o o t H d r ) sizeof(XFsblPs_BootHdr) sizeof(XFsblPsBootHdr) X F s b l A u t h e n t i c a t i o n ( ) XFsbl_Authentication() XFsblAuthentication() 执行RSA-2048签名验证通过 X S e c u r e S h a 3 I n i t ( ) XSecure_Sha3Init() XSecureSha3Init()等加密API分区加载循环 遍历分区表加载for(u8 PartNum0; PartNumHeader.NumPartitions; PartNum){XFsbl_LoadPartition(...); // 加载单个分区#ifdef FSBL_DEBUGxil_printf(Partition %d Loaded\r\n, PartNum);#endif
}F s b l H o o k B e f o r e H a n d o f f ( ) FsblHookBeforeHandoff() FsblHookBeforeHandoff() 执行DDR刷新操作 X i l D C a c h e F l u s h ( ) Xil_DCacheFlush() XilDCacheFlush()配置时钟分频器通过 X i l O u t 32 ( ) Xil_Out32() XilOut32()写CRL_APB寄存器
四、核心宏定义
$FSBL_DEBUG 控制调试输出默认关闭KaTeX parse error: Double subscript at position 15: XPAR_PSU_DDR_0_̲S_AXI_BASEADDR DDR控制器基地址宏值 0 x 00100000 0x00100000 0x00100000 X L A T F S B L T A B L E XLAT_FSBL_TABLE XLATFSBLTABLE 地址转换表处理非对齐访问
五、执行流程图 初始化硬件 → 验证头部 ↓ ↓ DDR预处理 → 加载分区 ↘ ↓ 移交控制权 \begin{array}{ccc} \text{初始化硬件} \rightarrow \text{验证头部} \\ \downarrow \downarrow \\ \text{DDR预处理} \rightarrow \text{加载分区} \\ \searrow \downarrow \\ \text{移交控制权} \end{array} 初始化硬件↓DDR预处理→→↘验证头部↓加载分区↓移交控制权
六、 关键数据流与硬件交互
数据加载路径 QSPI Flash → AXI Quad-SPI控制器 OCM缓存 → DMA DDR3 \text{QSPI Flash} \xrightarrow{\text{AXI Quad-SPI控制器}} \text{OCM缓存} \xrightarrow{\text{DMA}} \text{DDR3} QSPI FlashAXI Quad-SPI控制器 OCM缓存DMA DDR3
性能优化 启用DMA传输XQspiPs_DmaTransfer()使用线性突发模式QSPI配置为DDR模式时钟速率83MHz
安全认证流程 原始镜像 → SHA-3/384 哈希值 哈希值 → RSA-2048签名 验签结果 \begin{aligned} \text{原始镜像} \xrightarrow{\text{SHA-3/384}} \text{哈希值} \\ \text{哈希值} \xrightarrow{\text{RSA-2048签名}} \text{验签结果} \end{aligned} 原始镜像SHA-3/384 哈希值哈希值RSA-2048签名 验签结果
抗攻击设计 哈希计算前会清空CSU的密钥缓存XSecure_CsuAesKcvClear()签名失败触发安全锁定通过XSecure_SetTamperConfig() 七、调试与错误处理
调试宏启用
#define FSBL_DEBUG // 启用调试输出典型输出XFsbl_Debug: Partition 0 Loaded at 0x00100000 (Size 1MB)
XFsbl_Debug: PL Bitstream CRC Check Passed** 错误码定义**
#define XFSBL_ERROR_BOOTHEADER 0x1000 // 头部校验失败
#define XFSBL_ERROR_AUTHFAIL 0x1001 // RSA验签错误
#define XFSBL_ERROR_PLLLOCK 0x1002 // 时钟锁相环失锁错误处理 记录错误到PMU全局状态寄存器XFsbl_WriteReg(PMU_GLOBAL_GLOB_GEN_STORAGE, errCode)触发系统复位XFsbl_FallbackReset() **八、 总结 ** L o a d B o o t I m a g e ( ) LoadBootImage() LoadBootImage()作为Zynq7000启动链的核心其执行涵盖硬件初始化、安全认证、多阶段加载三大模块。函数首先通过 F s b l H o o k B e f o r e B i t s t r e a m D d r ( ) FsblHookBeforeBitstreamDdr() FsblHookBeforeBitstreamDdr()完成DDR时序微调与性能监控启动随后 X F s b l L o a d P a r t i t i o n s ( ) XFsbl_LoadPartitions() XFsblLoadPartitions()深度解析Boot Header结构利用CSU硬件模块实现RSA-2048/SHA-3安全认证并依据分区属性PL比特流或PS应用选择PCAP配置或ELF加载机制。关键点包括通过DevCfg接口的PL动态重配置、基于XLAT表的非对齐地址访问补偿、以及DMA加速的QSPI数据传输。移交控制权前函数会强制刷新数据缓存确保内存一致性并通过CRL_APB寄存器组重配时钟域。调试方面FSBL_DEBUG宏可实时输出分区加载状态而错误处理机制将异常状态固化至PMU寄存器为后续故障分析提供关键日志。该函数的设计充分体现了Zynq架构中PS-PL协同、硬件安全加速、以及多级启动链的技术特点。 注具体实现细节需参考对应版本的 f s b l _ h o o k s . c fsbl\_hooks.c fsbl_hooks.c和 x f s b l _ p a r t i t i o n l o a d . c xfsbl\_partition_load.c xfsbl_partitionload.c源码文件。 文章转载自: http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn http://www.morning.mpflb.cn.gov.cn.mpflb.cn http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com http://www.morning.taipinghl.cn.gov.cn.taipinghl.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.lmhcy.cn.gov.cn.lmhcy.cn http://www.morning.kysport1102.cn.gov.cn.kysport1102.cn http://www.morning.rxydr.cn.gov.cn.rxydr.cn http://www.morning.rkqkb.cn.gov.cn.rkqkb.cn http://www.morning.dzqr.cn.gov.cn.dzqr.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.czqqy.cn.gov.cn.czqqy.cn http://www.morning.lzqdd.cn.gov.cn.lzqdd.cn http://www.morning.mftdq.cn.gov.cn.mftdq.cn http://www.morning.pfntr.cn.gov.cn.pfntr.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn http://www.morning.tjcgl.cn.gov.cn.tjcgl.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.ebpz.cn.gov.cn.ebpz.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.ishoufeipin.cn.gov.cn.ishoufeipin.cn http://www.morning.skrcn.cn.gov.cn.skrcn.cn http://www.morning.pkmw.cn.gov.cn.pkmw.cn http://www.morning.mplld.cn.gov.cn.mplld.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.lsfrc.cn.gov.cn.lsfrc.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.zplzj.cn.gov.cn.zplzj.cn http://www.morning.tdfyj.cn.gov.cn.tdfyj.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.pwbps.cn.gov.cn.pwbps.cn http://www.morning.pgzgy.cn.gov.cn.pgzgy.cn http://www.morning.kyfnh.cn.gov.cn.kyfnh.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.mkrqh.cn.gov.cn.mkrqh.cn http://www.morning.jlmrx.cn.gov.cn.jlmrx.cn http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.tnjff.cn.gov.cn.tnjff.cn http://www.morning.ytbr.cn.gov.cn.ytbr.cn http://www.morning.wqjpl.cn.gov.cn.wqjpl.cn http://www.morning.grcfn.cn.gov.cn.grcfn.cn http://www.morning.yfphk.cn.gov.cn.yfphk.cn http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.bsrqy.cn.gov.cn.bsrqy.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.jncxr.cn.gov.cn.jncxr.cn http://www.morning.bbgn.cn.gov.cn.bbgn.cn http://www.morning.rrxnz.cn.gov.cn.rrxnz.cn http://www.morning.dpflt.cn.gov.cn.dpflt.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.rmqmc.cn.gov.cn.rmqmc.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.ryfq.cn.gov.cn.ryfq.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.rnmdp.cn.gov.cn.rnmdp.cn http://www.morning.mlpmf.cn.gov.cn.mlpmf.cn http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.yfphk.cn.gov.cn.yfphk.cn http://www.morning.nccyc.cn.gov.cn.nccyc.cn http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn http://www.morning.pyxwn.cn.gov.cn.pyxwn.cn