modprobe则可以一次性将有依赖关系的驱动全部加载到内核,不需要驱动的具体地址。但需要将驱动拷贝到/lib/modules/$(uname -r)/目录下。modprobe并不需要指定到具体的KO文件目录,我们不仿测试下:
[root@x4412 /]# modprobe x4412-beep.komodprobe: can’t change directory to ‘/lib/modules’: No such file or directory[root@x4412 /]#
这里提示找不到/lib/modules目录,和前面介绍的一样,它需要在指定目录下加载KO,那我们不仿新建该目录,再执行上面的指令测试:
[root@x4412 /]# mkdir /lib/modules[root@x4412 /]# modprobe x4412-beep.komodprobe: can’t change directory to ‘3.0.15-9tripod’: No such file or directory[root@x4412 /]#
这里提示找不到3.0.15-9tripod目录,它对应linux内核的名称,可以使用uname–r指令查询。我们继续新建目录,继续测试:
[root@x4412 /]# uname -r3.0.15-9tripod[root@x4412 /]# mkdir /lib/modules/3.0.15-9tripod[root@x4412 /]# modprobe x4412-beep.komodprobe: can’t open ‘modules.dep’: No such file or directory[root@x4412 /]#
这时,提示找不到modules.dep文件。我们不需要手动创建该文件,使用depmod指令即可自动生成。在没有执行该指令时,在/lib/modules/ 3.0.15-9tripod下是没有任何文件的,执行depmod命令后,该目录下将会生成三个文件:
[root@x4412 /]# ls /lib/modules/3.0.15-9tripod/[root@x4412 /]# depmod[root@x4412 /]# ls /lib/modules/3.0.15-9tripod/modules.alias modules.dep modules.symbols[root@x4412 /]#
我们再尝试执行modprobe指令加载驱动:
[root@x4412 /]# modprobe x4412-beep.komodprobe: module x4412-beep.ko not found in modules.dep[root@x4412 /]#
这里提示在modules.dep文件中没有发现我们加载的ko文件,我们尝试查看一下modules.dep的内容:
[root@x4412 /]# cd /lib/modules/3.0.15-9tripod/[root@x4412 3.0.15-9tripod]# more modules.dep[root@x4412 3.0.15-9tripod]#
可见,里面的内容为空。实际上,depmod指令会自动分析/lib/modules/$(uname -r)目录下的可加载模块,并按照固定的格式填入modules.dep中。因此,我们可以先将需要加载的ko文件拷贝到对应的目录,再执行depmod指令。
[root@x4412 3.0.15-9tripod]# pwd /lib/modules/3.0.15-9tripod[root@x4412 3.0.15-9tripod]# cp /mnt/x4412-beep.ko .[root@x4412 3.0.15-9tripod]# depmod[root@x4412 3.0.15-9tripod]# more modules.depx4412-beep.ko:[root@x4412 3.0.15-9tripod]#
可以看到,在modules.dep中已经存在有我们需要加载的ko文件名了。注意,不要手工的去编辑modules.dep文件!再执行modprobe指令,即可加载模块了。
[root@x4412 3.0.15-9tripod]# modprobe x4412-beep.ko[ 2029.489772] x4412 beep driver[root@x4412 3.0.15-9tripod]#
原文链接:https://blog.csdn.net/armeasy/article/details/39621265