ZYNQ芯片+Linux系统搭建完成后,希望通过QSPI-Flash的方式来进行程序加载。
QSPI-Flash启动则需要烧录以下文件:
BOOT.bin : fsbl.elf + uboot.elf
uImage : linux内核
zynq_board.dtb : zynq平台的设备树
uramdisk.image.gz : 文件系统
design.bit : FPGA程序比特流文件(注意:在第二种烧录方法中需要使用design.bin文件)
准备完成之后,将这些文件烧录到QSPI Flash中有两种方法:
1、以上5中文件在SDK中直接制作成一个BOOT.bin,通过JTAG直接烧录到Flash中。
缺点:一旦程序需要更新,尤其是其中一种程序需要更新,都要一起重新生成bin文件,繁琐耗时。
2、通过SDK引导启动UBOOT,然后通过UBOOT中的tftp和sf命令将以上5个文件分区烧录到Flash中。
本文主要记录如何通过SDK来引导 UBOOT,后续章节将会详细介绍Flash如何分区且如何通过tftp和sf命令进行烧录。
首先将VIVADO生成的bit文件导入到SDK中如下图所示
启动SDK后,在SDK中启动XMD控制中心
然后将开发平台串口接入PC,因为在SDK中引导uboot后,在uboot启动过程中将会把打印信息通过串口输出。
完成以上操作之后,在XMD控制中心输入一下命令:
connect arm hw
cd D:/project_1/project_1.sdk/Top_hw_platform_0(根据自己生成的文件目录)
fpga -f fpga.bit(**根据自己实际情况,如果你的串口使用了EMIO则必须要首先启动FPGA程序,否则后续无法进行串口打印**)
source ps7_init.tcl
ps7_init
dow u-boot.elf
con
之后可以看到uboot开始启动,并在串口进行打印。
调试中的问题记录:
1、通过第2中方法将程序烧录到flash中需要注意fpga程序需要使用bin文件。
2、出现过串口不打印的现象是由于使用EMIO则必须要在xmd控制中心加载fpga程序
3、出现过网口不通的现象是由于zynq的硬件配置时没有将网络的相关管脚全部勾选。
4、在ps_init过程中出现MMU section translation fault 主要是由于自己已经烧录的linux内核已经启动,应该将原来烧录的停在uboot阶段即可。
网友评论