Linux Modules
I will explore what a Linux module is, the differences between system modules and user modules, and some of the other commands related to Linux module configurations and options.
Examples, scenarios and EXAM AND ANSWERS at end
What is a Linux Module?
In
Linux, a module is a small piece of code that can be dynamically loaded
and unloaded from the running kernel. Modules are used to extend the
functionality of the kernel without the need to recompile and rebuild
the entire kernel.
The modprobe command is used to manage the
loading and unloading of these kernel modules. When you run modprobe
<module_name>, it will search for the module file in the
/lib/modules directory, load the module into the kernel, and set up any
dependencies that the module may have.
Modules can also be loaded
automatically during the boot process by configuring the /etc/modules
file or by creating a custom script in the /etc/modules-load.d/
directory.
Modules
are used to add support for new hardware, add new file systems, or
provide additional functionality to the kernel. Modules can be loaded at
runtime using the modprobe command or during system boot by adding them
to the /etc/modules file or creating a custom script in the
/etc/modules-load.d/ directory.
System Modules vs. User Modules
There are two types of modules in Linux: system modules and user modules.
System
modules are part of the Linux kernel and are loaded automatically
during the boot process. These modules are typically included in the
kernel source code and compiled into the kernel image. System modules
are essential to the functioning of the operating system and provide
support for critical system components, such as device drivers, file
systems, and networking protocols.
User modules, on the other
hand, are not part of the kernel and are loaded by users or system
administrators to add new functionality to the system. User modules are
typically stored in the /lib/modules/<kernel-version>/extra/
directory and are loaded using the modprobe command. User modules can be
written in C or any other programming language that supports the Linux
kernel's programming interface.
Linux Module Configurations and Options
Here are some other Linux commands related to module configurations and options:
- modinfo: This command is used to display information about a module, such as its author, description, and dependencies. To use this command, simply type modinfo <module-name> in the terminal.
- lsmod: This command is used to list all currently loaded modules. It provides information about the module name, size, and usage count. To use this command, simply type lsmod in the terminal.
- insmod: This command is used to insert a module into the kernel. This command should only be used for testing purposes, as it does not handle module dependencies. To use this command, simply type insmod <module-name> in the terminal.
- rmmod: This command is used to remove a module from the kernel. This command will handle dependencies and ensure that all modules that depend on the module being removed are also unloaded. To use this command, simply type rmmod <module-name> in the terminal.
- mknod: This command is used to create device nodes for use by the kernel. Device nodes are used by device drivers to communicate with the system. To use this command, simply type mknod <device-name> <device-type> <device-number> in the terminal.
Fedora vrs Ubuntu Differences
While
both Fedora and Ubuntu are Linux-based operating systems, there may be
some differences in the management of Linux modules between the two.
One
significant difference is in the package management system used by each
distribution. Fedora uses the DNF package manager, while Ubuntu uses
APT. These package managers have different ways of handling modules.
For
example, in Fedora, kernel modules are stored in the /usr/lib/modules
directory, while in Ubuntu, they are stored in the /lib/modules
directory. Additionally, Fedora uses the dracut tool to create initramfs images that include the necessary modules for booting, while Ubuntu uses update-initramfs.
Another
difference is in how kernel updates are handled. In Fedora, kernel
updates are installed as separate packages, which can include updated
modules. In contrast, Ubuntu installs the entire kernel as a package,
which includes all the necessary modules.
- Kernel versions: Fedora tends to use newer kernel versions than Ubuntu, which can affect the availability and compatibility of certain modules. Fedora typically updates its kernel more frequently, while Ubuntu focuses on long-term stability.
- Default modules: Fedora and Ubuntu have different sets of default modules that are built into the kernel. This can affect the availability of certain features and hardware support out of the box.
- Third-party modules: Fedora and Ubuntu have different policies regarding third-party modules. Fedora is more strict and may not allow the installation of certain modules that are not compatible with its kernel or licensing policies. Ubuntu, on the other hand, may allow the installation of third-party modules through its package manager.
- Configuration files: Fedora and Ubuntu may use different configuration files for modules, which can affect how modules are loaded and configured. For example, Fedora uses dracut.conf for configuring initramfs images, while Ubuntu uses update-initramfs.conf.
- Debugging tools: Fedora and Ubuntu may offer different tools for debugging kernel modules and related issues. Fedora includes the systemtap tool for dynamic tracing and profiling, while Ubuntu includes the apport tool for reporting system errors.
While Fedora and Ubuntu have many similarities when it comes to managing Linux modules, there are some differences in kernel versions, default modules, third-party module policies, configuration files, and debugging tools that can affect the experience of users and system administrators.
However, despite these differences, the basic concepts and commands for managing Linux modules are the same in both Fedora and Ubuntu. Both distributions use the modprobe command to load and unload modules, and other commands like lsmod and modinfo are also available on both systems.
modinfo examples
Scenario:
Suppose you are a Linux system administrator and you need to troubleshoot an issue with a specific module that is not working properly. You can use the "modinfo" command to display information about the module, including its version, author, description, and other details. Additionally, you can use the "modinfo -F depends <module_name>" command to display the dependencies of the module, and the "modinfo -p <module_name>" command to display the parameters that can be passed to the module when it is loaded using the modprobe command. This information can be helpful in diagnosing and resolving the issue with the module.
1. Basic usage
modinfo <module_name>
This
command displays information about the specified kernel module,
including the module name, version, author, description, and other
details.
2. List all loaded modules
modinfo -a
This command lists information about all currently loaded kernel modules.
3. List module dependencies
modinfo -F depends <module_name>
This
command displays the dependencies of the specified kernel module,
including other modules that must be loaded before the module can
function properly.
4. Show module parameters
modinfo -p <module_name>
This
command displays the parameters that can be passed to the specified
kernel module when it is loaded using the modprobe command.
5. Show module license
modinfo -c <module_name>
This command displays the license under which the specified kernel module is distributed.
6. Show module aliases
modinfo -k <kernel_version> -a
This
command displays a list of module aliases for the specified kernel
version. Module aliases are used to automatically load modules when
certain hardware or software is detected.
lsmod examples
The lsmod command is a useful tool for viewing information about currently loaded kernel modules in Linux, including their sizes, dependencies, usage counts, and authors. By using these options, you can gain a better understanding of the modules that are currently loaded and how they interact with each other.
1. Basic usage
This command displays a list of all currently loaded kernel modules, along with information about their usage count, dependencies, and other details.
2. Show module size
This command displays the size of each loaded kernel module in kilobytes.
3. Sort by module size
This command sorts the list of loaded kernel modules by their size, with the smallest modules appearing first.
4. Show module dependencies
This command displays information about the dependencies of the specified kernel module, including other modules that must be loaded before the module can function properly.
5. Show module usage count
This command displays the usage count of each loaded kernel module, sorted in ascending order. The usage count represents the number of references to the module by other parts of the kernel or user-space programs.
6. Show module owner
This command displays the author of each loaded kernel module.
insmod examples
1. Basic usage
This command loads the specified kernel module into memory.
2. Load module with parameter
This command loads the specified kernel module into memory and passes the specified parameter to it. The parameter must be defined in the module's source code and accepted by its initialization function.
3. Load module from specific path
4. Load module and show debug messages
This command loads the specified kernel module into memory and displays debug messages during the loading process.
5. Load module with force option
This command loads the specified kernel module into memory even if it has unresolved symbols or mismatched versions. Use this option with caution, as it can potentially cause system instability.
6. Load module with vermagic check disabled
This command loads the specified kernel module into memory even if its version string does not match the version of the running kernel. This can be useful for testing or debugging purposes, but it should not be used in production systems.
rmod examples
1. Basic usage
rmmod <module_name>This command unloads the specified kernel module from memory.
2. Force unload module
rmmod -f <module_name>This command forcibly unloads the specified kernel module from memory, even if it is in use by other processes. Use this option with caution, as it can potentially cause system instability.
3. Remove module and its dependencies
This command unloads the specified kernel module from memory and any other modules that depend on it. Use this option with caution, as it can potentially cause other parts of the system to malfunction if they depend on the unloaded module.
4. Show debug messages during unloading
This command unloads the specified kernel module from memory and displays debug messages during the unloading process.
5. Remove multiple modules
This command unloads multiple kernel modules from memory at the same time.
6. Remove module with specific options
This command unloads the specified kernel module from memory and passes a parameter to its cleanup function. The parameter must be defined in the module's source code and accepted by its cleanup function.
mknod examples
1. Create a block device
This command creates a block device file with the specified name (<device_file>) and major and minor device numbers (<major_number> and <minor_number>). Block devices are typically used to represent devices that can store large amounts of data, such as hard drives.
2. Create a character device
This command creates a character device file with the specified name (<device_file>) and major and minor device numbers (<major_number> and <minor_number>). Character devices are typically used to represent devices that provide or consume streams of data, such as serial ports or network interfaces.
3. Create a named pipe (FIFO)
This command creates a named pipe (FIFO) with the specified name (<fifo_file>). Named pipes are typically used for interprocess communication between two or more processes.
3. Create a Unix domain socket
mknod <socket_file> sThis command creates a Unix domain socket with the specified name (<socket_file>). Unix domain sockets are used for interprocess communication between two or more processes running on the same system.
4. Set permissions for device file
modprobe examples
You have installed a new hardware device on your system, and you need to load the corresponding kernel module. You can use the modprobe command with the module name to load the module into the Linux kernel.
Scenario 2:
You want to configure the behavior of a kernel module. Many modules have options that can be set to control their behavior. You can use the modprobe command with the module name and the options to load the module and set its behavior options.
Scenario 3:
You need to remove a kernel module from the Linux kernel along with its dependencies. You can use the modprobe command with the -r option and the module name to unload the module and its dependencies.
Scenario 4:
You want to check which kernel modules are currently loaded into the Linux kernel. You can use the modprobe command with the -l option to list all loaded modules.
Scenario 5:
You want to get more information about a kernel module, such as its dependencies or its options. You can use the modprobe command with the -D option and the module name to show information about the module.
1. Load a module:
modprobe <module_name>
This
command loads the specified kernel module into the Linux kernel. If the
module is not already loaded, modprobe will search for the module in
the standard kernel module directories and load it if it is found.
2. Remove a module:
modprobe -r <module_name>
This
command removes the specified kernel module from the Linux kernel. If
the module is currently in use, modprobe will first attempt to unload
any dependencies of the module before unloading the module itself.
3. Load a module and set options:
modprobe <module_name> <option1>=<value1> <option2>=<value2> ...
This command loads the specified kernel module and sets one or more options for the module. Kernel modules can define their own options, which can be used to control the behavior of the module. The format for setting options is option_name=value.
4. Show loaded modules:
modprobe -l
- same as (lsmod)
This command lists all of the kernel modules that are currently loaded into the Linux kernel.
5. Show information about a module:
modprobe -D <module_name>
This
command shows detailed information about the specified kernel module,
including its dependencies and any options that can be set for the
module.
BEGIN QUIZ - ANSWERS BELOW
1. What command can be used to display information about a specified kernel module?
a. modload
b. modprob
c. modinfo
d. modunload
2. Which command can be used to list information about all currently loaded kernel modules?
a. modprobe -l
b. modinfo -a
c. modunload -l
d. modload -a
3. The "modinfo -F depends <module_name>" command displays the ___________ of the specified kernel module, including other modules that must be loaded before the module can function properly.
4. The "modinfo -p <module_name>" command displays the ___________ that can be passed to the specified kernel module when it is loaded using the modprobe command.
5. Which command
displays a list of all currently loaded kernel modules, along with
information about their usage count, dependencies, and other details?
A) modinfo
B) lsmod
C) modprobe
D) insmod
6. The command "lsmod | awk '{print $1, $2, $NF}'" displays the _________ of each loaded kernel module in kilobytes.
7. Which command sorts the list of loaded kernel modules by their size, with the smallest modules appearing first?
A) lsmod | awk '{print $1, $2, $NF}'
B) lsmod | grep <module_name>
C) lsmod | sort -n -k 2
D) lsmod | awk '{print $1, $NF}' | sort -k 2 -n
8. The command "lsmod | grep <module_name>" displays information about the _________ of the specified kernel module, including other modules that must be loaded before the module can function properly.
9. Which command displays the usage count of each loaded kernel module, sorted in ascending order?
A) lsmod | awk '{print $1, $2, $NF}'
B) lsmod | grep <module_name>
C) lsmod | sort -n -k 2
D) lsmod | awk '{print $1, $NF}' | sort -k 2 -n
10. The command "lsmod | awk '{print $1, $NF}' | xargs modinfo | grep ^author:" displays the _________ of each loaded kernel module.
a) modprobe <module_name>
b) rmmod <module_name>
c) insmod <module_name>
d) lsmod <module_name>
a) modprobe /path/to/module.ko
c) insmod /path/to/module.ko
d) lsmod /path/to/module.ko
a) insmod <module_name> <parameter_name>=<parameter_value>
b) modprobe <module_name> <parameter_name>=<parameter_value>
d) lsmod <module_name> <parameter_name>=<parameter_value>
a) It loads a kernel module into memory.
b) It unloads a kernel module from memory.
c) It displays information about a kernel module.
d) It lists all currently loaded kernel modules.
a) It forcibly loads a kernel module into memory.
b) It forcibly unloads a kernel module from memory, even if it is in use by other processes.
c) It displays debug messages during the unloading process.
d) It unloads the specified kernel module from memory and any other modules that depend on it.
a) It forcibly loads a kernel module into memory.
b) It forcibly unloads a kernel module from memory, even if it is in use by other processes.
c) It unloads the specified kernel module from memory and any other modules that depend on it.
d) It displays debug messages during the unloading process.
24. What option in the rmmod command can be used to forcibly unload a kernel module from memory, even if it is in use by other processes?
25. What option in the rmmod command can be used to unload the specified kernel module from memory and any other modules that depend on it?
26. Which of the following devices is typically used to represent devices that can store large amounts of data?a. Block device
b. Character device
c. Named pipe
d. Unix domain socket
a. Block device
b. Character device
c. Named pipe
d. Unix domain socket
29. The mknod command with the "s" option is used to create a ________.
30. The -m option is used to specify the ________ in octal format when creating a device file using the mknod command.
31. What does the modprobe command do?A) Loads a kernel module into the Linux kernel
B) Removes a kernel module from the Linux kernel
C) Lists all loaded kernel modules
D) All of the above
A) modprobe -l
B) modprobe -r
C) modprobe -D
D) None of the above
A) To list all loaded kernel modules
B) To remove a kernel module from the Linux kernel
C) To load a kernel module and set its behavior options
D) To show information about a module
36. The modprobe command with the -r option is used to unload a kernel module along with its ___________.
37. The modprobe command with the -l option is used to __________ all loaded kernel modules.
38. The modprobe command with the -D option is used to show ___________ about a module.
ANSWERS
1. Answer: c. modinfo
Explanation:
The "modinfo" command is used to display information about a specified
kernel module, including the module name, version, author, description,
and other details.
2. Answer: b. modinfo -a
Explanation: The "modinfo -a" command lists information about all currently loaded kernel modules.
3. Answer: dependencies
Explanation: The "modinfo -F depends <module_name>" command displays the dependencies of the specified kernel module.
4. Answer: parameters
Explanation:
The "modinfo -p <module_name>" command displays the parameters
that can be passed to the specified kernel module when it is loaded
using the modprobe command.
5. Answer: B) lsmod
Explanation:
The lsmod command displays a list of all currently loaded kernel
modules, along with information about their usage count, dependencies,
and other details.
6. Answer: size
Explanation: The command "lsmod | awk '{print $1, $2, $NF}'" displays the size of each loaded kernel module in kilobytes.
7. Answer: C) lsmod | sort -n -k 2
Explanation:
The command "lsmod | sort -n -k 2" sorts the list of loaded kernel
modules by their size, with the smallest modules appearing first.
8. Answer: dependencies
Explanation:
The command "lsmod | grep <module_name>" displays information
about the dependencies of the specified kernel module, including other
modules that must be loaded before the module can function properly.
9. Answer: D) lsmod | awk '{print $1, $NF}' | sort -k 2 -n
Explanation:
The command "lsmod | awk '{print $1, $NF}' | sort -k 2 -n" displays the
usage count of each loaded kernel module, sorted in ascending order.
10. Answer: author
Explanation:
The command "lsmod | awk '{print $1, $NF}' | xargs modinfo | grep
^author:" displays the author of each loaded kernel module.
11. Answer: c) insmod <module_name>
12. Answer: c) insmod /path/to/module.ko
13. Answer: a) insmod <module_name> <parameter_name>=<parameter_value>
14. Answer: memory.
15. Answer: parameter.
16. Answer: path.
17. Answer: debug.
18. Answer: unresolved.
19. Answer: vermagic.
20. Answer: b) It unloads a kernel module from memory.
21. Answer: b) It forcibly unloads a kernel module from memory, even if it is in use by other processes.
22. Answer: c) It unloads the specified kernel module from memory and any other modules that depend on it.
23. Answer: rmmod
24. Answer: -f
25. Answer: -r
26. Answer: a. Block device
Explanation:
The mknod command with the "b" option is used to create a block device
file that represents devices that can store large amounts of data, such
as hard drives.
27. Answer: b. Character device
Explanation:
The mknod command with the "c" option is used to create a character
device file that represents devices that provide or consume streams of
data, such as serial ports or network interfaces.
28. Answer: named pipe (FIFO)
Explanation:
Named pipes are created using the mknod command with the "p" option.
They are typically used for interprocess communication between two or
more processes.
29. Answer: Unix domain socket
Explanation:
Unix domain sockets are created using the mknod command with the "s"
option. They are used for interprocess communication between two or more
processes running on the same system.
30. Answer: permissions
Explanation:
The -m option is used to specify the permissions in octal format (e.g.,
0666 for read and write permissions for all users) when creating a
device file using the mknod command.
31. Answer: A
32. Answer: B
33. Answer: C
34. Answer: Load
35. Answer: Options
36. Answer: Dependencies
37. Answer: List
38. Answer: Information