问题描述
insmod和modprobe之间有什么区别吗?
最佳回答
根据man insmod
:
Most users will want to use modprobe instead, which is more clever and can handle module dependencies.
次佳回答
modprobe
从/lib/modules/$(uname -r)/modules.dep.bin
读取模块(如果其他文件不可用,则不带.bin
后缀)。从同一个文件中加载依赖项。
modprobe
接受/lib/modules/$(uname -r)
中的.ko
文件的名称(例如,文件dkms/nvidia-current.ko
的nvidia-current
)和别名(modules.alias.bin
)。内置(modules.alias.bin
)也可以识别,但是由于默认情况下加载了这些模块,因此对此类模块进行调制探测没有意义。
另一方面,insmod
接受文件路径。该模块不必驻留在/lib/modules/$(uname -r)
中,但是不会自动加载依赖项。这是modprobe
用于加载模块的较低程序。
与模块相关的其他程序是rmmod
和modinfo
。
rmmod
从/proc/modules
中删除基于该名称的内核名称。此名称不必与传递给modprobe
的名称相同(对于nvidia-current
文件,例如,这是nvidia
)。
modinfo
接受文件名,或/lib/modules/$(uname -r)
中不带.ko
后缀的文件名。
第三种回答
modprobe
是一个智能命令,它在加载模块时查找依赖项。假设,如果我加载了一个模块,该模块具有在其他模块中定义的符号(此模块路径在主模块内部给出)。因此,modprobe
加载主模块和从属模块。
但是,如果使用insmod
,则不会加载依赖项,因此会产生类似于Unresolved symbols
的编译错误。在这种情况下,我们必须手动查找相关模块并需要加载它们以解决错误。