insmod和modprobe有什么区别?

我知道insmodmodprobe是用来插入模块到内核。 但是,它们之间有什么区别呢?

而且,为什么在modprobe中插入带有force选项的模块是危险的?

modprobeinsmod的智能版本。 insmod只是添加一个模块, modprobe寻找任何依赖(如果该特定模块依赖于任何其他模块)并加载它们。

关于--force选项,这里是从手册页引用:

  Try to strip any versioning information from the module which might otherwise stop it from loading: this is the same as using both --force-vermagic and --force-modversion. Naturally, these checks are there for your protection, so using this option is dangerous unless you know what you are doing. 

这表明它被用来跳过内核模块版本检查。 如果你做自己的内核模块或任何信任方,不应该有任何问题。 但是你应该知道你在做什么。

如果您信任Linux手册页isnmod。

大多数用户会想要使用modprobe,而这更聪明,可以处理模块依赖。

insmod :用于加载模块
modprobe :和insmod很像,也加载模块需要加载的其他模块。
尽管从当前目录加载自己的模块时仍然需要insmod,因为modprobe只能在标准的已安装模块目录中查找。
参考: https : //lwn.net/coreel/LDD3/

modprobe在加载模块时查找依赖关系。 假设,如果我加载了一个模块,其中有一些其他模块定义的符号(这个模块路径在主模块内部给出)。 所以,modprobe加载主模块和从属模块。

但如果你正在使用insmod来加载,它将不会加载依赖,因此它会给出像未解决符号的编译错误。 在这种情况下,我们必须手动查找相关模块,并且需要加载它们才能解决错误。