ZCU102基于Petalinux挂载NVMe SSD

环境说明:

        1. Ubuntu 系统 18.04.4

        2. 开发环境三贱客:Vivado 2020.2  +  Petalinux 2020.2  +  Vitis 2020.2

        3. 开发板: Xilinx ZCU102

        4. SSD:  PCIe - M.2转接板 + 三星 SSD 980 500GB

一、Vivado工程准备

        首先第一步需要在Vivado中建立ZCU102的PCIe Root Complex控制器的工程。编译完之后导出XSA文件,用作Petalinux编译。这里我们直接使用官方的BSP文档,先简化这一步,防止这里设置出现问题。

        在Xilinx官网Petalinux 2020.2下载页面往下拉,可以看到BSP的下载链接,如下图所示:

ZCU102基于Petalinux挂载NVMe SSD_第1张图片

        将它下载下来,再解压缩。在解压的后的文件内,可以找到vivado工程的文件hardware。将hardware文件里面的project_1_wrapper.bitproject_1_wrapper.xsa文件复制出来,放到我们自己将建立petalinux目录的文件夹里面。后续也可以将hardware文件拷贝到自己的文件夹里,在vivado里面对它进行修改,来进行我们自己的相关设置。

ZCU102基于Petalinux挂载NVMe SSD_第2张图片

二、Petalinux工程创建及编译

        这里我把上面的bit和xsa文件放在了PCIE_sample文件夹内。在这个文件夹里,打开终端,在终端中创建一个zynqMP模板的工程:

petalinux-create  --type project --template zynqMP --name PCIE_sample

        这里我们使用的是ZCU102,是ZYNQMP的核,所以template里面选择zynqMP,如果是microblaze的核,这里写 --template microblaze;如果是zynq7000的核,这里选择 --template zynq。--name后面是我们自己工程的名字,可以按自己喜好进行命名。

        按回车运行之后显示INFO,创建了工程。在当前目录下建立了工程文件夹。

        在这个文件夹里面进行编译,先cd进工程文件夹,再导入我们的xsa文件

cd PCIE_sample
petalinux-config --get-hw-description=../project_1_wrapper.xsa

等待一会儿后会弹出“misc/config System Configuration”窗口,如下图所示。这里我们确认Subsystem AUTO Hardware Settings开启了,既前面有一个-*-的标志既可。选择下面的Exit并保存退出。

ZCU102基于Petalinux挂载NVMe SSD_第3张图片

然后进行Petalinux kernel的配置,在终端中输入以下命令:

petalinux-config -c kernel

等待亿点点时间之后会弹出Linux/arm64 5.4.0 Kernel Configuration窗口,按照以下两个路径,分别保证开启 NWL PCIe Core 和 NVM Express block device。没有开启的键盘按“Y”既可开启。
        Device Drivers -> PCI support -> PCI controller drivers -> NWL PCIe Core
        Device Drivers -> NVME Support -> NVM Express block device

配置完之后退出,保存。终端中会显示[INFO] Successfully configured kernel

ZCU102基于Petalinux挂载NVMe SSD_第4张图片

再进行rootfs的相关设置,在终端中输入以下指令:

petalinux-config -c rootfs

弹出Configuration窗口,分别按一下路径开启相关模块:

        Filesystem Packages->console->utils->pciutils->pciutils
        Filesystem Packages->base->util-linux->util-linux
        Filesystem Packages->base->util-linux->util-linux-mount
        Filesystem Packages->base->util-linux->util-linux-blkid
        Filesystem Packages->base->util-linux->util-linux-mkfs
        Filesystem Packages->base->util-linux->util-linux-fdisk
        Filesystem Packages->base->e2fsprogs->e2fsprogs
        Filesystem Packages->base->e2fsprogs->e2fsprogs-mke2fs

上面的设置进行完之后,对工程进行编译(如果运行过程中出现错误,可能是git拉取的问题,多运行几次就能成功,有一个warning不用管):

petalinux-build

成功之后petalinux工程的创建和编译就完成了。

三、JTAG启动Petalinux

        将Petalinux加载到ZCU102开发板上进行启动的方法有很多,一般都是用SD卡或者直接用JTAG的方式下载。这里我们还是用JTAG的方式下载比较方便,后面调试裸机也是用JTAG,统一不用切换。

        将目录切换到工程的images/linux文件夹下,这里有我们启动需要的相关文件。把之前的vivado的bit文件project_1_wrapper.bit也拷贝到这个目录下。将ubuntu终端的目录切换到images/linux,并运行相关指令:

cd images/linux/

petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga --uboot --force

petalinux-package --prebuilt --fpga project_1_wrapper.bit

petalinux-boot --jtag --prebuilt 3 --fpga --bitstream project_1_wrapper.bit

运行完最后一条指令后,等待亿点点时间,我们的Petalinux系统就在ZCU102上跑起来了。打开串口监视器,查看第一个串口(115200),能够看到Petalinux的启动信息。

ZCU102基于Petalinux挂载NVMe SSD_第5张图片

Petalinux的登录账号和密码都是root。

通过lspci命令,可以看到我们的三星SSD已经link上了。

下一篇再进行一下NVMe的速度测试。

参考:

       1. Xilinx Answer 76169

        2. FPGADEVELOPER.COM

你可能感兴趣的:(Xilinx,fpga,linux,nvme)