insmod 和 modprobe 有什么区别?

insmod 和 modprobe 有什么区别?

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加载模块的下层程序。

与模块相关的其他程序有rmmodmodinfo

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 文件)。

了解更多

相关内容