基于Smart Zynq与Lemon Zynq 的Petalinux开发 章节十 从QSPI FLASH 启动LINUX镜像

之前章节制作的都是TF卡的启动镜像,本文将介绍如何从QSPI FLASH 启动我们的镜像。

  • 此章节内容适用于下列主板
    • Lemon ZYNQ (CLG400封装的7020)
    • Smart ZYNQ SP / SP2 / SL 版的板子(非标准版)(CLG484封装)
    • Smart ZYNQ 标准版(停产) (CLG400封装7010/7020 )
  • 本文在 vivado2018.3 以及 Petalinux2018.3 版本上进行演示

备注因为我们的QSPI FLASH 空间有限, 所以我们只能跑一些轻量应用的 PETALINUX应用。另外考虑到FLASH只有16M空间,所以我们的文件系统选用 INITRAMFS (对系统的修改内容,掉电后会丢失)

一、VIVADO工程部分 (之前章节的VIVADO工程已经包含QSPI FLASH部分了,这里只做介绍)

我们之前制作的镜像中已经包含了GPIO(EMIO)部分的内容了,所以本次实验不需要重新制作VIVADO工程以及Petalinux 系统的重新编译操作

这里我们回顾下和FLASH启动相关的内容:

在block design 的ZYNQ设置界面 使能QSPI的功能 如下图所示(当QSPI 时钟大于40MHZ的时候 就需要勾选Feedback clk)

二、PETALINUX的编译(和之前第二章仅部分地方不同,这里仅贴出不同的地方)

如果要回顾内容可以参考下面部分:

区别的地方在 petalinux-config 配置页面,即 命令行中断输入petalinux-config –get-hw-description=. 后的配置部分。

  • 区别包括下面3个地方
    • a) boot image settings :改 primary flash(原先TF启动是primary SD)
    • b) kernel image settings :改 primary flash(原先TF启动是primary SD)
    • c) Root filesystem type (根文件系统):改 INITRAMFS (原先TF启动是SD card)

其余部分内容都和之前第二章节一致。

a) boot image settings

用键盘上的上下左右键移动光标,选择Subsystem AUTO Hardware Settings 按下回车(按两下ESC可以退回上一层)

选择Advanced bootable images storage Settings ,按下回车

选择 boot image settings选项 回车

(这个界面下方可以选image的名字,保持默认即可)接着我们选择 image storage media 回车

之后连按两次ESC 可以返回上一级, 一直返回,直到回到最初的初始界面。

b )kernel image settings

选择Subsystem AUTO Hardware Settings 按下回车

选择Advanced bootable images storage Settings ,按下回车

选择kernel image settings

c ) Root filesystem type 选择(根文件系统)

选择Image Packaging Configuration

选择 Root filesystem type(这里系统默认可能就是INITRAMFS)

选择的INITRAMFS (INITRAMFS文件系统的数据都是临时的,断电会恢复原样, 优点是不容易被修改并且操作简单,但是使用场景会因此受限)

之后按多次ESC回到根菜单,保存设置 选择save 并点选ok 对设置进行保存,之后选择EXIT退出设置页面。

之后参考第二章的内容,完成剩下的编译过程:

三、找到我们编译生成的镜像文件

1)打开工程文件夹内编译生成的images文件夹下的linux 文件夹

2)复制文件 BOOT.bin、i zynq_fsbl.elf这两个文件

然后回到windows 下,粘贴到我们之前创建的Vivado 工程的images(临时创建)文件夹中

回到SDK界面(可以是工程一创建的工程) 点选Program Flash

Image File 选择工程工程目录下的 BOOT.bin, FSBL File 选择工程目录下 的zynq_fsbl.elf Flash Type 选择qspi-x4-single 然后将板子拨码开关调整到JTAG模式,并重新上电,之后再点击PROGRAM 开始下载(必须在JTAG模式下,拨码开关调整到JTAG 模式 并且重启板子或按下POR RST按键重启)

再点击Program 选项

之后系统开始烧录固件到FLASH里

等待进度条消失,并且提示Successful的时候代表固化成功了

四、上电测试

将跳线位置换回到QSPI上 (这里以Smart ZYNQ为例)

备注 实际测试过程中会发现 虚拟机 和windows 争抢串口的资源的情况,导致windows 下 无法访问串口,所以这里测试的时候(把串口默认设置连接到windows ) 或者临时挂起虚拟机

接下来可以对主板进行上电。 上电之后板子上的POWER灯以及DONE灯将会亮起,如果我们的UART和电脑连接了,此时用putty等专业软件查看串口信息(波特率115200),可以看到系统已经启动,串口正在发送启动的日志信息。

至此我们的PETALINUX QSPI FLASH启动实验成功了,剩下功能验证操作可以参考基于Smart Zynq与Lemon Zynq 的Petalinux开发 章节四 启动验证

再次说明 板子上的QSPI FLASH 仅仅只有16MB,只能跑轻量化的应用,如果你的应用比较复杂,还是建议按照之前的章节把系统放到TF卡上来运行。

“基于Smart Zynq与Lemon Zynq 的Petalinux开发 章节十 从QSPI FLASH 启动LINUX镜像”的2个回复

  1. Hello! I’m using version 2023.1. According to your description, I got a file BOOT.BIN with a size of 28030484 bytes. How can it be written to a 16 megabytes SPI flash? The bif-file contains the following:
    the_ROM_image:
    {
    [bootloader] /home/dimonira/petalinux/petalinux_qspi/images/linux/zynq_fsbl.elf
    /home/dimonira/petalinux/petalinux_qspi/project-spec/hw-description/ZYNQ_CORE_wrapper.bit
    /home/dimonira/petalinux/petalinux_qspi/images/linux/u-boot.elf
    [load=0x00100000] /home/dimonira/petalinux/petalinux_qspi/images/linux/system.dtb
    [offset=0x9C0000, partition_owner=uboot] /home/dimonira/petalinux/petalinux_qspi/images/linux/boot.scr
    [offset=0x9C1000, partition_owner=uboot] /home/dimonira/petalinux/petalinux_qspi/images/linux/image.ub
    }
    I had to add the offset 0x9C1000 to the command:
    petalinux-package –boot –fsbl ./images/linux/zynq_fsbl.elf –u-boot –fpga –kernel –offset 0x9C1000 –force
    otherwise, the last part image.ub overlapped with the previous one.

    1. FLASH is only used to store simple programs. If the program is more complex, you can create an SD boot image for it and copy the program to a FAT32 formatted TFT card.
      (FLASH 仅用于存放简单的程序,如果程序比较复杂,你可以把程序做成SD启动镜像,并将程序拷贝到FAT32格式的TFT卡中)

回复 Dimonira 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注