BOOT.BIN文件


前言

本篇关于ZYNQ启动当中的所需要的的BOOT.BIN文件的介绍


一、什么是BOOT.BIN?

BOOT.BIN头其实就是BOOT.BIN文件前面的一段头部数据,并且这个头部数据是按照一定格式组织在一起的,并且该头部数据能够并BootROM代码所解析。

二、BOOT.BIN头格式介绍

在这里插入图片描述
在这里插入图片描述
在boot.bin文件中从地址0-0x8FF可以分成17个部分,每个部分都有一定的含义

  1. 0x000 中断向量表
  2. 0x020 固定值 0xaa995566
  3. 0x024 固定值 0x584c4e58 ASCII: XLNX
  4. 0x028 如果是0xa5c3c5a3或者0x3a5c3c5a为加密的
  5. 0x02C bootrom头版本号,不用管
  6. 0x030 此参数包含从有效bootrom头开始到fslb/用户代码映像所在位置的字节数,也就是fsbl/用户代码的地址偏移量。该地址偏移量必须要大于等于0x8C0,原因就很简单了!
  7. 0x034 记录fsbl的长度,用于指导BbootROM代码拷贝fsbl长度
  8. 0x038将fsbl拷贝到OCM的什么位置 一般为0x0 加载地址 指导BootROM代码拷贝fsbl到SRAM内存中的哪个位置。
  9. 0x03C fsbl在OCM中的运行地址一般定义为0x0 运行地址 指导BootROM代码跳转到SRAM的哪个地址去运行fsbl(去启动)
  10. 0x040 同7
  11. 0x044 0x01为固定值
  12. 0x048 校验和(将0x020-0x047之间的数据按32bit长度进行相加,并取反即可!若相加之后的数据大小超过32bit,则取低32bit数据进行取反)
  13. 0x04C~0x097 fsbl/用户代码自定义,不需要的话可以全部填充为0
  14. 0x098 image header table 位置偏移量 image header table的位置
  15. 0x09C 记录了第一个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的运行地址中去启动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。
image header table只有一个,partition header table 和 image header 是成对出现的
BOOT.BIN文件中包含了多少个镜像,那么就有多少对partition header table 和 image header。


总结

BOOT.BIN头是按照一定格式组织在一起的,并且可以由BootRom代码所解析,在BOOT.BIN头中记录了fsbl代码的位置、大小等信息,通过BOOT.BIN可以找到U-BOOT和bitstraem,并将bitstream加载到ZYNQPL端,然后启动U-BOOT。

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种容器化技术,可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,然后在任何支持Docker的环境中运行。FRP是一种用于内网穿透的工具,可以将内网服务暴露给外网访问。 要在Docker中部署FRP,可以按照以下步骤进行操作: 1. 首先,创建一个用于存放FRP配置文件的目录,例如`/path/to/config`。 2. 在该目录下创建一个名为`frps.ini`的配置文件,并按照FRP的配置规则进行配置。例如,可以指定监听端口、认证方式、代理设置等。 3. 创建一个名为`Dockerfile`的文件,并在其中编写Docker镜像的构建指令。以下是一个示例的`Dockerfile`内容: ``` FROM alpine:latest LABEL maintainer="Your Name <your_email@example.com>" # 安装FRP RUN apk add --no-cache wget RUN wget -O /tmp/frp.tar.gz https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz RUN tar -xzf /tmp/frp.tar.gz -C /tmp && mv /tmp/frp_0.37.1_linux_amd64 /frp # 复制配置文件 COPY frps.ini /frp/frps.ini # 暴露FRP端口 EXPOSE 7000 # 启动FRP CMD ["/frp/frps", "-c", "/frp/frps.ini"] ``` 4. 构建Docker镜像。在终端中进入`Dockerfile`所在的目录,执行以下命令: ``` docker build -t frps . ``` 其中,`frps`是镜像的名称,可以根据需要进行修改。 5. 运行Docker容器。执行以下命令: ``` docker run -d -p 7000:7000 --name frps-container frps ``` 其中,`7000:7000`表示将容器的7000端口映射到主机的7000端口,`frps-container`是容器的名称,可以根据需要进行修改。 现在,FRP已经在Docker中成功部署并运行了。你可以通过访问主机的7000端口来访问FRP服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值