Frequently Asked Question

What is a loadable kernel module and how does it differ from a built-in driver?

A loadable kernel module is a chunk of compiled kernel code packaged as a .ko file that can be inserted into a running kernel with insmod or modprobe and removed with rmmod. Once loaded, it lives in the same address space as the rest of the kernel, there's no isolation. Modules are how most device drivers, filesystems (ext4, btrfs, xfs), and network protocols ship.

A built-in driver is compiled directly into the kernel image (vmlinuz). It's always there, can't be removed, and is needed for anything required to boot before the module loader runs, for example the disk driver and filesystem your root partition lives on. You can see what's built-in vs modular by reading /boot/config-$(uname -r) and looking for =y (built-in) vs =m (module).

Further reading and video