linux驱动模块命令大全insmod/rmmod/modprobe/depmod/lsmod

版权声明:个人心得,欢迎来信来函交流。转载请注明出处! https://blog.csdn.net/LEON1741/article/details/82421332

玩过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 

猜你喜欢

转载自blog.csdn.net/LEON1741/article/details/82421332