modprobe加载驱动问题
modprobe 加载驱动问题
在 Linux 系统中,驱动加载方式分为两种:静态加载和动态加载。静态加载就是把驱动程序放进内核一起编译,系统启动后之间被调用。静态加载的缺点就是调试困难,一般都是驱动程序调试稳定后再将其放进内核一起编译。动态加载是利用 Linux 的 module 特性,可以再系统启动后使用 insmod 命令或 modprobe 命令把驱动程序(.ko 文件)手动添加进内核。
insmod
insmod 加载模块时,需要指定完整的路径和模块名字,一般是在模块当前路径直接加载。不会自动处理模块的依赖关系,如果当前加载的模块依赖其他模块,则会报错,需要手动加载这些依赖模块。
modprobe
modprobe 加载模块时,不需要指定路径,它会到默认目录下例如: /lib/modules/$(uname -r)/
进行查找模块。可以自动加载所需要的依赖模块。
根文件系统是新的话,可能没有这个默认目录,我们使用 modprobe 加载时会提示:
1 | /24_gt911 # modprobe gt911.ko |
创建目录再次运行提示:
1 | /24_gt911 # mkdir /lib/modules |
这个目录对应内核的版本,再次创建目录:
1 | /24_gt911 # mkdir /lib/modules/4.9.88 |
提示找不到 modules.dep 文件,这时不用手动创建该文件,使用 depmod 命令即可自动生成:
1 | /24_gt911 # depmod |
再次加载出现:
1 | /24_gt911 # modprobe gt911.ko |
提示 modules.dep 文件中没有找到需要加载的 ko 文件,查看下 modules.dep 的内容
1 | /24_gt911 # more modules.dep |
modules.dep 内容为空,需要将要加载的 ko 文件复制到 /lib/modules/$(uname -r)/
下,再执行 depmod 命令,depmod 指令会自动分析 /lib/modules/$(uname -r)
目录下的可加载模块,并按照固定的格式填入modules.dep 中。
1 | /24_gt911 # cp gt911.ko /lib/modules/4.9.88/ |
modules.dep 中已经有我们需要加载的模块了,最后再次加载模块:
1 | /24_gt911 # modprobe gt911.ko |
modprobe加载驱动问题_modprobe: can’t open ‘modules.dep’: no such file o-CSDN博客