Ubuntu20.04编译DPDK-19.08.2全过程

背景:找了两台电脑,安装了Ubuntu20.04系统,准备做DPDK收发包相关的实验。两台电脑的网卡用网线直接连接。

下面记录一下安装DPDK的过程。

1. 下载dpdk-19.08.2.tar.xz并解压,进到文件夹目录下。文件链接: https://pan.baidu.com/s/1Ti2Y6QPJ5anHs24a9N5MbA?pwd=kh2k 提取码: kh2k

2. 导入环境变量:

export RTE_SDK=$PWD
export RTE_TARGET=x86_64-native-linuxapp-gcc

($PWD为dpdk解压后的文件夹目录路径)

3. ./usertools/dpdk-setup.sh

4. 编译:输入36,即选择[36] x86_64-native-linuxapp-gcc进行编译

错误1:fatal error: numa.h: No such file or directory

原因:缺少安装包。

解决方法:安装libenuma-dev即可。

sudo apt install libnuma-dev

错误2:编译时报如下类似错误

dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/igb_uio/igb_uio.c:230:6: error: this statement may fall through [-Werror=implicit-fallthrough=]

dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/igb_uio/igb_uio.c:250:6: error: this statement may fall through [-Werror=implicit-fallthrough=]

dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/igb_uio/igb_uio.c:8:./include/linux/dev_printk.h:116:2: error: this statement may fall through [-Werror=implicit-fallthrough=]

原因:Makefile里的-Werror误报。

解决方法:

打开dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/igb_uio/Makefile文件,

将MODULE_CFLAGS += -Winline -Wall -Werror修改为:MODULE_CFLAGS += -Winline -Wall

修改完后,重新编译。

错误3:编译时报如下错误

dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni/kni_net.c:737:20: error: initialization of ‘void (*)(struct net_device *, unsigned int)’ from incompatible pointer type ‘void (*)(struct net_device *)’ [-Werror=incompatible-pointer-types]
  737 |  .ndo_tx_timeout = kni_net_tx_timeout

原因:kni_net.c文件代码问题。

解决方法:

打开dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni/kni_net.c文件,找到.ndo_tx_timeout = kni_net_tx_timeout这句,注释掉。

修改完后,重新编译。

错误4:编译时报如下错误

error: ‘kni_net_tx_timeout’ defined but not used [-Werror=unused-function]

原因:Makefile里的-Werror误报。

解决方法:

打开dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/build/kernel/linux/kni/Makefile文件,将MODULE_CFLAGS += -Wall -Werror修改为:MODULE_CFLAGS += -Wall 。

修改完后,重新编译。

5. 编译完成后,需要依次插入3个Module

[43] Insert IGB UIO module
[44] Insert VFIO module
[45] Insert KNI module

输入43,插入UIO module。

错误5:插入UIO module时,有可能会报权限错误。

insmod: ERROR: could not insert module /home/test/Downloads/dpdk-stable-19.08.2/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko: Operation not permitted
## ERROR: Could not load kmod/igb_uio.ko.

原因:BIOS设置问题,BIOS开机设置开启了Secure Boot模式,需要把这个模式关掉,否则老是提示权限错误Operation not permitted。

解决方法:开机的时候,进入BIOS模式,找到Secure Boot选项,改成disable。

注意:重新开机后,Insert IGB UIO module时可能会报找不到,需要重新编译一遍。

显示Loading xxx module后就表示插入成功了。

6. 配置大页内存

[46] Setup hugepage mappings for non-NUMA systems

写个512,回车

7. 绑定网卡到UIO module

[49] Bind Ethernet/Baseband/Crypto device to IGB UIO module

错误6:

如果出现这个,/usr/bin/env: “python”: 没有那个文件或目录No such file or directory,则说明没装python。它要调用python脚本回显网卡信息,把python装上就行。sudo apt install python

正常来说,会回显以下信息:

etwork devices using kernel driver
===================================
0000:00:1f.9 'Ethernet Connection (7) I219-LM 15bb' if=eno1 drv=e1000e unused=igb_uio,vfio-pci *Active*
0000:04:00.0 'RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller 8168' if=enp4s0 drv=r8169 unused=igb_uio,vfio-pci

No 'Baseband' devices detected
==============================

No 'Crypto' devices detected
============================

No 'Eventdev' devices detected
==============================

No 'Mempool' devices detected
=============================

No 'Compress' devices detected
==============================

No 'Misc (rawdev)' devices detected
===================================

Enter PCI address of device to bind to IGB UIO driver:

可以看到这里有两张网卡可以绑定,那么选择一张网卡进行绑定,输入其PCI地址即可。例如0000:00:1f.9

如果出现Warning: routing table indicates that interface 0000:00:1f.6 is active. Not modifying

则需要把网卡下线,然后再绑定: sudo ifconfig xxx down

绑定后,ifconfig就会发现这个网卡没了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值