1、编译环境
1.1 基本要求
dpdk开发手册中列出了编译dpdk需要的工具和资源:
- GNU make
- cmp,sed,grep,arch
- gcc,版本推荐4.5.x或以上,对于不同版本的gcc要注意编译选项对性能的影响
- libc头文件,glibc的版本要求2.7或以上
- linux内核头文件和源码,内核版本要求2.6.33或以上
- python,版本要求2.6或以上
1.2 实际编译环境
OS:ubuntu 18.04.1,64bits
Kernel:linux-5.0.0
GCC:7.5.0
Glibc:2.27
DPDK:19.11
Python:2.7.17
2、编译方法
2.1 编译服务器搭建
编译服务器安装ubuntu 18.04.1,安装其他相关的工具。下载内核源码并编译内核源码,
指定内核源码输出路径。关于内核源码的编译可参考我的关于内核源码树构建的博文
2.2 解压DPDK源码包
下载DPDK源码包dpdk-19.11.tar.xz到用户路径,并解压,解压命令如下:
tar xvJf dpdk-19.11.tar.xz
2.3 编译DPDK的SDK环境
1) 声明环境变量"RTE_KERNELDIR",指定内核的编译路径(绝对路径)
[xxx@xxx-O-E-M-FILLED:~]$ export RTE_KERNELDIR=/lib/modules/5.0.0-23-generic
若不指定,默认值在dpdk-19.11/mk/rte.vars.mk文件中定义
RTE_KERNELDIR ?= /lib/modules/$(shell uname -r)/build
2)配置DPDK 的SDK 环境
[xxx@xxx-O-E-M-FILLED:~]$ cd dpdk-19.11
[xxx@xxx-O-E-M-FILLED:~dpdk-19.11]$ make config T=x86_64-native-linux-gcc O=build
"T="指定了配置模板"RTE_CONFIG_TEMPLATE","O="可指定输出目录,若不指定,
默认为./build目录
3)编译DPDK SDK
[xxx@xxx-O-E-M-FILLED:~dpdk-19.11]$ make O=build
make命令执行后,将会在指定的输出目录生存SDK自带的测试程序、库文件及内核模块。
4)清除DPDK SDK
[xxx@xxx-O-E-M-FILLED:~dpdk-19.11]$ make clean O=build,"O="为make config命令
指定的"RTE_OUTPUT"输出目录,若make config时未指定,这里也不指定。
2.4 编译应用程序
1)应用程序源码结构
应用程序源码可以放在人与目录下(以myApp目录为例),参考DPDK 例子helloworld写
对应的Makefile
......
#binary name
APP=myApp #生成的应用程序名称
#all source are stored in SRCS-y
SRCS-y :=main.c #这里增加需要的源码
CFLAGS += -O2 -g #可以调整优化选项-O2,增加对gdb调试的支持
CFLAGS += $(WERROR_FLAGS)
include $(RTE_SDK)/mk/rte_extapp.mk
2)声明环境变量"RTE_SDK",指明DPDK SDK源码路径(绝对路径)
[xxx@xxx-O-E-M-FILLED:~]$ export RTE_SDK=/home/xxx/dpdk-19.11/
3)声明环境变量"RTE_TARGET",指明"SDK目标"与"RTE_SDK"的相对路径
[xxx@xxx-O-E-M-FILLED:~]$ export RTE_TARGET=./build
4)编译myApp程序
[xxx@xxx-O-E-M-FILLED:~myApp]$ make O=../myApp/,"O="可指定输出目录,若不指定,
默认为./build目录。
5)清除myApp目标文件
[xxx@xxx-O-E-M-FILLED:~myApp]$ make O=../myApp/