代码库地址:https://e.disc.cunok.cn:800/git/jie/udpdk
如果地址无法访问,可以修改一下.git/config,将e.disc.cunok.cn 改成p.disc.cunok.cn就可以了。
代码库中已经有README描述安装流程。按照README进行,先编译依赖 dpdk和inih,然后编译udpdk,然后编译apps/dd/DirectDAQ测试程序。dpdk编译可能报错,需要按 dpdk_compilation.txt 修改。
详细流程:
安装前,先安装后续会用到的基础编译工具。
sudo apt update
sudo apt install git build-essential meson ninja-build pkg-config python3 libnuma-dev libssl-dev libelf-dev
首先,先将代码库克隆到本地。我们用 https://e.disc.cunok.cn:800/git/jie/udpdk 下面的dd_opt库为例:
git clone --branch dd_opt https://e.disc.cunok.cn:800/git/jie/udpdk.git
此时记录我们当前安装的地址,记录为UDPDK_ROOT。
export UDPDK_ROOT= udpdk安装的地址
例如,我们假设安装的地址为 /home/uisrc/udpdk,则:
export UDPDK_ROOT=/home/uisrc/udpdk
然后跳转到udpdk目录下:
sudo -i
cd $UDPDK_ROOT
udpdk需要dpdk20.05以及任意版本inih。它们已作为子模块包含在该库中,拉取下来:
git submodule init
git submodule update
安装配置之前,先修改dpdk的编译配置,添加以下两行到deps/dpdk/mk/toolchain/gcc/rte.vars.mk文件的末尾:
HOST_WERROR_FLAGS := -w
WERROR_FLAGS := -w
接下来,确认CPU架构,执行:
uname -m
确认之后,我们需要配置dpdk的编译参数。假设CPU架构为x86_64,系统为Linux,用GCC,则执行:
export RTE_TARGET=x86_64-native-linuxapp-gcc
export RTE_SDK="$UDPDK_ROOT/deps/dpdk"
之后,进入./usertools目录,使用命令行安装工具,执行:
cd dpdk/usertools
./dpdk-setup.sh
进入命令行安装工具,里面有多种功能,如图:

我们在界面里面输入编号后即可选择功能。
我们选择首先进行编译,前面我们已经确认了CPU架构和系统类型,所以在step1里面选择符合我们环境的选项。按照前面假设的实例环境,我们执行:
[38] x86_64-native-linuxapp-gcc
如果此处编译失败,可能是前面修改的dpdk编译配置没有生效,或者是基础编译工具还没有安装。请根据报错信息进行排查。
接下来,配置大页内存。
[48] Setup hugepage mappings for non-NUMA systems
我们可以查看此时每个大页内存大小。

此时,我们可以看到每个大页内存大小为2MB。我们准备配置2G的大页内存,那么我们需要1024个2M大页内存,此时输入1024。具体输入值需要根据实际情况进行配置。
之后,进行VFIO驱动加载。
我们先进行:
modprobe vfio-pci
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
然后回到dpdk/usertools目录,选择step2,加载VFIO驱动。
[52] Bind Ethernet device to VFIO module
我们选择准备使用的网卡设备,选择后即可完成VFIO驱动加载。

我们可以根据Linux网口名判断对应PCI地址对应的网卡设备。图中0000:41:00.0和0000:41:00.1都是我们需要的网卡设备,所以我们分两次进行,分别输入两个PCI地址。
需要注意,如果网卡设备已经被其他驱动占用,则需要先卸载其他驱动。
接下来,安装inih依赖。我们进入inih目录,依次执行下面的命令:
cd inih
meson build
cd build
ninja
最后,完成udpdk的安装。我们回到udpdk目录,依次执行下面的命令:
cd udpdk
make
make install
完成udpdk安装后,电脑已经完成了udpdk的配置。但是,每次上位机重启后,都需要重新配置udpdk,完成大页内存、VFIO驱动绑定的操作。以下是每次上位机重启后需要进行的内容。这部分见另一个文档《Ubuntu系统接收DDAQ PL数据操作文档》。
https://www.limfx.pro/ReadArticle/4426/ubuntu-xi-tong-jie-shou-ddaq-pl-shu-ju-cao-zuo-wen-dang
另外,上述文档里面,提供了相关例程的使用教程。
本文章使用limfx的vscode插件快速发布