虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)

安装dpdk有两种方式:第一种命令;第二种使用dpdk-setup.sh。本文讲解通过dpdk-setup.sh来安装。

1.下载dpdk

 进入dpdk官网,下载想要的版本:http://core.dpdk.org/download/

2.安装依赖的库

yum install -y kernel-devel kernel-headers

yum install kernel.x86_64 -y 

根据编译安装dpdk时候的提示是否还有其他需要安装的依赖库,在此就不一一列举了。

3.环境配置

1. export RTE_SDK='pwd'  (pwd为你dkdk的解压目录,比如/home/dpdk-19.08)

2. export RTE_TARGET=x86_64-native-linuxapp-gcc  

4.开始安装

cd /home/dpdk-19.08/usertools

./dpdk-setup.sh

虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)_第1张图片

虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)_第2张图片

第一步选择: 36,配置编译的环境。

虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)_第3张图片

 第二步选择 43,选择硬件支持的模式

 在选择43的时候出现如下错误

经过查询,是内核版本和dpdk的模块版本不一致导致的问题。

查看ls /usr/src/kernels/发现只有 3.10.0-957.27.2.el7.x86_64;而我通过uname -r查看我的版本却是:3.10.0-123.el7.x86_64。

通过rpm命令查看我所安装的内核版本:

  

 通过rpm -e kernel-3.10.0-123.el7.x86_64 卸载掉第二个kernel,然后重启系统再用uname -r查看内核版本就变成了kernel-3.10.0-957.27.2.el7.x86_64。

再从头开始执行安装步骤。

     1.export RTE_SDK='/home/dpdk-19.08'

     2.export RTE_TARGET=x86_64-native-linuxapp-gcc

     3../dpdk-setup.sh

      第三步选择 47,设置大页内存,然后提示输入1024

     设置大页内存太小会导致运行helloworld这个例子报错,所以先设置1024。

      第四部选择49,绑定网卡

选择49的时候绑定网卡,需要先停掉需要绑定的网卡  。

我在虚拟机上开了四个网卡,打算停掉后面的ens38和ens39,执行如下命令:

ifconfig ens38 down

ifconfig ens39 down

然后在运行脚本来选择49:

虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)_第4张图片

我机器如图显示 ,直接输入02:06.0和02:07.0对应的就是ens38和ens39的网卡(前面4个0不需要输入)。

到此,环境已经搭建好了。

5测试dpdk

  • 1.配置环境,如果上面搭建的时候配置了,就不需要再配置了:

export RTE_SDK='/home/dpdk-19.08/'

export RTE_TARGET=x86_64-native-linuxapp-gcc

  • 2.编译代码

cd /home/dpdk-19.08/examples/helloworld

make

  • 3.运行可执行文件

./build/helloworld

虚拟机上centos7下安装DPDK(通过dpdk-setup.sh安装)_第5张图片

 我的机器输出如上,虽然正确输出了hello from core# 但是上一句提示了错误:

EAL: Error reading from file descriptor 27: Input/output error

经了解是在虚拟机添加的网卡,dpdk不支持导致的。需要修改一行代码,跳过dpdk pci 检查:

打开/home/dpdk-19.02/kernel/linux/igb_uio/igb_uio.c,找到:

pci_intx_mask_supported(dev)

这行代码,然后修改为

pci_intx_mask_supported(dev)||true

再重新执行./dpdk-setup.sh重新编译。

再来运行./build/helloworld

这次就不会有报错了。

你可能感兴趣的:(DPDK,DPDK)