Linux 内核模块相关命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hang404/article/details/85227509

lsmod

lsmod查看内核中已加载的模块状态,也可以通过/proc/modules来查看已加载的模块。
lsmod | grep openvswitch的结果中:

  1. 第一列是模块名字;
  2. 第二列是模块大小,表示多少字节;
  3. 第三列是一个数字,表示正在使用该模块的实例数。 如果该数字为零,则当前未使用该模块;
  4. 第四列表示使用该模块的可用信息:这通常是设备名称,文件系统标识符或其他模块的名称。

insmod

insmod [file name] [module-options...]
insmod向Linux内核中插入一个模块。insmod类似于modprobe:它可以将模块插入Linux内核。 然而,与modprobe不同,insmod不会从自动处理任何依赖项。insmod可以从任何位置插入单个模块,但在执行此操作时不考虑依赖性。
所以使用时需要指明模块路径和名字,并且如果该模块有依赖时,需要先加载其所依赖的模块,该模块才能正常插入。其依赖的模块可以通过modinfo ./datapath/linux/openvswitch.ko查看(openvstich.ko是要插入的模块)。
依赖模块加载后,就可以加载该模块:
insmod ./datapath/linux/openvswitch.ko

rmmod

rmmod [-f] [-w] [-s] [-v] [modulename]
rmmod卸载Linux内核中的一个模块。
不过在大多数情况下,应该使用带有-r选项的modprobe,因为它更健壮并且会处理依赖项。
-f代表强制卸载,该操作比较危险,需要注意使用,他会卸载正在使用的模块。
-w通常,rmmod将拒绝卸载正在使用的模块。 但是如果指定了此选项,并且尝试删除正在使用的模块,则rmmod将隔离它并等待它不再使用。 以这种方式隔离后,没有任何新东西可以使用该模块。
强烈建议使用modprobe -r而不是rmmod来删除内核模块,以确保删除不会破坏任何依赖项。

depmod

depmod生成内核模块依赖关系列表和相关的映射文件。
depmod分析你的内核模块(在目录/ lib / modules / kernel-release中)并创建一个依赖项列表(名为modules.dep),这样当使用modprobe添加和删除模块时,不用考虑其依赖的模块。 同时,它创建了一个硬件标识符和处理它们的模块的映射。 此映射用于在硬件请求时找到正确的模块。
一般在更改一些配置文件之后,需要使用depmod -a来更新模块关系,然后使用modprobe来加载模块。如:

sudo ln -s /path/to/your-kernel-module.ko  /lib/modules/`uname -r`
sudo depmod -a
sudo modprobe your-kernel-module

在第二个命令中,depmod -a生成更新的依赖关系列表,以确保正在安装的模块知道所有现有模块和依赖关系。
在第三个命令中安装模块时,modprobe将使用此依赖关系列表。

modprobe

添加和删除内核模块。
modprobe使用depmod生成的依赖关系列表和硬件映射来智能地将模块加载或卸载到内核中。 它分别使用较低级别的程序insmodrmmod执行实际插入和删除。
虽然可以手动调用insmodrmmod,但建议使用depmod加载和卸载模块,以确保在进行更改之前考虑任何模块间的依赖关系。
一般使用
modprobe module_name来添加模块
modprobe -r module_name 来删除模块

modinfo

查看内核模块信息
如果模块名称不是文件名,则搜索/ lib / modules / kernel-version目录,该目录也是加载内核模块时,modprobe搜索的目录。
一般用法
modinfo module_name

猜你喜欢

转载自blog.csdn.net/hang404/article/details/85227509