`` 上回说到使用开发板自带petaLinux文件系统和内核无法成功驱动PCIe网卡,于是在群里询问FAE刘工寻求帮助,得到的回复是要使用开发板自带的Linux内核源码,压缩包名为xlnx-linux,注意此内核非彼petaLinux内核,此内核的4G内存完全由文件系统接管,没有启用FPGA模块,也就是说开发板如果使用此内核启动的话,只有ARM-Linux相关功能而没有FPGA模块的功能,原本应该分给FPGA模块的2G内存也全部开放给文件系统,刘工说,也就是这个内核有设置正确的PCIe时钟而使得可以启用板子引出的PCIe接口(如PCIe网卡,PCIe加速卡,与别的机器进行PCIe通信等)。 烧录xlnx-linux内核源码之前最好先完整编译一次,
- make ARCH=arm64 distclean
- make ARCH=arm64 zynqmp_myd_defconfig
- make ARCH=arm64 -j4
复制代码
-在开发板上直接编译,编译出来的内核,ko,dtb文件没有兼容性问题,但是编译速度会很慢 -编译之前先用make menuconfig开启某些功能,比如hidraw,ko选项打上勾,编译完成之后就能直接用了 -编译缺少某些工具软件比如bc之类的要apt install安装,这个倒不是什么难点
编译完毕之后烧录才是重点,官方给的文档里面xlnx-linux内核烧录方式是使用卡刷板启方式,即由SD卡拷贝内核文件到QSPI FLASH存储芯片中覆盖,再拷贝文件系统到EMMC中,烧录完毕之后需要设置开发板的启动拨码为0100,即QSPI启动,而如果需要替换内核文件或者是重新烧录文件系统的话,又要设置开发板为SD卡启动即1010,由于我当时烧录内核和文件系统的时候出了问题,反复这样做好几次了。
设置启动SD烧录启动卡非常简单,将所有文件拷贝到一个FAT32格式的SD卡中即可(NTFS启动失败,一定要是FAT32):
这是我见过的最简单的卡刷方式了,BOOTLOADER直接放到卡中,既充当ramdisk(烧录SD卡时候所启动的那个系统叫ramdisk)的BOOTLOADER文件,更是作为板子启动的BOOTLOADER文件,既不用分区,也不用做BOOTLOADER软件烧录,XILINX如此方便开发者必须点赞! 烧录卡做好之后,在/mnt目录下可以找到mmcblk1p1文件即QSPI设备映射文件,按照手册给出提示,执行
- /updatesys.sh /mnt/mmcblk1p1
复制代码
命令开始烧录,当然,这个烧录脚本updatesys.sh是可以给开发者修改的:
如图,KERNEL FILE相关语句是烧录内核文件的,ROOTFS相关语句则是烧录文件系统的,将任意语句上下文3~4行注释即为跳过此步骤,比如只需要更新内核,则将KERNEL FILE相关语句保留,其余三个操作全部注释,ROOTFS烧录同理,如果全部都不注释,那就是全部文件都烧录,这点再次为米尔的工程师点赞,这个脚本真的太方便了!
经历了简单但需要等待的烧录过程后,内核文件更新,可以再次基础上进行驱动开发了!比如将之前做的网卡驱动编译一次,这里我使用的是82573网卡,编译生成驱动文件e1000e.ko并加载:
可以看到已经生成网卡设备了:
不用怀疑,这个设备必定是能用的,我已经用上了,网速还不赖。
然后回到之前的DPDK相关步骤中:
- cd /mnt/dpdk-stable-19.11.6/arm64-armv8a-linuxapp-gcc/kmod/
- insmod igb_uio.ko
- cd /mnt/dpdk-stable-19.11.6/usertools
- ./dpdk-devbind.py --bind=igb_uio enp1s0
复制代码
分配大页内存也是成功的。
``
|