赞
踩
这里主要是针对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 secondary program loader,则需要PS端启动初始化代码,可以从xilinx sdk的hw platform
工程获得。如图所示:
只需要上图中的ps7_init_gpl.c
和ps7_init_gpl.h
文件拷贝到{uboot源码}/board/xilinx/zynq
目录下对应的目录即可,如下图所示。比如,我目前是通过zynq_zed
这个改的,所以只需要把ps7_init_gpl.c
和ps7_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程序也更方便。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。