小白自制Linux开发板番外篇一modprobe加载驱动问题(转载整理)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

⼩⽩⾃制Linux开发板番外篇⼀modprobe加载驱动问题(转载整
理)
使⽤modprobe加载驱动
前⾯我们提到,modprobe并不需要指定到具体的KO⽂件⽬录,我们不仿测试下:
[root@x4412 /]# modprobe x4412-beep.ko
modprobe: can't change directory to '/lib/modules': No such file or directory
[root@x4412 /]#
这⾥提⽰找不到/lib/modules⽬录,和前⾯介绍的⼀样,它需要在指定⽬录下加载KO,那我们不仿新建该⽬录,再执⾏上⾯的指令测试:
1 [root@x441
2 /]# mkdir /lib/modules
2 [root@x4412 /]# modprobe x4412-beep.ko
3modprobe: can't change directory to '3.0.15-9tripod': No such file or directory
4 [root@x4412 /]#
这⾥提⽰找不到3.0.15-9tripod⽬录,它对应linux内核的名称,可以使⽤uname–r指令查询。

我们继续新建⽬录,继续测试:
1 [root@x441
2 /]# uname -r
23.0.15-9tripod
3 [root@x4412 /]# mkdir /lib/modules/3.0.15-9tripod
4 [root@x4412 /]# modprobe x4412-beep.ko
5modprobe: can't open 'modules.dep': No such file or directory
6 [root@x4412 /]#
这时,提⽰找不到modules.dep⽂件。

我们不需要⼿动创建该⽂件,使⽤depmod指令即可⾃动⽣成。

很有可能默认情况下根⽂件系统不⽀持该指令,执⾏时会提⽰如下信息:
[root@x4412 modules]# depmod
-sh: depmod: command not found
[root@x4412 modules]#
可见,我们只需要配置完busybox 后,保存到这⾥就可以了。

有两种⽅法可以实现:
第⼀种就是在busybox 的编译⽬录配置完成后,⽤busybox 当前⽬录的配置⽂件.config 替换掉package/busybox/busybox.config ⽂件。

第⼆种就是配置完busybox 后,直接在buildroot 的配置选项中导⼊这个配置⽂件。

我们可以通过配置busybox来添加这个功能。

但是我们制作的根⽂件系统,是⽤buildroot⾃动完成的,busybox也随之⾃动⽣成,我们还能随⼼所欲的添加其他功能吗?答案是肯定的。

进⼊buildroot的menuconfig菜单,进⼊Target packages选项,发现第⼀栏有关于busybox的配置选项,如下图所⽰:
busybox 的编译⽬录在output/build/busybox-1.22.1 下,这⾥output 是编译之后才会释放的⽂件,⼿⼯配置busybox 后,配置⽂件也会保存在这个⽬录下,因此不推荐⽤第⼆种⽅法,它不便于源码维护。

下⾯介绍第⼀种⽅法。

进⼊output/build/busybox-1.22.1 ⽬录,执⾏make menuconfig ,进⼊Linux Module Utilities 菜单,如下图所⽰:
选中insmod,rmmod,lsmod,modprobe,depmod,保存退出,然后将当前⽬录下的.config⽂件覆盖掉package\busybox\busybox.config⽂件,之后在buildroot根⽬录下执⾏make指令重新编译,busybox将会⾃动更新,并最终打包到映像⽂件rootfs.ext4中。

将开发板更新最新的⽂件系统后,我们就可以使⽤depmod 指令了。

在没有执⾏该指令时,在/lib/modules/ 3.0.15-9tripod 下是没有任何⽂件的,执⾏depmod 命令后,该⽬录下将会⽣成三个⽂件:
1 [root@x441
2 /]# ls /lib/modules/3.0.15-9tripod/
2 [root@x4412 /]# depmod
3 [root@x4412 /]# ls /lib/modules/3.0.15-9tripod/
4 modules.alias modules.dep modules.symbols
5 [root@x4412 /]#
我们再尝试执⾏modprobe指令加载驱动:
1 [root@x441
2 /]# modprobe x4412-beep.ko
2modprobe: module x4412-beep.ko not found in modules.dep
3 [root@x4412 /]#
这⾥提⽰在modules.dep⽂件中没有发现我们加载的ko⽂件,我们尝试查看⼀下modules.dep的内容:
1 [root@x441
2 /]# cd /lib/modules/3.0.15-9tripod/
2 [root@x4412 3.0.15-9tripod]# more modules.dep
3 [root@x4412 3.0.15-9tripod]#
可见,⾥⾯的内容为空。

实际上,depmod指令会⾃动分析/lib/modules/$(uname -r)⽬录下的可加载模块,并按照固定的格式填⼊modules.dep中。

因此,我们可以先将需要加载的ko⽂件拷贝到对应的⽬录,再执⾏depmod指令。

1 [root@x441
2 3.0.15-9tripod]# pwd
2 /lib/modules/3.0.15-9tripod
3 [root@x4412 3.0.15-9tripod]# cp /mnt/x4412-beep.ko .
4 [root@x4412 3.0.15-9tripod]# depmod
5 [root@x4412 3.0.15-9tripod]# more modules.dep
6 x4412-beep.ko:
7 [root@x4412 3.0.15-9tripod]#
可以看到,在modules.dep中已经存在有我们需要加载的ko⽂件名了。

注意,不要⼿⼯的去编辑modules.dep⽂件!再执⾏modprobe指令,即可加载模块了。

1 [root@x441
2 3.0.15-9tripod]# modprobe x4412-beep.ko
2 [ 2029.489772] x4412 beep driver
3 [root@x4412 3.0.15-9tripod]#。

相关文档
最新文档