完整介绍Linux驱动模块命令insmod/rmmod/modprobe/depmod/lsmod
玩过linux程序开发的人都知道,当一个驱动程序以模块化的模式编译之后,它并不是随着系统启动而直接活跃的,而是静静的躺在内核的某个角落里,此时是不可用的。应用程序想要调用该驱动,则必须先加载,然后才能使用。而且,使用完还存在一个卸载的过程。那么,这些个驱动模块,该如何加载?又该如何卸载?又能否通过某个命令来进行统一管理或者查看呢?下面我们就来逐一分析。
一、驱动模块的加载
一般来说,insmod和modprobe这两个命令都可以完成驱动模块的加载过程。下面以hello.ko驱动模块为例来解释:
1、insmod命令
进入hello.ko驱动模块文件所在的目录,然后直接输入下面的命令即可:
insmod hello.ko
2、modprobe命令
首先必须将hello.ko文件拷贝到/lib/module/#uname -r#/目录下【为方便叙述,下文中统一称为驱动模块安装目录】。
这里要说明一下,#uname -r#的意思是,在终端中输入uname -r后显示的内核版本及名称。例如我目前正在玩的mini2440开发板中,#uname -r#就是2.6.32.2-FriendlyARM,所以,编译好的驱动模块就必须放在/lib/module/2.6.32.2-FriendlyARM这个目录下。
然后执行以下命令即可:
depmod # 更新modules.dep和modules.dep.bb文件,记录模块的依赖关系
modprobe hello # 注意这里无需输入.ko后缀
3、二者对比
总结一下,如上所述,insmod和modprobe都可以用来载入kernel module,但是二者还是有差别的,主要体现在modprobe能够处理module载入的依赖性问题。
比方你要载入a module,而a module需要系统先载入b module,此时如果直接用insmod载入,通常都会出错,不过当你使用modprobe命令时,系统就能够分析出其中的依赖关系,于是会自动先载入b module然后再载入a module。
当然,modprobe 并不是大神,不可能真的是全自动分析,它只是读取了驱动模块安装目录下的modules.dep文件,从而分析出各个模块的依赖性的,而该文件则是通过depmod命令所建立,这就是上面为什么要先执行一下depmod命令然后再执行modprobe命令的原因了。当然,如果你不执行depmod命令,modprobe命令可能也可以执行成功,但是你本次载入的模块就没有与系统其他驱动模块建立依赖关系,无法形成一个有机的整体。
也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。
二、驱动模块的卸载
上面既然已经了解了如何加载一个驱动模块,自然也要介绍一下如何卸载一个驱动模块。与加载命令对应,卸载命令也有两个:
1、rmmod
在任何目录下输入以下命令即可:
rmmod module_name
注意:其中”module_name”是lsmod显示的模块名称,而不是对应的ko文件名。
2、modprobe命令
modprobe -r hello # 注意这里无需输入.ko后缀
depmod # 更新modules.dep和modules.dep.bb文件,记录模块的依赖关系
同上所述,使用modprobe命令来卸载一个模块时,它也会自动更新驱动模块安装目录下的modules.dep和modules.dep.bb文件,从而将该模块完整的卸载掉。
三、模块列表的查看
在任何目录下,都可以输入下面的命令来查看已加载的驱动模块列表。
leon@Ubuntu:~$ lsmod
Module Size Used by
vboxsf 45056 3
bnep 20480 2
rfcomm 69632 0
bluetooth 512000 10 bnep,rfcomm
binfmt_misc 20480 1
nfsd 315392 13
auth_rpcgss 57344 1 nfsd
nfs_acl 16384 1 nfsd
nfs 249856 0
lockd 94208 2 nfs,nfsd
grace 16384 2 nfsd,lockd
sunrpc 331776 19 nfs,nfsd,auth_rpcgss,lockd,nfs_acl
fscache 65536 1 nfs
snd_intel8x0 40960 2
下一篇: 管理Linux内核模块的方法
推荐阅读
-
深入解析Linux内核模块管理命令:lsmod、insmod、rmmod、modinfo、modprobe、depmod
-
【linux】内核模块管理:深入探索lsmod、insmod、rmmod、modinfo、modprobe、depmod命令
-
对Linux内核模块进行管理的详解:lsmod、insmod、rmmod、modinfo、modprobe、depmod命令解析
-
使用说明:探究linux内核模块相关命令的用法:lsmod, depmod, modprobe, modinfo, insmod, rmmod
-
Linux驱动模块相关命令:insmod/rmmod/lsmod (第10部分)
-
linux内核模块相关命令:lsmod,depmod,modprobe,modinfo,insmod,rmmod 使用说明
-
完整介绍Linux驱动模块命令insmod/rmmod/modprobe/depmod/lsmod
-
【Linux设备驱动】学习挂载、卸载和操作驱动模块:lsmod、insmod、rmmod和modprobe
-
#26 Linux kernel(内核)详解与uname、lsmod、modinfo、depmod、insmod、rmmod、modprobe...命令用法
-
#26 Linux kernel(内核)详解与uname、lsmod、modinfo、depmod、insmod、rmmod、modprobe...命令用法