Beginners guide to Kernel Module Configuration in Linux

The Linux kernel is loaded into memory by the boot loader. Kernel modules are dynamically loaded and unloaded on demand. They provide device drivers to allow the kernel to access new hardware, support for different file system types and generally extend the functionality of the kernel.


Listing the Loaded Kernel Modules


To list which kernel modules are currently loaded into the kernel, use the lsmod command. This command produces output by reading the /proc/modules file. Example:

# 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

The Used by column gives the total number of processes that are using the module and the other modules that it depends on, followed by a list of those dependent modules. 


kmod Package


The lsmod command and other kernel module files and utilities such as modinfo, modprobe, depmod, insmod, and rmmod are provided by the kmod package:

# rpm -qf /sbin/lsmod 


To list all files provided by the kmod package, enter: 

# rpm -ql kmod


Listing Module Details


 The modinfo command displays detailed information about a specific kernel module. For example, to display information about the iptables kernel module, enter:

# 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 []
license:        GPL
rhelversion:    7.3
srcversion:     EDBAB32FC38D6942C83A4B1
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 


here ,
filename: The absolute path of the kernel object file
description: The short description of the module
alias: The internal alias names for the module, if any
depends: A comma-separated list of modules that this module depends on, if any
parm: The parameter name and a short description


Modules are loaded from the /lib/modules/[kernel_version]/kernel directory. For example, to display the absolute path of the ip_tables kernel object file, :


Loading and unloading kernel modules


Loading modules

Kernel modules are loaded by using the modprobe command. The device manager for the Linux kernel, udev, uses modprobe to load drivers for automatically detected hardware. For example to load the kernel module ip_tables :

# modprobe ip_tables


To verify that the module has been loaded :

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


The dependent modules are loaded first. Use modprobe –v (verbose) to view the dependency resolution when loading a kernel module. For example :

# 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


Note : modprobe uses the insmod command to load the modules into the kernel. Do not use insmod, however, because this command does not resolve dependencies.


Unloading Modules

Unload kernel modules by using the modprobe –r command. You can also use the verbose option. For example, to unload the nfs kernel module, enter:

# modprobe -rv nfs
rmmod nfs
rmmod fscache


Note : The modprobe –r command uses rmmod to unload the modules. But similar to insmod, it is not recommended to use rmmod directly to unload kernel modules.

Modules are unloaded in the reverse order, with the nfs.ko kernel module being unloaded first followed by the modules it was dependent on. Modules being used by a process or modules needed by other loaded modules are not unloaded.


Kernel Module Parameters


Just as the kernel can accept boot time parameters to modify the behavior of the kernel, kernel modules can also accept parameters to modify their behavior. The syntax for passing parameters to a kernel module with modprobe is:

# modprobe [module_name] [parameter=value]


 Multiple parameter=value pairs can be passed by separating the pairs with spaces. Ensure that the module is not previously loaded, because modprobe does not reload the module.



 Configuration Directory for modprobe



 The configuration directory for modprobe is /etc/modprobe.d. Create *.conf files in /etc/modprobe.d to:


 – Specify options 

 – Create aliases 

 – Override normal modprobe behavior 

 – Blacklist kernel modules


 The format of these .conf files is one command per line. Valid commands to use in these files include the following:


alias, options, install, remove, blacklist



 Use the syntax alias alias_name module_name to create alternative names for kernel modules. You can also use shell wildcards in alias names. Example:

alias usbdevfs usbcore



 Use the syntax options module_name option(s) to add options to module_name. Example:

options b43 nohwcrypt=1 qos=0



 Use the syntax install module_name command(s) to tell modprobe to run shell commands rather than inserting the module in the kernel. Example:

install net-pf-6 /bin/true



This is similar to the install command, except it is invoked when “modprobe –r” is run. Use the syntax remove module_name command(s) to tell “modprobe –r” to run shell commands rather than unloading the module from the kernel.



Use the syntax blacklist module_name to tell modprobe to ignore a module’s internal aliases. Internal aliases are those seen when using the modinfo [module_name] command. The blacklist keyword is typically used when the associated hardware is not needed, or when two or more modules support the same devices, or a module invalidly claims to support a device.


Refer to the modprobe.d man page for more information

# man modprobe.d
  • 1 Users Found This Useful
Was this answer helpful?

Related Articles

How can I configure a ip range in CentOS7?

You have to use a range file Edit /etc/sysconfig/network-scripts/ifcfg-enp0s3 and make...

Adding a Public IPv6 Address to a Linux Server (CentOS 7)

To configure an additional public IPv6 address in CentOS 7, proceed as follows:...

How To Install EPEL Repository On CentOS And RHEL 7

How to install EPEL for Centos 7 [root@localhost ~]# cat  /etc/centos-release CentOS Linux...

Common Commands (CentOS 7)

Basic Configuration Query or System Locale...

Install LAMP Stack on CentOS 7

Install LAMP Stack on CentOS 7 One of the most simple and barebones solutions you can have for...