Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。在此介绍一下linux中关于模块的命令。
Linux操作系统的核心具有模块化的特性,因此在编译核心时,无需把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
modprobe
功能说明:自动处理可载入模块。
语 法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]。
补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
注意:
1、modprobe 命令是根据depmod -a的输出/lib/modules/version/modules.dep来加载全部的所需要模块。
2、删除模块的命令是:modprobe -r filename。
3、系统启动后,正常工作的模块都在/proc/modules文件中列出。使用lsmod命令也可显示相同内容。
参数:
-a或--all 载入全部的模块。
-c或--show-conf 显示所有模块的设置信息。
-d或--debug 使用排错模式。
-l或--list 显示可用的模块。
-r或--remove 模块闲置不用时,即自动卸载模块。/
-t或--type 指定模块类型。
-v或--verbose 执行时显示详细的信息。
-V或--version 显示版本信息。
-help 显示帮助。
insmod
功能说明:载入模块。
与modprobe的区别:insmod 与 modprobe 都是载入 kernel module,不过一般差别于 modprobe 能够处理 module 载入的相依问题。
比方你要载入a module,但是a module 要求系统先载入b module 时,直接用insmod 挂入通常都会出现错误讯息,不过modprobe 倒是能够知道先载入b module 后才载入a module,如此相依性就会满足。
不过 modprobe 并不是大神,不会厉害到知道 module 之间的相依性为何,该程式是读取 /lib/modules/2.6.xx/modules.dep 档案得知相依性的。而该档案是透过 depmod 程式所建立。
depmod
功能说明:分析可载入模块的相依性,也就是检查系统中各模块之间的依赖关系。
语 法:depmod [-adeisvV][-m <文件>][--help][模块名称]
补充说明:depmod可检测模块的相依性,供modprobe在安装模块时使用。depmod会把依赖关系信息存于/lib/modules/2.6.18-1.2798/modules.dep中,modprobe查看/lib/module/version/modules.dep得知模块的依赖关系。
参 数:
-a或--all 分析所有可用的模块。
-d或debug 执行排错模式。
-e 输出无法参照的符号。
-i 不检查符号表的版本。
-m<文件>或system-map<文件> 使用指定的符号表文件。
-s或--system-log 在系统记录中记录错误。
-v或--verbose 执行时显示详细的信息。
-V或--version 显示版本信息。
--help 显示帮助。
lsmod
功能说明:显示已载入系统的模块
注 意:执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,无需把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
chengxiaoke@chengxiaoke-X550JD:/etc/modprobe.d$ lsmod
Module Size Used by
joydev 17393 0
ctr 13049 2
ccm 17773 2
snd_hda_codec_hdmi 47548 1
snd_hda_codec_conexant 23109 1
snd_hda_codec_generic 69011 1 snd_hda_codec_conexant
模块名称 大小 此模块是否被其他模块使用
rmmod
功能说明:删除不必要的模块
注意:insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.
例子1:尝试载入cifs.ko这个文件系统模块
#insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko
记住,一定要是完整的文件名。
例子2:加载cifs模块
#modprobe cifs
很方便,因为我们根本不用知道完整的模块文件名
modinfo
功能说明:显示kernel模块的对象文件,以显示该模块的相关信息。
chengxiaoke@chengxiaoke-X550JD:/etc/modprobe.d$ modinfo psmouse
filename: /lib/modules/3.16.0-45-generic/kernel/drivers/input/mouse/psmouse.ko
license: GPL
description: PS/2 mouse driver
author: Vojtech Pavlik <vojtech@suse.cz>
srcversion: BCAB9733C70708FABCA838B
alias: serio:ty05pr*id*ex*
alias: serio:ty01pr*id*ex*
depends:
intree: Y
vermagic: 3.16.0-45-generic SMP mod_unload modversions
signer: Magrathea: Glacier signing key
sig_key: C1:A3:1E:DB:9F:C4:C6:4E:2D:95:A7:FF:18:A6:73:D1:8C:AB:15:A6
sig_hashalgo: sha512
parm: proto:Highest protocol extension to probe (bare, imps, exps, any). Useful for KVM switches. (proto_abbrev)
parm: resolution:Resolution, in dpi. (uint)
parm: rate:Report rate, in reports per second. (uint)
parm: smartscroll:Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled. (bool)
parm: resetafter:Reset device after so many bad packets (0 = never). (uint)
parm: resync_time:How long can mouse stay idle before forcing resync (in seconds, 0 = never). (uint)
重要知识,我们得知道内核与内核模块放在哪里。
内核:/boot/vmlinuz或/boot/vmlinuz-version;
内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);
内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel;
内核源码:/usr/src/linux 或 /usr/src/kernels;
如果内核顺利被加载了,会有以下几个信息记录:
内核版本:/proc/version
系统内核功能:/proc/sys/kernel
假如我有个新硬件,偏偏我的系统不支持,要这样做:重新编译内核,并加入最新的硬件驱动程序源码;将该硬件的驱动程序编译成为模块,在启动时加载该模块。
内核模块的额外参数配置:/etc/modprobe.conf 。 如果你想修改某些模块的额外参数设置,就在这个文件内。 #vi /etc/modprobe.conf
.ko文件是模块化的驱动文件 .ko 是内核模块文件,是内核加载的某个模块,一般是驱动程序。
sudo modprobe -r psmouse 关闭触摸板
sudo modprobe psmouse 打开触摸板,即将psmouse模块载入kerne。 00005526
内核与内核模块: http://blog.chinaunix.net/uid-28216282-id-3380616.html
Linux下hello.ko内核模块制作的全过程 : http://blog.csdn.net/jiankangshiye/article/details/6665179
modprobe
最新推荐文章于 2024-05-05 00:00:00 发布