ARTICLE · 1148729
2026W41技术:dpdk的源码编译+部分example运行
缘起
之前我的ubuntu电脑借给另一个同事的,有天想用的时候,键盘有点卡卡的,因为给我后,我好久没打开过,我不确定谁导致的了,也就没管,今年呢,项目上一直是win程序,最近碎片化时间看dpdk嘛,想着run一下的,网上一搜(给的绝招就是,哪个键盘不灵,就多多的猛击几下),不得不说,网友是真有才,真的可以了,我现在就可以用起来了, 环境搭建ok了,就花时间记录下吧,(时间忘记写了,大概是20261004写了下)
内容
2.1、大部分是参考ref1搭建的
我的环境是ubuntu,也是intel的处理器,有vfio,dpdk的源码我本来就下载了一份,就本地整了,没 git clone,
```shell
# 一、编译前准备
sudo apt-get install python3
sudo apt-get install python3-pip
sudo pip3 install meson
sudo pip3 install ninja
sudo apt install python3-pyelftools
sudo apt-get install libnuma-dev
# 二、编译
sudo meson setup build # setup后面还用-h看了下,以为要加啥参数
cd build
ninja
ninja install
ldconfig
# 三、设置大页内存
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash hugepages=1024"
sudo grub-mkconfig -o /boot/grub/grub.cfg #重新生成grub.cfg
sudo update-grub #更新grub配置
reboot
grep HugePages_Total /proc/meminfo
sudo mkdir -p /mnt/huge
sudo vi /etc/fstab
nodev /mnt/huge hugetlbfs pagesize=1G 0 0
mount | grep hugetlbfs
#四、vfio,看下bios是不是开了 direct io的
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash hugepages=1024" #不需要分号啥的,直接在后面加iommu=pt intel_iommu=on
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash hugepages=1024 iommu=pt intel_iommu=on"
sudo grub-mkconfig -o /boot/grub/grub.cfg
reboot
#4.2、加载kernel
sudo modprobe vfio #这个不确定要不要加,先放这吧,后面再试一下
sudo modprobe vfio-pci
sudo /usr/bin/chmod a+x /dev/vfio
sudo /usr/bin/chmod 0666 /dev/vfio/*
ifconfig ens33 down #ens33是自己的网卡,ifconfig就行,
sudo python3 {dpdk_path}/usertools/dpdk-devbind.py --bind=vfio-pci ens33
sudo python3 {dpdk_path}/usertools/dpdk-devbind.py --status //验证
#五、编译example(cmdline也是一样的)
cd dpdk/build
meson configure -Dexamples=helloworld
ninja
./examples/dpdk-helloworld -l 0-3 -n 4
```
2.2、中间遇到的错误
2.2.1、ERROR: Neither directory contains a build file meson.build
- 编译时sudo meson setup build
,在错误的路径下执行了,应该是dpdk,我在spdk下执行的, 2.2.2、vfio相关的,driver vfio pci is not loaded
- 不知道是不是ref4的方式解决的
,【这部分的配置不太熟,跟卸载】,执行了一下这个 modprobe vfio-pci,2.2.3、dpdk cmdline add y1 127.0.0.2 y2 127.0.0.3 bad arguments
执行时,自己在example的提示下输入 add y1 127.0.0.2 y2 127.0.0.3,提示的,后来搜了一下,这是rte_cmdline提示的,
2.3、用vscode打开代码,显示没网了,先卸载吧
用命令 ethtool和ifconfig找不到网卡了,于是就搜了一下怎么卸载,参考ref2,
```shell
sudo vi /etc/default/grub #iommu=pt intel_iommu=on这部分去掉
sudo grub-mkconfig -o /boot/grub/grub.cfg
reboot
rmmod vfio-pci
./dpdk-devbind.py -s #或者
ethtool, ifconfig #能看到网卡
```
最后
3.1、ref
ref1,DPDK环境搭建以及HelloWorld运行, https://zhuanlan.zhihu.com/p/711261549 , ref2,dpdk网卡绑定和解绑步骤, https://zhuanlan.zhihu.com/p/558439044 , ref3、官方文档, https://doc.dpdk.org/guides/linux_gsg/index.html , ref4, https://edc.intel.com/content/www/us/en/design/products/ethernet/config-guide-e810-dpdk/loading-the-vfio-pci-module/ , 3.2、其它
vmware 测试 dpdk https://juejin.cn/post/7302326457543245824 未看, dpdk源码分析:交互式命令行的实现(一) 命令添加 https://juejin.cn/post/7118018490400768031 ,未看,