Difference between revisions of "Kernel modules (简体中文)"

From ArchWiki
Jump to: navigation, search
m (参见)
Line 133: Line 133:
  
 
*http://linuxmanpages.com/man5/modprobe.conf.5.php
 
*http://linuxmanpages.com/man5/modprobe.conf.5.php
*[[Disabling IPv6]]
+
*[[Disabling IPv6 (简体中文)|禁用 IPv6]]
*[[Disable PC Speaker Beep]]
+
*[[Disable PC Speaker Beep (简体中文)|禁用 PC喇叭]]

Revision as of 05:42, 26 December 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

本文包含了操作 内核模块 的不同方法。

概览

要让内核认识模块,需要在内核配置时将模块配置为 M (模块)。

模块保存在 /lib/modules/kernel_release (使用 uname -r 命令显示当前内核版本)。

/sbin/modprobe 命令负责内核模块的加入和移除。

/etc/modprobe.d/ 目录可以将模块设置传递给 udev, udev 使用 modprobe 在系统启动时管理内核模块的装入。可以使用任意配置文件名,只要是以 .conf 结尾即可。

注意: 模块名通常使用 (_) 或 - 连接,但是这些符号在 modprobe 命令和 /etc/modprobe.d/ 配置文件中都是可以相互替换的。

获取信息

  • 显示当前装入的内核模块:
$ lsmod
  • 使用 modinfo 显示模块信息:
$ modinfo module_name
  • 使用 modprobe 显示模块的依赖关系:
$ modprobe --show-depends module_name

配置

显示所有模块的配置信息:

$ modprobe -c | less

显示某个模块的配置信息:

$ modprobe -c | grep module_name

装入

要手动装入模块,运行:

# modprobe module_name

要在系统启动时自动装入模块,请参考 rc.conf

移除

如果要移除一个模块:

# modprobe -r module_name

或者:

# rmmod module_name

选项

可以用 modprobe 配置文件或内核命令行传入模块配置信息。

使用 /etc/modprobe.d/中的文件

要通过配置文件传递参数,在 /etc/modprobe.d/ 中放入任意名称 .conf 文件,加入:

/etc/modprobe.d/myfilename.conf
options modname parametername=parametercontents

例如

/etc/modprobe.d/thinkfan.conf
# On thinkpads, this lets the thinkfan daemon control fan speed
options thinkpad_acpi fan_control=1

使用内核命令行

如果模块直接编译进内核,也可以通过启动管理器(GRUB, LILOSyslinux)的内核行加入参数:

modname.parametername=parametercontents

例如:

thinkpad_acpi.fan_control=1

别名

/etc/modprobe.d/myalias.conf
# Lets you use 'mymod' in MODULES, instead of 'really_long_module_name'
alias mymod really_long_module_name

有些模块具有别名,以方便其它程序自动装入模块。禁用这些别名可以阻止自动装入,但是仍然可以手动装入。

/etc/modprobe.d/modprobe.conf
# Prevent autoload of bluetooth
alias net-pf-31 off

# Prevent autoload of ipv6
alias net-pf-10 off

黑名单

对内核模块来说,黑名单是指禁止某个模块装入的机制。当对应的硬件不存在或者装入某个模块会导致问题时很有用。

有些模块作为 initramfs 的一部分装入。

mkinitcpio -M 会显示所有自动检测到到模块:要阻止 initramfs 装入某些模块,可以在 /etc/modprobe.d/modprobe.conf 中将它们加入黑名单。

运行 mkinitcpio -v 会显示各种钩子(例如 filesystem 钩子, SCSI 钩子等)装入的模块。如果要禁用这些模块,记得在配置完成后重新生成 initramfs。

使用 /etc/modprobe.d/ 中的文件

/etc/modprobe.d/ 中创建 .conf 文件,使用 blacklist 关键字屏蔽不需要的模块,例如如果不想装入 pcspkr 模块:

/etc/modprobe.d/nobeep.conf
# Do not load the pcspkr module on boot
blacklist pcspkr
注意: blacklist 命令将屏蔽一个模板,所有不会自动装入,但是如果其它非屏蔽模块需要这个模块,系统依然会装入它。

要避免这个行为,可以让 modprobe 使用自定义的 install 命令,直接返回导入失败:

/etc/modprobe.d/blacklist.conf
...
install MODULE /bin/false
...

这样就可以 "屏蔽" 模块及所有依赖它的模块。

使用内核命令行

同样可以通过内核命令行(位于 GRUBLILOSyslinux)禁用模块:

modprobe.blacklist=modname1,modname2,modname3

或者:

modname.disable=1

当某个模块导致系统无法启动时,可以使用此方法禁用模块。

使用 GRUB 的示例

/boot/grub/menu.lst
...
kernel /vmlinuz-linux root=/dev/sda1 modprobe.blacklist=pcspkr,ipv6 ro
...
/boot/grub/menu.lst
...
kernel /vmlinuz-linux root=/dev/sda1 pcspkr.disable=1 ipv6.disable=1 ro
...

参见