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

赛灵思ZYNQ系列的启动过程分析

本文章参考ug585和ug821。

一、启动流程

1.1 BOOTROM启动

        BOOTROM是固化在SOC内部的一个程序或代码。上电后BOOTROM立刻启动工作。

        第一步,初始化QSPI、SD卡等外设;
        第二步,从存储介质中读取BOOT.BIN文件,并对BOOT.BIN进行解析;(BOOT.BIN中一般包含FSBL文件、裸机程序(或U-BOOT)、FPGA bit文件);
        第三步,从BOOT.BIN中解析出FSBL代码段的地址和大小等信息,将FSBL代码段拷贝到SOC内部SRAM中,启动FSBL运行。

1.2 FSBL启动

        FSBL文件,一般包含在BOOT.BIN文件内,主要用于启动U-BOOT(或用户裸机程序)和加载FPGA代码。需要注意的是,FSBL文件可以由用户自定义修改,vitis IDE中提供了源码。

        第一步,初始化SD卡和QSPI等外设;
        第二步,初始化DDR芯片;
        第三步,先加载FPGA bit程序(FPGA工作),再启动用户裸机程序(或启动U-BOOT)。

1.3 U-BOOT启动

        U-BOOT一般由U-BOOT官网、SOC厂家或者板卡厂家提供,主要用于linux等系统内核的启动工作。U-BOOT也可以由用户自定义修改移植。
        U-BOOT中,包含了SD卡、QSPI等外设的驱动程序,也包含IIC、文件系统、网络相关协议的驱动。

1.4 程序运行

        linux内核运行。

二、文件格式解析

       使用Vitis IDE软件可以生成BOOT.BIN文件。BOOT.BIN中,包含了FSBL镜像+U-BOOT镜像(或者裸机程序)+bit文件。

        BOOTROM程序搜索BOOT.BIN时,按照下图方式进行搜索。首先搜索0x0地址下,是否包含image ID,若没有,则地址累加0x8000继续寻找,地址最大不超过规定地址(比如QSPI,地址偏移不能超过16MB)。

        搜索到BOOT.BIN的头后,按照格式进行解析。

2.1 BOOTROM header的格式

解释如下:

偏移起始地址名称字节数目数值说明
0x000中断向量表32字节/中断向量表
0x020宽度检测4字节0xAA995566用于检测QSPI数据宽度
0x024镜像ID4字节0x584C4E58Image ID,其ASCII码为XLNX
0x028加密状态4字节0xA5C3C5A3或0x3A5C3C5A

加密与否.
0xA5C3C5A3:加密,eFUSE 秘钥
0x3A5C3C5A:加密,带电池的RAM秘钥

其余数值:未加密

0x02CFSBL或用户定义4字节/FSBL或用户定义,忽略
0x030源偏移4字节/表示从有效的BOOTROM头开始到FSBL镜像或者用户代码之间的地址偏移量,该数值必须大于等于0x8C0
0x034镜像长度4字节/FSBL的长度,指示BOOTROM拷贝FSBL的长度
0x038FSBL加载地址4字节/将FSBL拷贝到OCM(片内SRAM)的哪个地址,一般为0x0
0x03C执行位置4字节/FSBL在OCM中的运行地址,一般为0x0.
0x040总的镜像长度4字节/FSBL的长度,指示BOOTROM拷贝FSBL的长度。一般与0x34地址的信息保持一致。
0x044QSPI配置字4字节0x00000001固定字节
0x048校验和4字节/将0x020~0x047地址的数据按照32bits长度相加,再取反即可。若相加后数据超过32bits,取低32bits取反。
0x04C~0x097FSBL或用户定义84字节/FSBL或用户定义,忽略
0x098Image header table4字节/Image header table的位置,位置偏移量,具体观看ug585
0x9CPartition header table4字节/Partition header table的位置,位置偏移量,具体观看ug585
0x0A0~0x89F寄存器初始化2048字节/寄存器初始化的参数
0x8C0///FSBL/用户代码必须大于等于此地址

2.2 FSBL程序

        BOOT.BIN头部中,记录里FSBL代码的位置,大小,以及FSBL在SRAM中中的加载地址、执行地址。


        偏移地址0x30,指示了FSBL代码在BOOT.BIN文件中的位置偏移量
        偏移地址0x34,指示了FSBL代码的长度。

        偏移地址0x38,指示了FSBL代码在SRAM中的加载地址。

        BOOTROM代码解析到这些信息之后,就会读取FSBL程序,拷贝到SRAM中,进行启动运行。

