ZYNQ7000 uboot实现两级引导及加载FPGA程序

ZYNQ7000 uboot实现两级引导及加载FPGA程序

​ 这里主要是针对qspi flash启动,然后uboot源码为xilinx-v2019.2版本。

一、启动介绍

​ zynq一般情况下,我们是通过xilinx的sdk生成fsbl,然后和fpga程序、uboot一起,生成boot.bin文件,最后固化到spi flash。这样,我们每次更新uboot或者fpga程序,都要重新生成boot.bin,比较麻烦。因此这里可以用uboot secondary program loader即uboot spl来取代xilinx sdk的fsbl, 并且uboot spl很小,可以完全从zynq的 OCM启动。

​ uboot spl为uboot的第二阶段加载器,一般用来引导真正的uboot,在zynq中可以用来替换fsbl作为第一阶段的引导。这样每次更新了uboot,只需要将新的uboot通过网络或者jtag固化到指定的spi flash位置即可。当设备上电,uboot spl起来后,会从固定的位置去加载uboot。

二、uboot spl

​ 要实现uboot secondary program loader,则需要PS端启动初始化代码,可以从xilinx sdk的hw platform工程获得。如图所示:

在这里插入图片描述

只需要上图中的ps7_init_gpl.cps7_init_gpl.h文件拷贝到{uboot源码}/board/xilinx/zynq 目录下对应的目录即可,如下图所示。比如,我目前是通过zynq_zed 这个改的,所以只需要把ps7_init_gpl.cps7_init_gpl.h文件拷贝到zynq_zed 目录。
在这里插入图片描述

​ 如果是从qspi启动,需要在zynq-common.h 里面修改CONFIG_SYS_SPI_U_BOOT_OFFS 宏,来指定uboot在spi flash中存放的位置,当uboot spl程序起来后,则会从这个位置去引导uboot。

​ 最后编译uboot源码,则会在uboot源码根目录下生成一个spl目录,然后将spl目录的boot.bin 固化到spi flash,这里已经生成了boot.bin文件,因此不需要xilinx sdk再来生成boot.bin文件。其中uboot spl引导的uboot文件为u-boot.img,因此在固化uboot时,应该固化编译生成的u-boot.img文件(u-boot.img比u-boot.bin多64字节的头)。

##三、加载FPGA程序

​ zynq主要用Device Configuration Interface (devcfg)来加载FPGA程序,而在uboot下提供了fpga加载相关的指令,都是基于devcfg 控制器驱动实现的。如图所示:

在这里插入图片描述

​ 因此fpga程序也没必要每次和fsbl一起,生成boot.bin文件。完全可以通过uboot的命令来实现加载,并且通过uboot来更新fpga程序也更方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值