首页 > 编程知识 正文

modprobe卸载驱动,linux modprobe加载模块

时间:2023-05-04 14:52:41 阅读:259347 作者:1338

1、Linux驱动动态加载的两种方式
linux设备驱动的动态加载可以使用insmod或modprobe两种方式,insmod一次只能加载一个特定的驱动,且需要驱动的绝对路径,而modprobe则可以一次性将有依赖关系的驱动全部加载到内核,不需要驱动的具体地址。但需要将驱动拷贝到/lib/modules/$(uname -r)/目录下。
示例:

insmod XXX.ko
modprobe xxx.ko
1
2
2、modprobe加载驱动时的问题
modprobe xxx.ko

modprobe: can't change directory to '/lib/modules': No such file or directory
1
2
3
这里提示找不到/lib/modules目录,和前面介绍的一样,它需要在指定目录下加载ko。
解决:创建/lib/modules目录:

mkdir /lib/modules
1
重新执行上面的指令:

modprobe xxx.ko

modprobe: can't change directory to '4.4.194': No such file or directory
1
2
3
这里提示找不到4.4.194目录,它对应linux内核的名称,可以使用uname –r指令查询。
uname -r

4.4.194
1
2
3
解决:创建4.4.194目录

cd /lib/modules/
mkdir 4.4.194
1
2
重新执行加载命令:

modprobe xxx.ko

modprobe: can't open 'modules.dep': No such file or directory
1
2
3
这里提示找不到modules.dep文件。我们不需要手动创建该文件,使用depmod指令即可自动生成。
depmod

-sh: depmod: command not found
1
2
3
这里提示depmod指令找不到,这是因为默认情况下根文件系统不支持该指令,需要我们自己添加。
depmod可以通过配置busybox来添加这个功能。但是我们是用buildroot自动完成根文件系统的制作,busybox也随之自动生成,这时和一般的配置就有所区别了:
1、进入buildroot目录下,执行make menuconfig,发现第一栏有关于busybox的配置选项,如下图所示:
cd buildroot/
make menuconfig
1
2

可见,我们只需要配置完busybox后,保存到这里就可以了。在busybox的编译目录配置完成后,用busybox当前目录的配置文件.config替换掉package/busybox/busybox.config文件就可以了。

2、找到output下的busybox目录,我的是output/rockchip_rk1808/build/busybox-1.27.2/,进入目录并执行make menuconfig进行busybox的配置:
cd output/rockchip_rk1808/build/busybox-1.27.2/
make menuconfig
1
2


选中depmod,这里选中modinfo是为了后面方便查看ko的依赖关系,配置完成后,保存退出,然后将当前目录下的.config文件覆盖掉buildroot/package/busybox/busybox.config文件,之后重新编译buildroot,busybox将会自动更新并打包到文件系统镜像里面。

3、测试depmod
将最新的文件系统烧写到开发板后,我们就可以使用depmod指令了。在没有执行该指令时,在/lib/modules/ 4.4.194下是没有任何文件的,执行depmod命令后,该目录下将会生成三个文件:

modules.alias    modules.dep      modules.symbols
1
我们再尝试执行modprobe指令加载驱动:

modprobe xxx.ko

modprobe: module x4412-beep.ko not found in modules.dep
1
2
3
这里提示在modules.dep文件中没有发现我们加载的ko文件,我们尝试查看一下modules.dep的内容:

cat modules.dep
1
可见,里面的内容为空。实际上,depmod指令会自动分析/lib/modules/$(uname -r)目录下的可加载模块,并按照固定的格式填入modules.dep中。因此,我们可以先将需要加载的ko文件拷贝到对应的目录,再执行depmod指令就ok了。
————————————————

https://blog.csdn.net/GCQ19961204/article/details/108580049

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。