记录一个dpdk17版本在centos上编译时出现的bug及解决方法
1、首先说明一下编译环境及bug现象:
编译环境是centos7的系统,笔者的该环境上有两个版本的内核,如下。编译的dpdk版本为17.01版本(版本比较旧)。

之前使用的centos内核版本为3.10.0-123.20.1,在编译17版本dpdk时可以正常编译,最近切换到内核3.10.0-1062.4.1版本后,编译dpdk时出现了如下的编译错误:

2、问题原因及解决方法:
该问题的原因在于内核版本变更后的net_device结构体内指针.ndo_change_mtu的定义发生了变化,导致编译错误。
我们可以对比一下内核3.10.0-123.20.1版本和3.10.0-1062.4.1版本中该结构体的不同,如下:

【内核3.10.0-1062.4.1版本中net_device结构体的定义】

【内核3.10.0-123.20.1版本中net_device结构体的定义】
可以看到,结构体内指针.ndo_change_mtu的名称发生了变化,在内核新版本中变更为了.ndo_change_mtu_rh74。不过dpdk17版本中对于该处并没有做同步修改,导致了编译错误。
解决方法是修改dpdk源码内对于该指针的调用处,编辑dpdk/lib/librte_eal/linuxapp/kni/kni_net.c文件,搜索一下结构体kni_net_netdev_ops,修改其内部的指针调用,将.ndo_change_mtu修改为.ndo_change_mtu_rh74。
具体如下:
![]()


之后再次编译dpdk,即可成功。
该问题应该是旧版本dpdk的遗留问题,使用高版本的dpdk编译时应该不会出现该问题(笔者验证过dpdk21版本),此处记录一下。
浙公网安备 33010602011771号