ZYNQ启动流程分析之BOOT.BIN头

BOOT.BIN头简介

  BOOT.BIN头其实就是BOOT.BIN文件前面的一段头部数据,并且这个头部数据是按照一定的格式组织在一起的,并且该头部数据能够被BootROM代码解析。
在这里插入图片描述
在这里插入图片描述
  在boot.bin文件中从地址0-0x8FF可以分为17个部分,每个部分都有一定的含义。注意:BOOT.BIN的数据存储为小端模式。
    (1)0x000:中断向量表。
    (2)0x020:固定值0xaa995566。
    (3)0x024:固定值0x584c4e58,ASCII:XLINX。
    (4)0x028:如果是0xa5c3c5a3或者0x3a5c3c5a则为加密的。
    (5)0x02C:bootrom头版本号,不用管。
    (6)0x030:此参数包含从有效bootrom头开始到fsbl/用户代码映像所在位置的字节数,也就是fsbl/用户代码的地址偏移量。该地址偏移量必须大于等于0x8C0,因为头部信息就是0x8C0结束的。
    (7)0x034:记录fsbl的长度,用于指导BootROM代码拷贝fsbl长度。
    (8)0x038:将fsbl拷贝到OCM的什么位置,一般为0x0,加载地址。
    (9)0x03C:fsbl在OCM中的运行地址,一般定义为0x0,运行地址。
    (10)0x040:同7。
    (11)0x044:0x01,为固定值。
    (12)0x048:头部校验和(将0x020-0x047之间的数据按照32bit长度进行相加,并安位取反即可!若相加之后的数据大小超过32bit,则取低32bit进行取反)。
    (13)0x04C~0x097: fsbl/用户代码自定义,不需要的话可以全部填充为0。
    (14)0x098:image header table 位置偏移量。
    (15)0x09C :partition header table的所在位置,记录的是第一个partition header table的位置。
    (16)0x0A0~0x89F: 寄存器初始化的参数。
    (17)0x8C0:fsbl、用户代码必须要等于或高于此地址。

如何通过BOOT.BIN头部找到FSBL

  BOOT.BIN头部信息当中记录了fsbl代码的位置、大小以及fsbl代码在SRAM内存中的加载地址。
  0x30地址记录了fsbl代码在BOOT.BIN文件中的位置偏移量。
  0x34记录了fsbl代码的长度。
  0x38记录了fsbl代码在SRAM中的加载地址。
  BootROM代码解析到这些信息之后,就会从fsbl代码中的位置偏移量去读取0x34中记录的大小,然后把它拷贝到fsbl代码的加载地址中。
    最后跳转到0x3C地址中记录的fsbl的运行地址中。

通过BOOT.BIN如何找到U-Boot和bitstream

  BOOT.BIN文件当中包含了fsbl+u-boot镜像以及bitstream文件。
  BootROM代码需要通过解析BOOT.BIN头部信息去找到fsbl。
  BootROM代码启动fsbl之后他的使命就完成了。
  fsbl代码运行之后,要负责从BOOT.BIN文件中找到U-Boot镜像和bitstream文件。然后把bitstream文件加载到ZYNQ PL端,然后要启动U-Boot。
  首先这里要涉及到三个数据表:image header table、partition header table以及image header。
partition header table和image header是成对出现的。
BOOT.BIN文件中包含了多少对镜像,那么就有多少对partition header table以及image header。
  下面的内容可以参考UG821
在这里插入图片描述
  (1)0x0:image header table的版本号。
  (2)0x4:image header的数量。
  (3)0x8:第一个Partition Header table的位置偏移量。注意这里是以word为单位进行计算的,所以实际的偏移量需要乘以4。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值