dpdk问题集——编译动态库时报错 No Ethernet ports - bye

首先声明下测试环境
系统环境:centos 7.2
内核版本:3.10.0-327.el7.x86_64
网卡驱动类型:ixgbe

一、dpdk编译动态库

dpdk默认编译的是静态库,如果项目上需要编译成dpdk动态库,
只需要修改config目录下的common_base文件
common_base文件路径

修改为编译动态库
CONFIG_RTE_BUILD_SHARED_LIB=n
改为
CONFIG_RTE_BUILD_SHARED_LIB=y
即可

是不是很简单?
这里写图片描述
提示No Ethernet ports - bye

二、错误码 No Ethernet ports - bye

查看l2fwd的源代码发现是rte_eth_dev_count函数 返回0
这个函数是枚举当前绑定到dpdk驱动上的网口数,怎么会为0呢?
会不会是dpdk动态库没有链接网卡对应的驱动动态库呢?

DPDK编译成动态库后,PMD的各个驱动就被单独编译成了一个个的.so动态库文件,如下图所示
这里写图片描述
其中librte_pmd_ixgbe.so对应ixgbe网卡驱动
librte_pmd_i40e.so对应i40e网卡驱动

最后查找到原因,dpdk项目代码的Makefile或CMakeLists.txt文件中没有指定需要链接的网卡驱动对应的动态库so文件,导致无法通过驱动动态库来获取端口数量,从而导致了rte_eth_dev_count函数返回为0,检测不到端口的问题。

PMD有好几种驱动,为了更好的移植性,建议在Makefile中指定链接所有驱动的.so文件
LDLIBS += -lrte_pmd_e1000 -lrte_pmd_i40e -lrte_pmd_ixgbe

这里写图片描述

添加后的Makefile文件如上图。

当然,还可能是由于其他原因,如下:
1.当前网卡不支持
2.动态库的版本不一致,这种情况出现在升级时很平常

如果上述三个原因都不是导致问题的原因,个人建议将dpdk开启debug模式,然后gdb调试+查看dpdk日志,进一步来定位问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值