dpdk问题集——编译动态库时报错 No Ethernet ports - bye
首先声明下测试环境
系统环境:centos 7.2
内核版本:3.10.0-327.el7.x86_64
网卡驱动类型:ixgbe
一、dpdk编译动态库
dpdk默认编译的是静态库,如果项目上需要编译成dpdk动态库,
只需要修改config目录下的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日志,进一步来定位问题。