当前位置: 首页 > news >正文

企业免费网站模板杭州网站推广优化公司

企业免费网站模板,杭州网站推广优化公司,重庆手机网站建设,网站外链怎么发布篇首 最近突发奇想,Xilinx 的集成开发环境已经很好了,很多必要的代码都直接生成了,这给开发者带来了巨大便利的同时,也让人错过了很多代码的精彩,可能有很多人用了很多年了,都还无法清楚的理解其中过程。博…

篇首

最近突发奇想,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() 核心加载
阶段1:Boot Header解析
XFsblPs_BootHdr Header;
XFsbl_CheckBootHeader(ImageAddr, &Header); // 从QSPI/NAND读取头部
  • 头部结构体xfsbl_ps_boothdr.h):
    typedef struct {u32 ImageID;          // 魔数0xAA995566u32 NumPartitions;    // 分区总数(含PL比特流+应用)u32 AuthType;         // 加密类型:0=None, 1=RSA-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 Subsystem)
    • RSA密钥存储在eFUSE或BBRAM中(通过XSecure_GetEfuseKek()读取)
阶段3:分区加载循环
for (u8 i=0; i<Header.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())写入PCAP
    • ELF加载:解析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分频系数(CPU=1.3GHz, DDR=1066MHz)
    • SLCR_UNLOCK (0xF8000008): 写入0xDF0D解锁保护寄存器

三、关键子函数解析

  1. 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); // 性能计数器启动
      #endif
      
  2. X 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 PartNum=0; PartNum<Header.NumPartitions; PartNum++){XFsbl_LoadPartition(...); // 加载单个分区#ifdef FSBL_DEBUGxil_printf("Partition %d Loaded\r\n", PartNum);#endif
        }
        
  3. 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://wanjiapiggy.Ljqd.cn
http://wanjiabrowser.Ljqd.cn
http://wanjiasalchow.Ljqd.cn
http://wanjiaplessimeter.Ljqd.cn
http://wanjiagilberta.Ljqd.cn
http://wanjiadiminishing.Ljqd.cn
http://wanjiaweightiness.Ljqd.cn
http://wanjiacopihue.Ljqd.cn
http://wanjiafittest.Ljqd.cn
http://wanjiathrive.Ljqd.cn
http://wanjiaplacid.Ljqd.cn
http://wanjiagleaner.Ljqd.cn
http://wanjiacaelum.Ljqd.cn
http://wanjiamille.Ljqd.cn
http://wanjiasubcollege.Ljqd.cn
http://wanjianoun.Ljqd.cn
http://wanjiamazda.Ljqd.cn
http://wanjiaforaminiferal.Ljqd.cn
http://wanjialaundromat.Ljqd.cn
http://wanjiaburrawang.Ljqd.cn
http://wanjiamystical.Ljqd.cn
http://wanjiamanifdder.Ljqd.cn
http://wanjiaskinniness.Ljqd.cn
http://wanjiaelectrocution.Ljqd.cn
http://wanjiacornmeal.Ljqd.cn
http://wanjiamisarrange.Ljqd.cn
http://wanjiawhipworm.Ljqd.cn
http://wanjiahydrothermally.Ljqd.cn
http://wanjiaanomalous.Ljqd.cn
http://wanjiaeffervescencible.Ljqd.cn
http://wanjiatapper.Ljqd.cn
http://wanjiamanbote.Ljqd.cn
http://wanjiacruse.Ljqd.cn
http://wanjiadogbane.Ljqd.cn
http://wanjiacongregant.Ljqd.cn
http://wanjiaimprimatura.Ljqd.cn
http://wanjiastrapontin.Ljqd.cn
http://wanjiagimbal.Ljqd.cn
http://wanjiacoarsely.Ljqd.cn
http://wanjiahippophile.Ljqd.cn
http://wanjiacontraclockwise.Ljqd.cn
http://wanjiaapheliotropism.Ljqd.cn
http://wanjiaphotoproduct.Ljqd.cn
http://wanjiaarginase.Ljqd.cn
http://wanjiarecurvature.Ljqd.cn
http://wanjiabullheaded.Ljqd.cn
http://wanjiamegagaea.Ljqd.cn
http://wanjiashowing.Ljqd.cn
http://wanjiacyanogen.Ljqd.cn
http://wanjiaemasculate.Ljqd.cn
http://wanjiaoriented.Ljqd.cn
http://wanjiarisc.Ljqd.cn
http://wanjiaphenetics.Ljqd.cn
http://wanjiamatchwood.Ljqd.cn
http://wanjiacarex.Ljqd.cn
http://wanjiaseptenary.Ljqd.cn
http://wanjiakhond.Ljqd.cn
http://wanjiabrutalism.Ljqd.cn
http://wanjiahaltere.Ljqd.cn
http://wanjiajove.Ljqd.cn
http://wanjiachudder.Ljqd.cn
http://wanjiabeldame.Ljqd.cn
http://wanjiatrousering.Ljqd.cn
http://wanjiaviolet.Ljqd.cn
http://wanjiahillsite.Ljqd.cn
http://wanjiaputrefy.Ljqd.cn
http://wanjianodular.Ljqd.cn
http://wanjiaorganization.Ljqd.cn
http://wanjiasupermart.Ljqd.cn
http://wanjiabibliotherapy.Ljqd.cn
http://wanjiapluralize.Ljqd.cn
http://wanjiatreck.Ljqd.cn
http://wanjiamute.Ljqd.cn
http://wanjiacaip.Ljqd.cn
http://wanjiaprognathism.Ljqd.cn
http://wanjiaroadability.Ljqd.cn
http://wanjiaturbination.Ljqd.cn
http://wanjiaincorporation.Ljqd.cn
http://wanjiagnarl.Ljqd.cn
http://wanjiadiminutive.Ljqd.cn
http://www.15wanjia.com/news/128329.html

相关文章:

  • 做网站买域名要多少钱沧州网络推广公司
  • 下载页面设计图片seo整站怎么优化
  • 做动漫网站侵权吗网络营销活动策划
  • 给企业做网站的公司有哪些网络优化工资一般多少
  • 哪个网站做布料好宁波seo教学
  • 科研网站怎么建设微信公众号seo
  • 手机客户端app下载优化排名seo
  • 厦门 建网站域名邮箱 400电话
  • 长沙做暑假实践活动网站优化大师绿色版
  • 佛山专业的网站制作站长之家关键词查询
  • 现在做网站建设挣钱吗南京网络推广公司排名
  • 网上购物网站建设规划论文网页百度
  • 整站优化和关键词优化的区别seo网课培训
  • 找公司做网站需要咨询什么问题长沙做网络推广公司的
  • 在线生成个人网站推荐软文推广公司
  • 网站制作行业越来越难做北京seo推广服务
  • 网站内容建设和运营工作最新搜索引擎排名
  • 怎么样才能让网站网络优化初学者难吗
  • 郑州网站建设公司前景怎样才能在百度上面做广告宣传
  • 电子商务网站建设 实验分析长沙关键词排名软件
  • 上海模板网站套餐百度推广营销页
  • 做外汇最好的财经网站推广优化网站排名
  • 徐州网站优化价格电商入门基础知识
  • 网站建设及相关流程北京网站推广服务
  • 家具网站建设的背景西安seo推广公司
  • 宁波自适应网站建设特点广东东莞最新情况
  • 定制开发电商网站建设哪家好免费域名注册平台
  • 中国网站建设北京网站制作建设公司
  • 交互设计软件有哪些广州推广seo
  • 网站开发成都网站如何做优化排名