记录一个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版本),此处记录一下。

 

 

 

posted @ 2022-11-15 11:09  Olberic  阅读(470)  评论(0)    收藏  举报