ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC

硬件:黑金AX7450开发板、zynq7100、QSPI Flash、eMMC Flash
软件:Vivado 2017.4、Petalinux 2017
我用了一台Windows主机,用于设计Vivado和烧写QSPI Flash,一台Ubuntu主机,用于运行Petalinux配置Linux系统。

硬件设计

新建Vivado工程,添加ZYNQ7 Processing System IP核,根据原理图使能UART、QSPI、SD0(后续流程不插SD卡)、SD1(eMMC)、Ethernet外设接口。其他设置按黑金教程配置就好。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第1张图片ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第2张图片再写一个闪灯的模块用于看系统运行状态,编写管脚约束。然后Validate Design,Create HDL Wrapper,Generate Output Products,Generate Bitstream,Export Hardware(include bitstream),Launch SDK。在SDK里创建一个FSBL工程,用于烧录BOOT.BIN文件到QSPI Flash。

Petalinux设计

1、设置Vivado环境变量,设置petalinux环境变量

source /opt/Xilinx/Vivado/2017.4/settings64.sh
source /opt/pkg/petalinux/settings.sh

ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第3张图片

2、创建petalinux工程

petalinux-create -t project --template zynq -n linux_firmware

3、配置petalinux工程
把Vivado生成的linux_firmware.sdk拷贝到petalinux的工程目录下,在终端运行下面两条指令,进入petalinux工程配置窗口。

cd linux_firmware
petalinux-config --get-hw-description . . .. ../linux_firmware.sdk

因为要从QSPI Flash启动系统,所以需要把BOOT.BIN放到QSPI Flash里。把Subsystem AUTO Hardware Settings➡Advanced bootable images➡storage Settings boot image settings的image storage media改成primary flash。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第4张图片Linux内核和根文件系统要放在eMMC里,eMMC接在ZYNQ的SD1接口上,把Subsystem AUTO Hardware Settings➡SD/SDIO Settings的Primary SD/SDIO设置成ps7_sd_1(这里有Bug,后面改)。此时,根文件系统类型配置成INITRAMFS,因为后面需要先从内存启动Linux系统。其他保持默认设置。
4、配置Linux内核
执行以下命令配置Linux内核。

petalinux-config -c kernel

开发板上的以太网芯片采用Micrel公司的KSZ9031RNX以太网PHY芯片,把Device Drivers➡Network device support➡PHY Device support and infrastructure的Micrel PHYS使能。其他保持默认设置。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第5张图片5、配置根文件系统
执行以下命令配置根文件系统。

petalinux-config -c rootfs

需要新增mkfs.ext4命令,后续用于格式化eMMC分区。Filesystem Packages➡base➡e2fsprogs的e2fsprogs和e2fsprogs-mke2fs使能。其他保持默认设置。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第6张图片6、编译petalinux工程

petalinux-build

7、制作BOOT.BIN

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/design_1_wrapper.bit --u-boot --force

如果Ubuntu已经设置好了tftp服务器,6、7步生成的文件将自动复制到/tftpboot文件夹(这个文件夹的路径可以在petalinux-config的Image Packaging Configuration的tftpboot directory修改,我采用默认设置并且在Ubuntu的根目录创建了tftpboot文件夹)里。
8、烧写QSPI Flash
把第7步生成的BOOT.BIN拷贝到Windows主机,用SDK把BOOT.BIN烧写到烧写QSPI Flash。方法和裸机开发时一样。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第7张图片

eMMC分区

1、启动开发版
开发板设置成QSPI启动,UART连到Windows主机上,开发板网口连接路由器,打开串口助手(我用的XShell 6),连接开发板。开发板上电,一开始是uboot程序输出的信息,在倒计时结束前按回车进入uboot模式。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第8张图片
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第9张图片2、查看eMMC
eMMC连在ZYNQ的SD1接口上,输入mmc dev 1切换当前mmc设备,输入mmc info查看eMMC信息。eMMC为5.1版本,容量为7.3GiB(8GB的eMMC),4位宽的总线
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第10张图片3、加载Linux内核文件到ZYNQ内存
在串口终端输入下面指令,将内核文件image.ub通过tftp加载到内存。

tftpboot image.ub

ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第11张图片4、从内存启动Linux系统

bootm 10000000

这一步要求在petalinux配置时把Linux的根文件系统类型配成INITRAMFS类型,否则启动不了。因为现在eMMC里面还没有根文件系统,不能配置成根文件系统类型SD card类型。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第12张图片5、eMMC分区
在串口终端输入下面指令查看eMMC设备文件名。

ls /dev/mmcblk*

在这里插入图片描述可以看到,没插SD卡,只有eMMC,对应mmcblk1。eMMC分区和SD卡分区操作方法是一样的。输入指令

fdisk /dev/mmcblk1

开始分区。“p”打印分区表,“n”分区,“w”保存。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第13张图片6、格式化分区
uImage、system.dtb放在第一个分区,格式化成FAT32。

mkfs.vfat -F 32 /dev/mmcblk1p1

根文件系统放在第二个分区,格式化成EXT4。

mkfs.ext4 /dev/mmcblk1p2

ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第14张图片

拷贝内核和根文件系统

1、创建挂载文件夹,挂载eMMC分区
在这里插入图片描述2、挂载共享文件夹
Ubuntu配置好NFS服务器,在ZYNQ的串口终端执行下面命令挂载共享文件夹。

mount -t nfs -o nolock 192.168.1.104:/home/owc/workspace/all_test/Debug /mnt

3、拷贝根文件系统到eMMC
在Ubuntu主机上解压debian_roofts.tar.gz到共享文件夹/home/owc/workspace/all_test/Debug

sudo tar zxvpf debian_rootfs.tar.gz -C /home/owc/workspace/all_test/Debug

在ZYNQ的共享文件夹里能看到debian_rootfs。
在这里插入图片描述将根文件系统拷贝到板子上。

cp -rf debian_rootfs/* /home/root/mmcp2

4、重新配置Linux系统
输入petalinux-config重新配置Linux系统,做如下修改:

  1. 根文件系统类型改成 SD card,修改根文件系统所在文件夹名称为/dev/mmcblk1p2。
  2. 修改/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h。这里有bug,petalinux设置SD1为主SD后,没有修改uboot启动指令为SD1。如果在Vivado上只配置了SD1,则不用改,但是要把根文件系统所在文件夹名称改为/dev/mmcblk0p2(可以像eMMC分区中的操作一样,先进到文件系统类型为INITRAMFS类型的Linux系统看一眼eMMC的文件名)。

ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第15张图片ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第16张图片

petalinux-build编译、petalinux-package打包。
5、拷贝Linux系统到eMMC
在Ubuntu主机上把image.ub和system.dtb复制到NFS共享文件夹,在ZYNQ的串口终端上把image.ub和system.dtb复制到/home/root/mmcp1。
6、解挂eMMC。
在这里插入图片描述7、把新的BOOT.BIN烧到QSPI Flash里。

快要成功了

开发板重新上电,此时能够加载Linux内核,但是因为eMMC挂载问题(/etc/fstab文件内容不对,eMMC自动挂载失败),系统会进入emergency mode。输入密码进入命令行模式,修改/etc/fstab文件中设备名称为对应eMMC的设备名称,如下图所示。
在这里插入图片描述开发板重新启动,成功进入Linux系统。
ZYNQ无SD卡配置Linux系统到QSPI Flash和eMMC_第17张图片

你可能感兴趣的:(ZYNQ,linux)