基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南
基于 openEuler 22.03 LTS SP1 构建 DPDK 22.11.8 开发环境指南
本文详细介绍了在 openEuler 22.03 LTS SP1 操作系统上构建 DPDK 22.11.8 开发环境的完整流程。DPDK 20 版本之后采用 meson+ninja 的编译方式,与早期版本有所不同。本文内容也可作为其他 Linux 发行版构建 DPDK 环境的参考。
环境准备
安装编译依赖包
VERSION=$(uname -r)
sudo yum install -y gcc gcc-c++ make numactl-devel git tar kernel-devel-$VERSION
安装 Meson 构建工具
sudo pip3 install meson
安装 Pyelftools
sudo pip3 install pyelftools
安装 re2c
wget https://github.com/skvadrik/re2c/releases/download/1.0.3/re2c-1.0.3.tar.gz
tar -zxvf re2c-1.0.3.tar.gz
cd re2c-1.0.3/
./configure
make && sudo make install
cd ..
安装 Ninja 构建系统
wget https://github.com/ninja-build/ninja/archive/refs/tags/v1.11.0.tar.gz
tar -zxvf ninja-1.11.0.tar.gz
cd ninja-1.11.0/
python3 configure.py --bootstrap
sudo cp ninja /usr/bin/
cd ..
注意:如果系统没有
python
命令,只有python3
,请使用python3 configure.py --bootstrap
。
DPDK 安装与配置
下载并解压 DPDK
wget http://fast.dpdk.org/rel/dpdk-22.11.8.tar.xz
tar -xvf dpdk-22.11.8.tar.xz
cd dpdk-stable-22.11.8
编译安装 DPDK
meson setup build
cd build
ninja
sudo ninja install # 默认安装到 /usr/local/lib64
sudo ldconfig
可选:如需指定安装目录,可在 meson 步骤中添加
--prefix=/your/custom/path
参数。
环境变量配置
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
建议:将上述环境变量添加到
/etc/profile
文件中以实现永久生效。
驱动配置
加载vfio驱动
modprobe vfio enable_unsafe_noiommu_mode=1 # 在iommu不可用时,以非安全模式加载vfio
modprobe vfio-pci
lsmod|grep vfio # 检查是否成功
有关非安全模式加载vfio,也通过如下的方式修改:
echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
关于vfio模块的加载,可以设置为开机自动加载,这样就不用每次手动加载了,具体方式如下:
# 配置 VFIO 内核模块的加载参数
sudo tee /etc/modprobe.d/vfio.conf <<EOF
options vfio enable_unsafe_noiommu_mode=1
options vfio-pci disable_vga=1
EOF#系统启动时自动加载 vfio 内核模块。
echo "vfio" | sudo tee /etc/modules-load.d/vfio.conf
echo "vfio-pci" | sudo tee -a /etc/modules-load.d/vfio.conf
编译并加载igb_uio驱动
在dpdk22版本中,igb_uio不再被包含在dpdk源代码包中,如果需要则要额外编译安装。具体如下:
#下载
git clone http://dpdk.org/git/dpdk-kmods#编译
cd dpdk-kmods/linux/igb_uio
make#加载
modprobe uio
insmod igb_uio.ko intr_mode=legacy
depmod -a
同样的,igb_uio 也可以实现开机加载:
# 需要将编译出.ko 文件拷贝至如下的目录
cp dpdk-kmods/linux/igb_uioigb_uio.ko /lib/modules/$(uname -r)/kernel/drivers/uio/echo "options igb_uio intr_mode=legacy" | sudo tee /etc/modprobe.d/igb_uio.conf
echo "igb_uio" | sudo tee /etc/modules-load.d/igb_uio.conf
系统配置
配置大页
cd dpdk-stable-22.11.8
python3 ./usertools/dpdk-hugepages.py -p 2M --setup 1G
绑定网卡到 VFIO 驱动
python3 ./usertools/dpdk-devbind.py --bind=vfio-pci 0000:02:01.0
测试验证
编译并运行 helloworld 示例
有两种编译方式,默认是共享库版本,还有一种静态库版本。
共享库:
cd helloworld
make
./build/helloworld
静态库版本
cd helloworld
make static
./build/helloworld
运行结果:
出现上述的结果,说明成功了。
总结
本文提供了在 openEuler 22.03 LTS SP1 上构建 DPDK 22.11.8 开发环境的完整指南,包括依赖安装、DPDK 编译、驱动配置和测试验证等步骤。按照本指南操作后,您将获得一个完整的 DPDK 开发环境,可用于后续的 DPDK 应用开发。
如果您咋配置过程中遇到了问题,欢迎评论区交流。谢谢!