insmod 和 modprobe 之间有什么区别?
答案1
modprobe
从中读取模块/lib/modules/$(uname -r)/modules.dep.bin
(如果其他文件不可用,则不带后缀.bin
)。从同一个文件加载依赖项。
modprobe
.ko
接受文件名/lib/modules/$(uname -r)
(例如nvidia-current
文件dkms/nvidia-current.ko
) 和别名 ( modules.alias.bin
)。内置模块 ( modules.alias.bin
) 也可以识别,但由于这些模块是默认加载的,因此 modprobing 这类模块毫无意义。
insmod
另一方面,接受文件路径。模块不必驻留在 中/lib/modules/$(uname -r)
,但不会自动加载依赖项。这是用于modprobe
加载模块的下层程序。
与模块相关的其他程序有rmmod
和modinfo
。
rmmod
根据 中的名称删除内核名称/proc/modules
。此名称不必与传递给 的名称相同modprobe
(对于nvidia-current
文件,这是nvidia
示例)。
modinfo
.ko
接受文件名,或者不带后缀的文件名/lib/modules/$(uname -r)
。
答案2
每man insmod
:
大多数用户会选择使用 modprobe,因为它更加聪明,而且能够处理模块依赖关系。
答案3
modprobe
是一个智能命令,它在加载模块时查找依赖项。假设,如果我加载了一个模块,该模块有在其他模块中定义的符号(此模块路径在主模块内给出)。因此,modprobe
加载主模块和依赖模块。
但是如果insmod
使用,它不会加载依赖项,因此会给出编译错误,如Unresolved symbols
。在这种情况下,我们必须手动查找依赖模块并加载它们才能解决错误。
答案4
modprobe 命令提供的功能比更基本的 insmod 和 rmmod 实用程序更多。modprobe 可以智能地从 Linux 内核添加或删除模块。请注意,为方便起见,模块名称中的 _ 和 - 之间没有区别(会自动执行下划线转换)。modprobe 在模块目录 /lib/modules/ 中查找uname -r
所有模块和其他文件,但 /etc/modprobe.d 目录中的可选配置文件除外(某些发行版改用 /etc/modprobe.conf 文件)。