内核模块参数

正如内核可以接受引导时间参数来修改内核的行为一样,内核模块也可以接受参数来修改其行为。
使用 modprobe 将参数传递给内核模块的语法是:

# modprobe [module_name] [parameter=value]

可以通过用空格分隔对来传递多个参数=值对。
确保之前没有加载该模块,因为 modprobe 不会重新加载该模块。

列出加载的内核模块

要列出当前加载到内核中的内核模块,请使用 lsmod 命令。
此命令通过读取 /proc/modules 文件产生输出。
例子:

# lsmod
Module                  Size  Used by
ip_tables              27115  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw
xfs                   985426  2 
libcrc32c              12644  1 xfs
...

使用者列给出了正在使用该模块和它所依赖的其他模块的进程总数,然后是这些依赖模块的列表。

列出模块详细信息

modinfo 命令显示有关特定内核模块的详细信息。
例如,要显示有关 iptables 内核模块的信息,请输入:

# modinfo ip_tables
filename:       /lib/modules/3.10.0-514.el7.x86_64/kernel/net/ipv4/netfilter/ip_tables.ko
description:    IPv4 packet filter
author:         Netfilter Core Team [coreteam@netfilter.org]
license:        GPL
rhelversion:    7.3
srcversion:     EDBAB32FC38D6942C83A4B1
depends:        
intree:         Y
vermagic:       3.10.0-514.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        D4:88:63:A7:C1:6F:CC:27:41:23:E6:29:8F:74:F0:57:AF:19:FC:54
sig_hashalgo:   sha256

其中:
filename : 内核目标文件的绝对路径
description : 模块的简短描述
alias :模块的内部别名,如果有的话
Depends :此模块所依赖的模块的逗号分隔列表(如果有)
parm : 参数名称和简短描述

模块从 /lib/modules/[kernel_version]/kernel 目录加载。
例如,要显示 ip_tables 内核对象文件的绝对路径,请执行以下操作:

# modinfo -n ip_tables
/lib/modules/3.10.0-514.el7.x86_64/kernel/net/ipv4/netfilter/ip_tables.ko
欢迎来到之路教程(on itroad-com)

加载和卸载内核模块

加载模块
内核模块是通过使用 modprobe 命令加载的。
Linux 内核的设备管理器 udev 使用 modprobe 加载自动检测硬件的驱动程序。
例如加载内核模块 ip_tables :

# modprobe ip_tables

要验证模块是否已加载:

# lsmod | grep ip_tables
ip_tables              27115  5 iptable_security,iptable_filter,iptable_mangle,iptable_nat,iptable_raw

首先加载依赖模块。
加载内核模块时使用 modprobe –v (verbose) 查看依赖解析。
例如 :

# modprobe -v nfs
insmod /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/fscache/fscache.ko 
insmod /lib/modules/3.10.0-514.el7.x86_64/kernel/fs/nfs/nfs.ko

注意: modprobe 使用 insmod 命令将模块加载到内核中。
但是,不要使用 insmod,因为此命令不解析依赖项。

卸载模块
使用 modprobe –r 命令卸载内核模块。
我们还可以使用详细选项。
例如,要卸载 nfs 内核模块,请输入:

# modprobe -rv nfs
rmmod nfs
rmmod fscache

注意: modprobe –r 命令使用 rmmod 卸载模块。
但与insmod类似,不建议直接使用rmmod卸载内核模块。

模块以相反的顺序卸载,首先卸载 nfs.ko 内核模块,然后是它所依赖的模块。
进程正在使用的模块或者其他已加载模块所需的模块不会卸载。

kmod 包

kmod 包提供了 lsmod 命令和其他内核模块文件和实用程序,例如 modinfo、modprobe、depmod、insmod 和 rmmod:

# rpm -qf /sbin/lsmod 
kmod-20-9.el7.x86_64

要列出 kmod 包提供的所有文件,请输入:

# rpm -ql kmod
/etc/depmod.d
/etc/depmod.d/dist.conf
/etc/modprobe.d
/usr/bin/kmod
/usr/lib/modprobe.d
Linux 内核模块配置教程

Linux 内核由引导加载程序加载到内存中。
内核模块根据需要动态加载和卸载。
它们提供设备驱动程序以允许内核访问新硬件、支持不同的文件系统类型并通常扩展内核的功能。

modprobe 的配置目录

modprobe 的配置目录是/etc/modprobe.d。
在 /etc/modprobe.d 中创建 *.conf 文件以:
– 指定选项
– 创建别名
– 覆盖正常的 modprobe 行为
– 黑名单内核模块

这些 .conf 文件的格式是每行一个命令。
在这些文件中使用的有效命令包括:

alias, options, install, remove, blacklist

别名

使用语法 alias alias_name module_name 为内核模块创建替代名称。
我们还可以在别名中使用 shell 通配符。
例子:

alias usbdevfs usbcore

选项

使用语法 options module_name option(s) 向 module_name 添加选项。
例子:

options b43 nohwcrypt=1 qos=0

安装

使用语法 install module_name command(s) 告诉 modprobe 运行 shell 命令而不是将模块插入内核。
例子:

install net-pf-6 /bin/true

删除

remove 命令类似于 install 命令,不同之处在于它在运行“modprobe –r”时调用。
使用语法 remove module_name command(s) 告诉“modprobe –r”运行 shell 命令而不是从内核卸载模块。

黑名单

使用语法 blacklist module_name 告诉 modprobe 忽略模块的内部别名。
内部别名是使用 modinfo [module_name] 命令时看到的别名。
blacklist 关键字通常在不需要相关硬件时使用,或者当两个或者多个模块支持相同的设备时,或者模块无效地声称支持一个设备时。

有关更多信息,请参阅 modprobe.d 手册页。

# man modprobe.d
日期:2020-09-17 00:12:50 来源:oir作者:oir