Classic Scenario: “Invisible” Devices After Plugging In
You’ve just added a 10Gbps network card or a specialized hard drive to your Ubuntu server. You confidently type ip a or lsblk, but the screen returns a big fat zero. Don’t jump to the conclusion that the hardware is broken. It’s very likely that Linux has recognized the device but doesn’t know which “translator” to use for communication.
Years ago, I stayed up all night just to debug a flickering Realtek Wifi card. It turned out the system loaded an old driver that caused a conflict. Instead of reinstalling the entire OS for 2 hours, I only needed 30 seconds to fix it if I had known how to control Kernel Modules. This is a survival skill that will save you hours of wasted time.
Kernel Modules: Why Not Load All Drivers at Once?
The Linux Kernel is built on a “monolithic” architecture but remains incredibly flexible thanks to the Loadable Kernel Modules (LKM) mechanism. Imagine if Linux pre-loaded drivers for every type of webcam, graphics card, or printer in the world; the kernel file would balloon to gigabytes and devour all your RAM right at boot.
This mechanism is like a multi-tool kit. Normally, you only carry pliers and a screwdriver. When you need to drill into a wall, you attach the drill bit. Modules (typically with the .ko extension – Kernel Object) are those drill bits: they are only loaded into memory when the system actually needs them and can be removed immediately to free up RAM.
The “Power Tools” for Controlling the Kernel
To interact with the kernel, Sysadmins typically use the kmod toolset. Here are the most practical commands.
1. lsmod – Inspecting Running Modules
To see what the system is currently loading, use lsmod. This command essentially reads data from the virtual file /proc/modules.
lsmod | grep -i nvidia
The Used by column is the most important. If the count is 0, you can safely remove that module. If it’s being occupied by another module, you must remove that “follower” first.
2. modinfo – Looking up Module Details
Don’t load strange modules without knowing what they are. Suppose you want to check the Intel e1000e network card driver:
modinfo e1000e
The results will show you the version, author, and especially the parameters (parm). Many driver bugs disappear just by changing a small parameter in this parm line.
3. modprobe – The “Conductor” for Loading and Removing Drivers
Forget the old insmod command. modprobe is the smarter choice because it automatically resolves dependencies. If module A needs module B to run, modprobe will load both automatically.
- Load module:
sudo modprobe wireguard - Remove module:
sudo modprobe -r wireguard
Pro tip: If you can’t remove it, check if any process is hanging or using that hardware with the lsof command.
Permanent Configuration: No Fear of Losing Changes After Reboot
Any changes made with the modprobe command will vanish when you reboot. To make them “carved in stone,” you need to modify system files.
Automatically Loading Modules at Boot
Instead of editing the legacy /etc/modules file, the modern way is to create a separate file in /etc/modules-load.d/. For example, to load the nbd driver:
echo "nbd" | sudo tee /etc/modules-load.d/nbd.conf
Blacklist – Banning Buggy Drivers
This is a classic technique when installing NVIDIA GPUs on Ubuntu. The open-source nouveau driver often auto-loads and blocks the official driver. To ban it:
# Create blacklist file
sudo nano /etc/modprobe.d/blacklist-nouveau.conf
# File content
blacklist nouveau
options nouveau modeset=0
# Update the kernel initramfs (Mandatory)
sudo update-initramfs -u
4-Step Rapid Driver Troubleshooting Process
When a device is plugged in but doesn’t work, stay calm and follow these steps:
- Check kernel logs: Type
dmesg -T | tail -n 20to see the most recent errors. - Identify hardware ID: Use
lspci -nnorlsusb. A number like8086:15d8is the exact identifier needed to find drivers on Google. - Try manual loading: Use
modprobeto check if the driver is compatible. - Persist configuration: Add it to
/etc/modprobe.d/once everything is stable.
Understanding Kernel Modules helps you lose the fear of working with Linux hardware. Think of the Kernel like a set of Lego bricks: you have the power to add, remove, or change any piece to achieve the highest performance.

