dpdk21.11 添加igb_uio模块

前言

官网说 基于安全性考虑,然后igb_uio 模块就从 dpdk20.11版本开始 就都去除了,也删除了 dpdk_setup.sh 的脚本
相比于 vfio模块,igb_uio模块的安全性更低
官网中也给出了编译igb_uio模块的方式

igb_uio模块下载链接

官网给出的igb_uio模块下载链接地址
在这里插入图片描述

编译

下载完链接里的igb_uio模块后,将压缩包拷贝到Ubuntu系统中
编译方式有两种

  1. 在外部直接使用make编译
  2. 将igb_uio模块重新加入到dpdk-21.11源码目录中,使用meson+ninja编译

编译方式1:make

解压完成后进入源码目录
dpdk-kmodes-main 源码目录

直接执行make
执行make

make执行完之后,目录中出现 igb_uio.ko 模块
可以直接通过insmod ./igb_uio.ko 挂载
!! 挂载之前需要提前挂载 uio 模块 ‘modprobe uio’

编译方式2:meson+ninja

1. 解压,复制 dpdk-kmods/linux/igb_uio/ 到 dpdk-stable-21.11.4/kernel/linux/ 目录下

qxy@qz652219228:~/dpdk$ cp ./dpdk-kmods-main/linux/igb_uio ./dpdk-stable-21.11.4/kernel/linux/ -r
qxy@qz652219228:~/dpdk$ ls ./dpdk-stable-21.11.4/kernel/linux/
igb_uio  kni  meson.build

2. vi dpdk-stable-21.11.4/kernel/linux/meson.build +4

	subdirs = ['kni', 'igb_uio']		#修改: 添加 igb_uio

创建文件 meson.build 在 dpdk-stable-21.11.4/kernel/linux/igb_uio/ 目录下

— 输入如下内容 –
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation

mkfile = custom_target('igb_uio_makefile',
        output: 'Makefile',
        command: ['touch', '@OUTPUT@'])

custom_target('igb_uio',
        input: ['igb_uio.c', 'Kbuild'],
        output: 'igb_uio.ko',
        command: ['make', '-C', kernel_dir + '/build',
                'M=' + meson.current_build_dir(),
                'src=' + meson.current_source_dir(),
                'EXTRA_CFLAGS=-I' + meson.current_source_dir() +
                        '/../../../lib/librte_eal/include',
                'modules'],
        depends: mkfile,
        install: true,
        install_dir: kernel_dir + '/extra/dpdk',		
        build_by_default: get_option('enable_kmods'))
— 内容结束 —

修改主目录(dpdk-stable-21.11.4)下的 meson_options.txt 文件

	21行 enable_kmods 	# value值 变成 true 

修改主目录(dpdk-stable-21.11.4)下 meson.build +15 添加 kernel_dir 的定义

kernel_version = run_command('uname', '-r').stdout().strip()
kernel_dir = '/lib/modules/' + kernel_version                                                                                                    
# 主要作用是 在下面的 使用的 kernel_dir  添加个定义

执行编译

dpdk-21.11 meson+ninja 编译

挂载

qxy@qz652219228:~/dpdk$ sudo modprobe uio
qxy@qz652219228:~/dpdk$ sudo insmod ./dpdk-kmods-main/linux/igb_uio/igb_uio.ko
#       or
qxy@qz652219228:~/dpdk$ sudo insmod ./dpdk-stable-21.11.4/build/kernel/linux/igb_uio/igb_uio.ko

– end –

### 安装和配置DPDK #### 准备开发环境 为了准备Ubuntu系统的开发环境,需要安装一系列必要的软件包。这可以通过`apt-get`命令来完成: ```bash sudo apt-get update sudo apt-get install build-essential libnuma-dev libpcap-dev python3-pip python3-pyelftools ``` 这些工具提供了编译和其他操作所需的依赖项[^3]。 #### 获取DPDK源码 有几种方法可以获取DPDK的源代码文件。一种常见的方式是从官方网站下载最新的稳定版压缩包: ```bash wget https://fast.dpdk.org/rel/dpdk-stable-21.11.0.tar.xz tar xf dpdk-stable-21.11.0.tar.xz cd dpdk-stable-21.11.0/ ``` 请注意,这里使用的链接指向的是一个具体的版本号;实际应用时应访问官方页面确认最新发布的版本并调整URL相应部分[^2]。 #### 编译DPDK库 进入解压后的目录之后,可以根据需求选择合适的配置选项进行构建过程。通常情况下,默认设置就足够满足大多数应用场景的需求了: ```bash meson setup builddir ninja -C builddir ``` 上述指令会创建一个新的名为`builddir`的子目录用于存放生成的目标文件,并启动编译流程[^1]。 #### 加载内核模块和支持驱动程序 为了让DPDK能够正常工作,在某些情形下可能还需要加载特定于硬件的支持模块以及用户态I/O(`uio`)设备模型。例如,对于Intel网络适配器而言,则需执行如下命令序列以启用相应的功能特性: ```bash sudo modprobe uio sudo insmod ./build/kernel/linux/igb_uio/igb_uio.ko ``` 另外,如果计划利用Kernel NIC Interface(KNI),那么同样也要将其加入到当前运行中的kernel空间之中: ```bash sudo insmod ./build/kmods/rte_kni.ko ``` 关于具体参数设定方面,比如分配给hugepages的数量等细节问题,请参照相关文档说明来进行适当调节[^4]。 #### 配置HugePages内存区域 由于DPDK应用程序倾向于直接管理物理地址空间内的缓冲区资源而不经过虚拟映射机制转换处理,因此建议预先划分一部分RAM作为专用存储池供其支配使用。此步骤涉及修改系统引导参数或者动态申请大页表项两种方式之一。此处仅介绍后者做法为例展示基本思路: ```bash echo 512 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages ``` 该语句的作用在于预留总共512MB大小(每页2KB)的大容量连续区块待后续调用者请求分配之时提供服务。 #### 绑定网卡至UIO/PF_RING-ZC模式 最后一步是要把目标接口切换成由非标准框架接管的状态以便更好地发挥性能优势。假设选定的对象为`eth1`的话,可按照下面给出的操作指南逐步实施变更措施: ```bash sudo ifconfig eth1 down ./usertools/dpdk-devbind.py --status ./usertools/dpdk-devbind.py --bind=igb_uio eth1 ``` 此时应当能看到所选端口已经被正确关联到了预期的工作模式之下等待进一步测试验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值