内核模块参数
正如内核可以接受引导时间参数来修改内核的行为一样,内核模块也可以接受参数来修改其行为。
使用 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
加载和卸载内核模块
加载模块
内核模块是通过使用 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 内核由引导加载程序加载到内存中。
内核模块根据需要动态加载和卸载。
它们提供设备驱动程序以允许内核访问新硬件、支持不同的文件系统类型并通常扩展内核的功能。
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