环境说明:
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中建立ZCU102的PCIe Root Complex控制器的工程。编译完之后导出XSA文件,用作Petalinux编译。这里我们直接使用官方的BSP文档,先简化这一步,防止这里设置出现问题。
在Xilinx官网Petalinux 2020.2下载页面往下拉,可以看到BSP的下载链接,如下图所示:
将它下载下来,再解压缩。在解压的后的文件内,可以找到vivado工程的文件hardware。将hardware文件里面的project_1_wrapper.bit和project_1_wrapper.xsa文件复制出来,放到我们自己将建立petalinux目录的文件夹里面。后续也可以将hardware文件拷贝到自己的文件夹里,在vivado里面对它进行修改,来进行我们自己的相关设置。
这里我把上面的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并保存退出。
然后进行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
再进行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工程的创建和编译就完成了。
将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的启动信息。
Petalinux的登录账号和密码都是root。
通过lspci命令,可以看到我们的三星SSD已经link上了。
下一篇再进行一下NVMe的速度测试。
参考:
1. Xilinx Answer 76169
2. FPGADEVELOPER.COM