Kernel module
This article covers the various methods for operating with kernel modules.
Contents
Overview
For a module to be recognized as such, it has to be compiled as a module in the kernel configuration (the line related to the module will therefore display the letter M
).
Modules are stored in /lib/modules/kernel_release
(use the command uname -r
to print your current kernel release).
The /sbin/modprobe
command handles the addition and removal of modules from the Linux kernel.
The /etc/modprobe.d/
directory can be used to pass module settings to udev, which will use modprobe
to manage the loading of the modules during system boot. You can use configuration files with any name in the directory, given that they end with the .conf
extension.
_
) or dashes (-
), however those symbols are interchangeable both when using the modprobe
command and in configuration files in /etc/modprobe.d/
.Obtaining information
- Format the contents of
/proc/modules
and show what kernel modules are currently loaded:
$ lsmod
- Use
modinfo
to show information about a module:
$ modinfo module_name
- Use
modprobe
to list the dependencies of a module (or alias), including the module itself:
$ modprobe --show-depends module_name
- Use
systool
to list the options, that are set for a loaded module:
$ systool -v -m module_name
Configuration
If you want to display the comprehensive configuration of all the modules you can use the command:
$ modprobe -c | less
To display the configuration of a particular module, use:
$ modprobe -c | grep module_name
Loading
To manually load (or add) a module, run:
# modprobe module_name
For information on loading modules automatically at system boot, see rc.conf.
Removal
Occasionally you could need to remove (or unload) a module; in this case use the following command:
# modprobe -r module_name
Or, alternatively:
# rmmod module_name
Options
To pass a parameter to a kernel module you can use a modprobe conf file or use the kernel command line.
Using files in /etc/modprobe.d/
To pass options to a module using modprobe config files, a .conf file with any name (you can even use /etc/modprobe.d/modprobe.conf
) needs to be placed in /etc/modprobe.d/
with this syntax:
/etc/modprobe.d/myfilename.conf
options modname parametername=parametercontents
for example:
/etc/modprobe.d/thinkfan.conf
# On thinkpads, this lets the thinkfan daemon control fan speed options thinkpad_acpi fan_control=1
Using kernel command line
If the module is built into the kernel you can also pass options to the module using the kernel command line (e.g. in GRUB, LILO or Syslinux) using the following syntax:
modname.parametername=parametercontents
for example:
thinkpad_acpi.fan_control=1
Aliasing
/etc/modprobe.d/myalias.conf
# Lets you use 'mymod' in MODULES, instead of 'really_long_module_name' alias mymod really_long_module_name
Some modules have aliases which are used to autoload them when they are needed by an application. Disabling these aliases can prevent auto-loading, but will still allow the modules to be manually loaded.
/etc/modprobe.d/modprobe.conf
# Prevent autoload of bluetooth alias net-pf-31 off # Prevent autoload of ipv6 alias net-pf-10 off
Blacklisting
Blacklisting, in the context of kernel modules, is a mechanism to prevent the kernel module from loading. This could be useful if, for example, the associated hardware is not needed, or if loading that module causes problems: for instance there may be two kernel modules that try to control the same piece of hardware, and loading them together would result in a conflict.
Some modules are loaded as part of the initramfs. mkinitcpio -M
will print out all autodetected modules: to prevent the initramfs from loading some of those modules, blacklist them in /etc/modprobe.d/modprobe.conf
. Running mkinitcpio -v
will list all modules pulled in by the various hooks (e.g. filesystem hook, SCSI hook, etc.). Remember to rebuild the initramfs once you have blacklisted the modules and to reboot afterwards.
Using files in /etc/modprobe.d/
Create a .conf
file inside /etc/modprobe.d/
and append a line for each module you want to blacklist, using the blacklist
keyword. If for example you want to prevent the pcspkr
module from loading:
/etc/modprobe.d/nobeep.conf
# Do not load the pcspkr module on boot blacklist pcspkr
blacklist
command will blacklist a module so that it will not be loaded automatically, but the module may be loaded if another non-blacklisted module depends on it or if it is loaded manually.
However, there is a workaround for this behaviour; the install
command instructs modprobe to run a custom command instead of inserting the module in the kernel as normal, so you can force the module to always fail loading with:
/etc/modprobe.d/blacklist.conf
... install MODULE /bin/false ...This will effectively "blacklist" that module and any other that depends on it.
Using kernel command line
You can also blacklist modules on the kernel command line (e.g. in GRUB, LILO or Syslinux) using the following syntax:
modprobe.blacklist=modname1,modname2,modname3
Alternatively:
modname.disable=1
Examples using 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 ...