insmod和modprobe有什么区别?


Answers:


28

man insmod

大多数用户将改为使用modprobe,它更聪明并且可以处理模块依赖性。


2
抱歉,错过了那条线。
NES

39

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)也可以识别,但是由于默认情况下会加载这些模块,因此对此类模块进行调制探测没有意义。

insmod另一方面接受文件的路径。该模块不必驻留在中/lib/modules/$(uname -r),但是依赖关系不会自动加载。这是用于modprobe加载模块的较低程序。

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

rmmod从中删除基于内核名称的名称/proc/modules。此名称不必与传递给的名称相同modprobe(例如nvidia-current,对于文件nvidia)。

modinfo接受一个文件名,或不带.ko后缀的文件名/lib/modules/$(uname -r)


3

modprobe是一个智能命令,它在加载模块时查找依赖项。假设,如果我加载了一个模块,该模块具有在其他模块中定义的符号(此模块路径在主模块内部给出)。因此,modprobe加载主模块和从属模块。

但是,如果insmod使用,它将不会加载依赖项,因此会产生类似的编译错误Unresolved symbols。在这种情况下,我们必须手动查找相关模块并需要加载它们以解决错误。


0

值得一提的是modprobe实用程序。像insmod一样,modprobe将模块加载到内核中。区别在于它将查看要加载的模块,以查看其是否引用了内核中当前未定义的任何符号。如果找到任何此类引用,modprobe会在当前模块搜索路径中查找定义相关符号的其他模块。当modprobe找到那些模块(正在加载的模块所需)时,它也会将它们也加载到内核中。如果在这种情况下使用insmod,则该命令将失败,并在系统日志文件中留下“未解析的符号”消息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.