2.3 BIT文件和U-BOOT(裸机程序)

        BOOTROM启动完FSBL之后,其工作就完成,剩下的工作由FSBL程序完成。FSBL代码运行之后,负责从BOOT.BIN中找到U-BOOT镜像和bit文件,,然后把bit文件加载到PL侧,然后启动U-BOOT。

        这里涉及到三个数据表:image header table 、  partition header table以及image header。

        Image header table仅有1个。partition header table和image header成对出现,有多少个镜像,就有对少对可以有多个,有多少个镜像,就有多少个(比如bit文件即算一个镜像,u-boot也算一个镜像,裸机程序也算一个镜像)。

        参考ug821文档。

2.3.1 image header table

解释如下:

地址偏移名称字节数目数值说明
0x0版本号4字节0x01020000固定值
0x4镜像header的数量4字节/比如此处为3,即包含fsbl镜像,bit镜像,u-boot镜像
0x8第一个partition header table的偏移量4字节/注意,以word为单位,即4个字节
0xC第一个image header的偏移量4字节/注意,以word为单位,即4个字节
0x10Header authentication的偏移量4字节/注意,以word为单位,即4个字节
0x1C填充//使用0xFF填充,使image header table凑足64字节

2.3.2 image header

解释如下:

地址偏移名称字节数目数值说明
0x0下一个image header的偏移4字节/下一个image header的字偏移,如果此image header是最后一个,则此处应该为0。注意,以word为单位,即4个字节
0x4相关联的partition header table的偏移4字节/注意,以word为单位,即4个字节
0x8Partition count4字节0x0总是0
0xCImage name length4字节/实际分区计数值
0x10Image nameN字节/image名称,ASCII码,大端模式存储
可能为FSBL/u-boot/bit文件镜像
/字符串终止符4字节0x0/
/填充/0xFF使用0xFF填充,使image header 凑足64字节的整数倍

2.3.3 partition header table

        含有的信息主要有:镜像的大小、镜像的地址,加载到的SRAM地址、运行的SRAM地址等。

解释如下:

地址偏移名称字节数目数值说明
0x0加密分区的数据长度4字节/注意,以word为单位,即4个字节
0x04未加密分区的数据长度4字节/注意,以word为单位,即4个字节
例如该分区是u-boot分区,则指示了u-boot的长度。
0x08加密+填充+扩展+身份验证的数据总长度4字节//
0x0C目的加载地址4字节/该分区加载到SRAM的地址
0x10目的运行地址4字节/加载到SRAM后,该分区的SRAM运行地址
0x14镜像偏移地址4字节/该分区在整个BOOT.BIN文件中的偏移地址,从该地址读取分区程序。
注意,以
0x18属性位4字节//
0x1C分区计数4字节//
0x20校验字的偏移地址4字节//
0x24Partition header tablel对应的image header的地址4字节/注意,以word为单位,即4个字节
0x28加密相关字段4字节//
0x2C未定义4字节0x00/
0x30未定义4字节0x00/
0x34未定义4字节0x00/
0x38未定义4字节0x00/
0x3C校验和4字节//


http://www.kler.cn/a/451665.html

相关文章:

  • 【解决报错】AttributeError: ‘NoneType‘ object has no attribute ‘group‘
  • 《Mycat核心技术》第06章:Mycat问题处理总结
  • 《Java核心技术I》Swing的网格包布局
  • 如何识别钓鱼邮件和诈骗网站?(附网络安全意识培训PPT资料)
  • 贪心算法(三)
  • 如何打造用户友好的维护页面:6个创意提升WordPress网站体验
  • AIA - IMSIC之二(附IMSIC处理流程图)
  • LeetCode 203. 移除链表元素 (C++实现)
  • CSES-1132 Tree Distances I(树的直径)
  • 云宏获亚太信息通讯科技大赛二等奖
  • 【河南新标】豫财预〔2024〕105号-《关于省级政务信息化建设项目支出预算标准的规定》-费用标准解读系列29
  • 线性代数期末总复习的点点滴滴(1)
  • 【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
  • 【python实战】-- mtf覆盖率计算
  • 产品升级!Science子刊同款ARGs-HOST分析,get!
  • 【Python知识】Python面向对象编程知识
  • MySQL知识汇总(一)
  • Stable Diffusion WebUI Two Shot 项目常见问题解决方案
  • 在Android应用中实现条形码扫描与购物车功能
  • Linux系统在没有工具软件时如何简单测试串口?
  • Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
  • 15_HTML5 表单属性 --[HTML5 API 学习之旅]
  • Nginx 常用安全头
  • Linux(Centos 7.6)基本信息查看
  • Flutter:生成二维码
  • 鸿蒙开发使用axios请求后端网络服务出现该错误