文章目录
- 前言
- igb_uio模块下载链接
- 编译
- 编译方式1:make
- 编译方式2:meson+ninja
- 1. 解压,复制 dpdk-kmods/linux/igb_uio/ 到 dpdk-stable-21.11.4/kernel/linux/ 目录下
- 2. vi dpdk-stable-21.11.4/kernel/linux/meson.build +4
- 创建文件 meson.build 在 dpdk-stable-21.11.4/kernel/linux/igb_uio/ 目录下
- --- 输入如下内容 --
- --- 内容结束 ---
- 修改主目录(dpdk-stable-21.11.4)下的 meson_options.txt 文件
- 修改主目录(dpdk-stable-21.11.4)下 meson.build +15 添加 kernel_dir 的定义
- 执行编译
- 挂载
- -- end --
前言
官网说 基于安全性考虑,然后igb_uio 模块就从 dpdk20.11版本开始 就都去除了,也删除了 dpdk_setup.sh 的脚本
相比于 vfio模块,igb_uio模块的安全性更低
官网中也给出了编译igb_uio模块的方式
igb_uio模块下载链接
官网给出的igb_uio模块下载链接地址
编译
下载完链接里的igb_uio模块后,将压缩包拷贝到Ubuntu系统中
编译方式有两种
- 在外部直接使用make编译
- 将igb_uio模块重新加入到dpdk-21.11源码目录中,使用meson+ninja编译
编译方式1: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