What's the difference between insmod and modprobe?
Are there any differences between insmod and modprobe?
modprobe
reads the modules from /lib/modules/$(uname -r)/modules.dep.bin
(or without the .bin
suffix if the other file is not available). From the same file, dependencies are loaded.
modprobe
accepts the name of a .ko
file in /lib/modules/$(uname -r)
(e.g. nvidia-current
for the file dkms/nvidia-current.ko
) and aliases (modules.alias.bin
). Builtins (modules.alias.bin
) are recognized as well, but since these modules are loaded by default, there is not point in modprobing this kind of modules.
insmod
on the other hand accepts paths to files. The module does not have to reside in /lib/modules/$(uname -r)
, but dependencies are not automatically loaded. This is the lower program used by modprobe
to load modules.
Other programs related to modules are rmmod
and modinfo
.
rmmod
removes a kernel name based on the name from /proc/modules
. This name does not necessarily have to be the same as the one passed to modprobe
(for the nvidia-current
file, this is nvidia
for example).
modinfo
accepts a filename, or the filename without .ko
suffix in /lib/modules/$(uname -r)
.
Per man insmod
:
Most users will want to use modprobe instead, which is more clever and can handle module dependencies.
modprobe
is an intelligent command, it looks for dependencies while loading a module. Suppose, if I loaded a module, which has symbols defined in some other module (this module path is given inside the main module). So, modprobe
loads the main module and the dependent module.
But if insmod
is used, it won't load the dependency, and hence it will give compilation errors like Unresolved symbols
. In this case, we have to manually look for dependent module and need to load them in order to resolve the errors.