linux *** 作系统中,加载和删除内核模块的命令是什么?

linux *** 作系统中,加载和删除内核模块的命令是什么?,第1张

modprobe命令\x0d\x0aLinux命令:modprobe 。\x0d\x0a功能说明:自动处理可载入模块。\x0d\x0a语法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]。\x0d\x0a补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。\x0d\x0a\x0d\x0a内容\x0d\x0a1、modprobe 命令是根据depmod -a的输出/lib/modules/version/modules.dep来加载全部的所需要模块。\x0d\x0a2、删除模块的命令是:modprobe -r filename。\x0d\x0a3、系统启动后,正常工作的模块都在/proc/modules文件中列出。使用lsmod命令也可显示相同内容。\x0d\x0a4、在内核中有一个“Automatic kernel module loading"功能被编译到了内核中。当用户尝试打开某类型的文件时,内核会根据需要尝试加载相应的模块。/etc/modules.conf或 /etc/modprobe.conf文件是一个自动处理内核模块的控制文件。\x0d\x0amodprobe命令主要用于在Linux 2.6内核中加载和删除Linux内核模块。通过此命令用户可以轻松地加载和删除Linux内核模块,同时使用此命令加载Linux内核模块时,Linux内核会自动解决内核模块之间的依赖关系,将相互依赖的模块自动加载,如下所示:\x0d\x0a1) 加载RAID1阵列级别模块:\x0d\x0a[root@rhel5 boot]# modprobe raid1 \x0d\x0a\x0d\x0a2) 显示已加载的RAID1阵列级别模块:\x0d\x0a[root@rhel5 boot]# lsmod |grep raid1 raid1 25153 0 \x0d\x0a\x0d\x0a3) 删除RAID1阵列级别模块:\x0d\x0a[root@rhel5 boot]# modprobe -r raid1 \x0d\x0a\x0d\x0a4) 显示RAID1阵列级别模块:\x0d\x0a[root@rhel5 boot]# lsmod |grep raid1 \x0d\x0a\x0d\x0amodprobe命令在加载模块时会自动解决依赖的模块。当加载的模块需依赖另一个模块时,系统会自动将此模块加载。而当用户使用insmod命令加载模块时,则不会自动解决相对应的依赖模块。\x0d\x0amodprobe命令中的"-r"参数表示删除指定模块,"-c"参数表示显示/etc/modprobe.conf配置文件的参数,"-C"参数表示指定内核配置文件,"-f"表示覆盖,"-l"表示显示模块的绝对路径。\x0d\x0a[root@rhel5 boot]# modprobe -l|grep raid /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid0.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid456.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid1.ko /lib/modules/2.6.18-8.el5/kernel/drivers/md/raid10.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/aacraid/aacraid.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mbox.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mm.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_sas.ko /lib/modules/2.6.18-8.el5/kernel/drivers/scsi/raid_class.ko \x0d\x0a\x0d\x0a以上命令表示显示系统中所有的编译模块,并过滤包含有raid字符串的模块。

一、.ko 文件介绍

.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。

二、优点

(1)这样可以缩小内核体积;

(2)使用方便。

三、.ko文件一般的用处

(1)作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。

四、使用.ko 文件

1、加载驱动模块test.ko

(1)方法一 

进入test.ko驱动模块文件所在的目录,然后直接   insmod  test.ko 

(2)方法二 

将test.ko文件拷贝到/lib/module/#uname-r#/目录下,这里,#uname -r#意思是,在终端中输入 

uname -r后显示的内核版本及名称,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。

然后 depmod(会在/lib/modules/#uname -r#/目录下生成modules.dep和modules.dep.bb文件,表明模块的依赖关系) 

最后 modprobe test(注意这里无需输入.ko后缀) 即可

注:两种方法的区别

modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load module时的依赖关系,它是通过/lib/modules/#uname -r/modules.dep(.bb)文件来查找依赖关系的;而insmod不能解决依赖问题。也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。

linux内核支持动态加载模块,内核模块以.ko为后缀,在Linux系统中,内核模块放在/lib/modulex/x.x.x目录中,其中x.x.x为linux版本号

加载模块

insmod xxx.ko

如果带参数 insmod xxx.ko a=1

卸载模块

rmmod xxx.ko

支持的数据类型

bool :布尔类型

invbool:颠倒了值的bool类型

charp :字符指针类型,内存为用户提供的字符串分配

int:整型

long :长整型

short :短整型

uint :无符号整型

ulong :无符号长整型

ushort :无符号短整型

内核模块源码Makefile编写格式和linux源码的格式一样

在OpenWrt系统中,内核模块编译和应用层的package编译类似

make package/模块名/compile V=s

比如:

make package/hello_kernel/compile V=s

编译完成后会生成.ko文件,目录文件在build_dir中,但和应用层的build目录有点区别,内核模块的package放在linux目录,如(X86平台):

build_dir/target-x86_64_musl/linux-x86_64/

将编译完成的ko文件传输到OpenWrt系统中,注意编译平台和开发板平台的系统架构要一致。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8350845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存