modprobe 和 insmod在linux下都用来加载模块,两者用法区别如下:
(1)insmod需指定所需加载模块的路径,且只加载所指定的模块,如果所指定的模块依赖于其他模块,insmod不会自动添加,insmod使用方法如下:insmod 某路径/xxx.ko
(2)modprobe相比较于insmod更加智能,使用modprob加载模块时只需指定模块名称而不是模块的路径,使用modprobe加载内核模块时,如果加载的模块依赖于其他模块,modprobe会自动加载被依赖的模块,比如我们需要加载模块A,但是模块A依赖于模块B,那么我们在使用modprobe加载内核模块A时,modprobe会先加载内核模块B,然后再加载内核模块A。使用方法如下:modprobe xxx
Q1:modprobe加载内核模块时只需指定模块名称而不需要路径,那modprobe是如何知道要加载的内核模块的路径的?
Q2:modprobe是如何判断加载模块时所加载的模块是否依赖其他模块的?
问题1: modprobe加载内核的文件必须位于/lib/modules/(shell uname -r)
目录下,也就是modprobe加载内核模块之所以不需要指定路径是因为modprobe命令有默认的加载路径。
问题2: modeprobe加载内核模块时依赖于/lib/modules/(shell uname -r)/modules.dep
文件,modules.dep文件中列举了modproe可加载的内核文件以及内核文件所依赖的文件。假如一个内核模块位于/lib/modules/(shell uname -r)
目录下,但是该模块未添加到modules.dep文件中,也无法通过modeprobe命令加载。那么问题来了,modules.dep文件是如何生成的?modules.dep文件通过depmode生成,如果往/lib/modules/(shell uname -r)
目录下放置一个新的内核模块XXX并且希望通过modprobe命令进行加载模块XXX,那么将内核模块XXX放到/lib/modules/(shell uname -r) 目录下后需运行depmode命令,然后再运行modeprobe XXX才能将内核模块加载成功,否则会报错: modeprobe XXX not found
。
depmod作用:
上面已经说过了,用于生成modprobe依赖的modules.dep。