Loading a kernel module lets a running Linux system add driver or subsystem support without rebooting, which is useful when enabling hardware features, testing a storage or network component, or activating an optional kernel capability on demand.

Most distributions use the kmod toolset, where modprobe looks up the target module under /lib/modules for the running kernel, applies aliases and modprobe.d rules, and loads any dependencies recorded by depmod. That makes modprobe the normal entry point for routine module loads, while the kernel itself reports lower-level failures such as missing symbols, version mismatches, or signature rejection.

Loading a module requires administrative privileges, and the module must exist for the current kernel rather than just another kernel package installed on disk. Some systems also block runtime loading with kernel.modules_disabled=1, and Secure Boot or other signature-enforcing setups can reject unsigned external modules even when the file is present, so the safest workflow is to inspect the module first, load it, and verify that it actually became active.

Steps to load a kernel module with modprobe:

  1. Inspect the module metadata before loading it.
    $ modinfo dummy
    filename:       /lib/modules/6.8.0-90-generic/kernel/drivers/net/dummy.ko.zst
    alias:          rtnl-link-dummy
    description:    Dummy netdevice driver which discards all packets sent to it
    license:        GPL
    ##### snipped #####
    name:           dummy
    vermagic:       6.8.0-90-generic SMP preempt mod_unload modversions aarch64
    signer:         Build time autogenerated kernel key

    Replace dummy with the module you actually need. If modinfo says the module is not found, the feature may be unavailable for this kernel or built directly into the kernel instead of shipped as a separate loadable module.

  2. Preview the dependency-aware load plan before making the change.
    $ modprobe --dry-run --verbose dummy
    insmod /lib/modules/6.8.0-90-generic/kernel/drivers/net/dummy.ko.zst numdummies=0

    modprobe accepts a module name or alias, resolves dependencies automatically, and treats hyphens and underscores as equivalent in module names.

  3. Load the module after the dry run looks correct.
    $ sudo modprobe dummy

    A successful load is usually silent. If the module is already active, modprobe exits successfully without changing anything unless you add --first-time.

  4. Confirm that the kernel now shows the module as loaded.
    $ lsmod
    Module                  Size  Used by
    dummy                  12288  0
    bridge                421888  1 br_netfilter
    ##### snipped #####

    Look for the target module name in the first column. The second column is the module size, and the third is the usage count, which can stay at 0 until a device or another module starts using it.

  5. Review the kernel log when the module file exists but modprobe still returns an error.
    $ sudo dmesg
    ##### snipped #####
    [  412.391492] Lockdown: modprobe: Loading of unsigned module is restricted; see man kernel_lockdown.7
    ##### snipped #####

    Look for messages about unknown symbols, version magic mismatches, lockdown restrictions, or signature rejection. On systemd hosts you can use journalctl -k to read the same kernel log stream.