modprobe 加载驱动问题

在 Linux 系统中,驱动加载方式分为两种:静态加载和动态加载。静态加载就是把驱动程序放进内核一起编译,系统启动后之间被调用。静态加载的缺点就是调试困难,一般都是驱动程序调试稳定后再将其放进内核一起编译。动态加载是利用 Linux 的 module 特性,可以再系统启动后使用 insmod 命令或 modprobe 命令把驱动程序(.ko 文件)手动添加进内核。

insmod

insmod 加载模块时,需要指定完整的路径和模块名字,一般是在模块当前路径直接加载。不会自动处理模块的依赖关系,如果当前加载的模块依赖其他模块,则会报错,需要手动加载这些依赖模块。

modprobe

modprobe 加载模块时,不需要指定路径,它会到默认目录下例如: /lib/modules/$(uname -r)/ 进行查找模块。可以自动加载所需要的依赖模块。

根文件系统是新的话,可能没有这个默认目录,我们使用 modprobe 加载时会提示:

1
2
/24_gt911 # modprobe gt911.ko
modprobe: can't change directory to '/lib/modules': No such file or directory

创建目录再次运行提示:

1
2
3
/24_gt911 # mkdir /lib/modules
/24_gt911 # modprobe gt911.ko
modprobe: can't change directory to '4.9.88': No such file or directory

这个目录对应内核的版本,再次创建目录:

1
2
3
/24_gt911 # mkdir /lib/modules/4.9.88
/24_gt911 # modprobe gt911.ko
modprobe: can't open 'modules.dep': No such file or directory

提示找不到 modules.dep 文件,这时不用手动创建该文件,使用 depmod 命令即可自动生成:

1
2
3
/24_gt911 # depmod
/24_gt911 # ls /lib/modules/4.9.88/
modules.alias modules.dep modules.symbols

再次加载出现:

1
2
/24_gt911 # modprobe gt911.ko
modprobe: module gt911.ko not found in modules.dep

提示 modules.dep 文件中没有找到需要加载的 ko 文件,查看下 modules.dep 的内容

1
2
/24_gt911 # more modules.dep
/24_gt911 #

modules.dep 内容为空,需要将要加载的 ko 文件复制到 /lib/modules/$(uname -r)/ 下,再执行 depmod 命令,depmod 指令会自动分析 /lib/modules/$(uname -r) 目录下的可加载模块,并按照固定的格式填入modules.dep 中。

1
2
3
4
/24_gt911 # cp gt911.ko /lib/modules/4.9.88/
/24_gt911 # depmod
/24_gt911 # more modules.dep
gt911.ko

modules.dep 中已经有我们需要加载的模块了,最后再次加载模块:

1
2
3
/24_gt911 # modprobe gt911.ko
gt911 init
gt911_probe

modprobe加载驱动问题_modprobe: can’t open ‘modules.dep’: no such file o-CSDN博客