Chapter 1. Working with kernel modules
This Chapter explains:
- What is a kernel module.
- How to use the kmod utilities to manage modules and their dependencies.
- How to configure module parameters to control behavior of the kernel modules.
- How to load modules at boot time.
In order to use the kernel module utilities described in this chapter, first ensure the kmod package is installed on your system by running, as root:
# yum install kmod
1.1. What is a kernel module?
The Linux kernel is monolithic by design. However, it is compiled with optional or additional modules as required by each use case. This means that you can extend the kernel’s capabilities through the use of dynamically-loaded kernel modules. A kernel module can provide:
- a device driver which adds support for new hardware,
support for a file system such as
Like the kernel itself, modules can take parameters that customize their behavior, though the default parameters work well in most cases. User-space tools can list the modules currently loaded into a running kernel; query all available modules for available parameters and module-specific information; and load or unload (remove) modules dynamically into or from a running kernel. Many of these utilities, which are provided by the kmod package, take module dependencies into account when performing operations so that manual dependency-tracking is rarely necessary.
On modern systems, kernel modules are automatically loaded by various mechanisms when needed. However, there are occasions when it is necessary to load or unload modules manually. For example when one module is preferred over another although either is able to provide basic functionality, or when a module is misbehaving.
1.2. Listing currently-loaded modules
You can list all kernel modules that are currently loaded into the kernel by running the
lsmod command, for example:
# lsmod Module Size Used by tcp_lp 12663 0 bnep 19704 2 bluetooth 372662 7 bnep rfkill 26536 3 bluetooth fuse 87661 3 ebtable_broute 12731 0 bridge 110196 1 ebtable_broute stp 12976 1 bridge llc 14552 2 stp,bridge ebtable_filter 12827 0 ebtables 30913 3 ebtable_broute,ebtable_nat,ebtable_filter ip6table_nat 13015 1 nf_nat_ipv6 13279 1 ip6table_nat iptable_nat 13011 1 nf_conntrack_ipv4 14862 4 nf_defrag_ipv4 12729 1 nf_conntrack_ipv4 nf_nat_ipv4 13263 1 iptable_nat nf_nat 21798 4 nf_nat_ipv4,nf_nat_ipv6,ip6table_nat,iptable_nat [output truncated]
lsmod output specifies three columns:
- The name of a kernel module currently loaded in memory.
- The amount of memory the kernel module uses in kilobytes.
- A decimal number representing how many dependencies there are on the Module field.
- A comma separated string of dependent Module names. Using this list, you can first unload all the modules depending the module you want to unload.
Finally, note that
lsmod output is less verbose and considerably easier to read than the content of the
1.3. Displaying information about a module
You can display detailed information about a kernel module using the
modinfo module_name command.
When entering the name of a kernel module as an argument to one of the kmod utilities, do not append a
.ko extension to the end of the name. Kernel module names do not have extensions; their corresponding files do.
Example 1.1. Listing information about a kernel module with lsmod
To display information about the
e1000e module, which is the Intel PRO/1000 network driver, enter the following command as
# modinfo e1000e filename: /lib/modules/3.10.0-121.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko version: 2.3.2-k license: GPL description: Intel(R) PRO/1000 Network Driver author: Intel Corporation,