首页 > 其他分享 >openeuler加载dpdk驱动模块

openeuler加载dpdk驱动模块

时间:2023-02-15 18:00:37浏览次数:45  
标签:0000 uio 网卡 igb 模块 openeuler dpdk 加载

虽然是openeuler arm架构加载dpdk网卡驱动,但是linux加载驱动模块的流程和方法是一样的,遇到的问题也是相似的,所以借这个机会把相关的内容介绍一下

确认模块名称

驱动模块开发完成后是一个ko库,拷贝到系统指定目录,然后运行命令加载模块名。有时候想知道源码编译的模块名称是什么,可以在在源码的Makefile文件中:

#
# module name and path
#
MODULE = igb_uio
MODULE_PATH = drivers/net/igb_uio

以dpdk的为例,这里有明确的指出,模块的名称和位置,但是MODULE并不是关键字,是dpdk的一个变量,可以在编译文件中查找*.ko结尾的内容来确认名称,比如dpdk的:

_BUILD = $(MODULE).ko

insmod

insmod只会加载指定路径下的某个模块,不会解决依赖,比如insmod /home/test/dev/igb_uio.ko

modprobe

modprobe会帮忙解决依赖,也就是如果加载a模块需要b模块,那么会先加载b模块,再加载a模块,比如modprobe igb_uio
modprobe不需要指定具体路径,但是你必须要把你的模块放到系统指定目录/lib/modules/#uname -r#/,这个路径不是固定的,会根据不同的系统而不一样,uname -r就是后面的目录名称。

depmod

depmod会扫描模块,把结果写入/lib/modules/#uname -r#/modules.dep文件中,如果安装一个新模块,需要先运行depmod扫描,再运行modprobe加载,不然会报错FATAL: Module test.ko not found in directory /lib/modules/xxx

lsmod

列出系统中安装的模块,内容有三列,第一列是模块名,第二列是模块大小,第三列是模块被谁调用

Module                  Size  Used by
ib_uverbs             327680  1 rdma_ucm
ib_iser               262144  0
rdma_cm               262144  6 rpcrdma,ib_srpt,ib_srp,ib_iser,ib_isert,rdma_ucm

modinfo

查看模块的信息,可以指定具体路径,也可以只指定

$ modinfo igb_uio                
filename:       /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/dpdk/igb_uio.ko
author:         Intel Corporation
license:        GPL
description:    UIO driver for Intel IGB PCI cards
srcversion:     26C63DAE2104091D5DE47C6
depends:        uio
name:           igb_uio
vermagic:       4.19.90-2110.8.0.0119.oe1.aarch64 SMP mod_unload modversions aarch64
parm:           intr_mode:igb_uio interrupt mode (default=msix):
    msix       Use MSIX interrupt
    msi        Use MSI interrupt
    legacy     Use Legacy interrupt

 (charp)

rmmod

删除模块,如果模块不需要了,或者想替换新的模块,需要用rmmod删除,命令如下rmmod igb_uio

module_init module_exit

这两个函数注册两个接口,用作加载和卸载模块的时候调用

module_init(mymodule_init);
module_exit(mymodule_exit);

绑定驱动

dpdk-devbind -b igb_uio 0000:c6:00.0
dpdk-devbind是dpdk编译安装的工具,上面就是把igb_uio驱动绑定到指定的网卡bus info中

查看网卡状态

dpdk-devbind -s

Network devices using DPDK-compatible driver
============================================
0000:c6:00.0 'Hi1822 Family (4*25GE) 1822' drv=igb_uio unused=hinic

Network devices using kernel driver
===================================
0000:7d:00.0 'HNS GE/10GE/25GE RDMA Network Controller a222' if=enp125s0f0 drv=hns3 unused=hns_roce_hw_v2,igb_uio *Active*
0000:7d:00.1 'HNS GE/10GE/25GE Network Controller a221' if=enp125s0f1 drv=hns3 unused=hclge,igb_uio 
0000:7d:00.2 'HNS GE/10GE/25GE RDMA Network Controller a222' if=enp125s0f2 drv=hns3 unused=hns_roce_hw_v2,igb_uio 
0000:7d:00.3 'HNS GE/10GE/25GE Network Controller a221' if=enp125s0f3 drv=hns3 unused=hclge,igb_uio 
0000:c3:00.0 'Hi1822 Family (4*25GE) 1822' if=enp195s0 drv=hinic unused=igb_uio 
0000:c4:00.0 'Hi1822 Family (4*25GE) 1822' if=enp196s0 drv=hinic unused=igb_uio 
0000:c5:00.0 'Hi1822 Family (4*25GE) 1822' if=enp197s0 drv=hinic unused=igb_uio 
0000:dd:00.0 'HNS GE/10GE/25GE RDMA Network Controller a222' if=enp221s0f0 drv=hns3 unused=hns_roce_hw_v2,igb_uio

可以看到0000:c6:00.0这个网卡已经是dpdk的驱动了。

绑定dpdk驱动后,网卡会被dpdk接管,使用ifconfig就无法查看到网卡信息和名称。

解绑网卡驱动

dpdk-devbind -u 0000:c6:00.0

绑定系统原来驱动

这一步需要知道系统原来驱动名称,可以在最开始调用ethtool -i 网卡名查看

遇到问题

modprobe: ERROR: could not insert 'igb_uio': Invalid argument

当前系统的内核和编译模块内核不匹配,通过uname -rmodinfo 模块名查看系统内核与模块的vermagic值是否相同。

$ uname -r
4.19.90-2003.4.0.0036.oe1.aarch64

$ modinfo igb_uio 
filename:       /lib/modules/4.19.90-2003.4.0.0036.oe1.aarch64/extra/dpdk/igb_uio.ko
author:         Intel Corporation
license:        GPL
description:    UIO driver for Intel IGB PCI cards
srcversion:     26C63DAE2104091D5DE47C6
depends:        uio
name:           igb_uio
vermagic:       4.19.90-2110.8.0.0119.oe1.aarch64 SMP mod_unload modversions aarch64
parm:           intr_mode:igb_uio interrupt mode (default=msix):
    msix       Use MSIX interrupt
    msi        Use MSI interrupt
    legacy     Use Legacy interrupt

 (charp)
parm:           wc_activate:Activate support for write combining (WC) (default=0)
    0 - disable
    other - enable
 (int)

这时候可以查看一下自己系统上安装的kernel-devel与系统内核版本uname -r是否匹配,如果不匹配,先卸载kernel-devel,再安装指定版本yum install "kernel-devel-uname-r == $(uname -r)"

标签:0000,uio,网卡,igb,模块,openeuler,dpdk,加载
From: https://www.cnblogs.com/studywithallofyou/p/17120421.html

相关文章