【Linux设备驱动】学习挂载、卸载和操作驱动模块:lsmod、insmod、rmmod和modprobe
如何挂载和卸载驱动
哎,这就简单了呀,伙计们。就和安装软件,卸载软件一个样。
不过按照书上内容的思路呢,是告诉大家如何让原代码如何变成内核里运行的子系统。后续会在这篇文章补全
insmod
挂载即安装,
insmod char_demo.ko
rmmod
卸载,
rmmod char_demo
lsmod
lsmod
就可以查看驱动有没有成功挂载,卸载的啦
这一节,有时间好好絮叨絮叨,客观别急,只要知道这三个指令就成
详细内容可查看《Linux设备驱动程序》2.4.2 加载和卸载模块 p18
与此同时程序员也可以通过调用request_module(module_name);
灵活的方式加载其他内核模块
modprobe : 解决insmod无法解决的模块依赖
比如drv.ko
依赖first.ko
这个模块,就必须先使用insmod
命令加载first.ko
这个模块,然后再加载drv.ko
这个模块。
但是**modprobe
就不会存在这个问题,modprobe
会分析模块的依赖关系,然后会将所有的依赖模块都加载到内核中,因此modprobe
命令相比insmod
要智能**一些。
modprobe
命令主要智能在提供了模块的依赖性分析、错误检查、错误报告等功能,推荐使用modprobe
命令来加载驱动。
modprobe
会根据depmod
所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe
会卸载整组的模块。
modprobe
命令默认会去/lib/modules/< kernel-version>
目录中查找模块,比如本书使用的Linux kernel 的版本号为5.10.15
,因此modprobe
命令默认会到/lib/modules/5.10.15
这个目录中查找相应的驱动模块,一般自己制作的根文件系统中是不会有这个目录的,所以需要自己手动创建,然后将.ko
文件放到这个文件目录即可。
语法
modprobe [选项] <参数>
选项
-a或–all:载入全部的模块;
-c或–show-conf:显示所有模块的设置信息;
-d或–debug:使用排错模式;
-l或–list:显示可用的模块;
-r或–remove:模块闲置不用时,即自动卸载模块;
-t或–type:指定模块类型;
-v或–verbose:执行时显示详细的信息;
-V或–version:显示版本信息;
-help:显示帮助。
参数
模块名:要加载或移除的模块名称。
modprobe加载驱动
modprobe drv.ko
modprobe卸载驱动
modprobe -r drv.ko
modprobe查看已挂载驱动
modprobe -l
这里,使用格式modprobe 模块名
来挂载一个模块。挂载之后,用lsmod
可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过modprobe -l
所看到的模块,都是带有.ko
或.o
后缀。
常见问题:
1.rmmod: chdir(xxxx):No such file or directory
解决:在/lib/module路径下执行指令创建文件夹:
mkdir `uname -r`
或
mkdir 5.10.15
#5.10.15是内核版本号,可以通过uname -r指令查看
上一篇: 对Linux内核模块进行管理的命令
下一篇: 加载和卸载Linux模块的过程