Kernel Modules

Kernel modules are object files that contain code to extend the kernel of operating system. Kernel modules are used to add support for new hardware and/or filesystems, or for adding system calls. Modules can be built into the kernel or compiled as loadable kernel modules.

Compile-in-kernel modules vs Loadable kernel modules (LKMs)
This page is meant to help picking between compile-in-kernel ("<*>") and compile-as-module ("") when configuring a kernel.

Advantages
A module
 * Is loadable without reboot (at least most of them).
 * Results in smaller kernel memory footprint (when the module is not loaded).
 * Can be loaded on demand by udev (for example DVB drivers for DVB stick).
 * Allows easy reloading of kernel drivers in case of module crash.
 * Allows specifying module-specific parameters in

Drawbacks
Using a module
 * May require an update of the initramfs for modules needed early in the boot process (i.e. filesystem drivers).
 * May result in performance losses due to the addition of an API layer and slightly more memory usage.

Also:
 * Beware of file system module X located on a partition formatted with X (unbootable system at worst).

Loadable Kernel Modules
Loadable modules can be defined in the file in order to load modules to the kernel during the init process.

A module can be load or unload manually by the modprobe command. For example, to unload the nvidia and load the nouveau module, run:

To list currently loaded modules, run lsmod.