dpdk开发库编译与使用

本文档详细介绍了如何在CentOS 7.4环境下编译DPDK 16.04版本为动态库,并进行安装。首先修改源码解决编译问题,然后配置编译选项为动态库并关闭KNI模块编译。编译安装完成后,介绍了如何设置大页、加载igb_uio模块以及绑定网卡。最后,讨论了如何在项目中使用编译后的库文件,包括设置环境变量和编译自定义DPDK程序。
摘要由CSDN通过智能技术生成

前言

本文主要记录一下dpdk源码编译与动态库的使用,学习脱离编译环境后如何单独使用dpdk动态开发库,在以后的项目中不在编译dpdk源码,直接使用编译后的头文件、动态库和igb_uio.ko文件。


一、开发环境:

硬件环境:  win10 vmware虚拟机,虚拟网卡型号为Intel 82545EM

操作系统:  centos7.4

dpdk版本: 16.04


二、编译与安装

1、修改源码

为避免在centos6虚拟机上编译和使用dpdk时出现的问题,需要修改dpdk-16.04/lib/librte_eal/linuxapp/igb_uio/igb_uio.c文件,详见https://blog.csdn.net/qiqicao123456/article/details/108473455

2、修改配置文件

dpdk16.04默认编译静态库,编译动态库需要修改配置文件dpdk-16.04/config/common_base,设置编译成动态库

 # Compile to share library                                                                                                                                                                                   
 #
 CONFIG_RTE_BUILD_SHARED_LIB=y

为避免编译kni模块时出现的编译错误,可以修改配置文件dpdk-16.04/config/ommon_linuxapp,关闭编译KNI模块的配置

CONFIG_RTE_KNI_KMOD=n                                                                                                                                                                                        
CONFIG_RTE_LIBRTE_KNI=n

3、源码编译安装

1、设置环境变量

RTE_SDK是代码顶层目录

RTE_TARGET是选择编译平台,这里是64位linux系统,使用gcc编译。

export RTE_SDK=/root/dpdk-16.04
export RTE_TARGET=x86_64-native-linuxapp-gcc

2、编译安装

DESTDIR是安装目录

make install T=$RTE_TARGET DESTDIR=/usr/local/dpdk

如果设置了DESTDIR的环境变量,命令行上也可以不加这个参数,上面的命令可以写成 

export DESTDIR=/usr/local/dpdk
make install T=$RTE_TARGET

注意,设置了T参数没有设置DESTDIR参数或者环境变量时,是不会安装的。

如果没有T参数和DESTDIR参数或者环境变量,默认安装到/usr/local下面。

安装完成后,会在/usr/local/dpdk目录下生成以下文件,基于dpdk开发自己的程序时只需要用到inclue和lib(lib目录下包含igb_uio.ko文件)

       


三、开发库使用

1、dpdk环境搭建

step1 创建大页
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

step2 加载igb_uio.ko模块
modprobe  uio
insmod igb_uio.ko

step3 绑定网卡(假设两个网口地址为02:02.0 02:03.0)
./dpdk_nic_bind.py -b igb_uio  02:02.0 02:03.0

2、将开发库放到任意目录下

此处将编译后的头文件、库文件、igb_uio.ko放到/root/dpdk/目录下,然后设置LD_LIBRART_PATH环境变量

3、编译自己的dpdk程序

自己的dpdk程序可以放在任一目录下,但是必须包含rte_config.h头文件,否则编译时会应为缺少宏定义而报错。

[root@prism helloworld]# gcc main.c -I /root/dpdk/ -L /root/dpdk/lib/ -lrte_eal -lrte_mempool -lrte_ring 
In file included from main.c:40:0:
/root/dpdk/include/rte_memory.h:83:2: 错误:#error "Unsupported cache line size"
 #error "Unsupported cache line size"
  ^
In file included from main.c:43:0:
/root/dpdk/include/rte_eal.h:82:35: 错误:‘RTE_MAX_LCORE’未声明(不在函数内)
  enum rte_lcore_role_t lcore_role[RTE_MAX_LCORE]; /**< State of cores. */

编译自己的dpdk程序时,指定dpdk头文件目录、链接指定的dpdk动态库即可

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值