天天看点

Linux内核模块(二)

·    ko:kernel object

·    so:shared object

[root@rhel6 ~]# ls /lib/modules/$(uname -r)/kernel/arch/x86/kvm

kvm-amd.ko  kvm-intel.ko  kvm.ko

·    <b>通过移除内核模块可达到禁用该模块的作用</b>

[root@rhel6 ~]# ls /lib/modules/$(uname -r)/kernel/drivers/usb/storage            //移除usb-storage.ko即可禁用U盘

ums-alauda.ko   ums-datafab.ko  ums-isd200.ko    ums-karma.ko     ums-sddr09.ko  ums-usbat.ko

ums-cypress.ko  ums-freecom.ko  ums-jumpshot.ko  ums-onetouch.ko  ums-sddr55.ko  usb-storage.ko

·    <b>通过</b><b>lsmod</b><b>查看系统已加载的所有内核模块</b>

[root@rhel6 ~]# lsmod

模块名称                    模块大小    依赖关系

Module                  Size  Used by

ipt_MASQUERADE          2466  0

ipt_REJECT              2383  0

autofs4                26888  3

scsi_transport_fc      52241  3 bnx2fc,fcoe,libfc

scsi_tgt               12173  1 scsi_transport_fc

8021q                  23575  0

iptable_mangle          3349  1

iptable_filter          2793  0

iptable_nat             6158  1

nouveau               708444  0

ext4                  364410  2

mmc_core               72991  1 sdhci

video                  21032  2 nouveau,i915

·    <b>通过</b><b>modprobe</b><b>添加</b><b>/</b><b>删除内核模块</b>

modprobe命令主要用于在Linux2.6内核中加载和删除Linux内核模块,通过此命令可轻松加载和删除Linux内核模块,同时会自动解决内核模块之间的依赖关系,并加载相互依赖的模块。

·    添加vfat内核模块

[root@rhel6 ~]# lsmod | grep vfat                            //列出当前内存当中是否已加载vfat的内核模块

[root@rhel6 ~]# modprobe vfat                              //不需加 .ko"

[root@rhel6 ~]# lsmod | grep vfat

vfat                   46529  0

fat                    85873  1 vfat

·    删除vfat内核模块

[root@rhel6 ~]# modprobe -r vfat

·    <b>通过</b><b>ins</b><b>mod</b><b>/</b><b>rmmod </b><b>添加</b><b>/</b><b>删除内核模块</b>

insmod命令主要用于在Linux2.4内核之前加载内核模块,系统不仅不会自动解决内核模块之间的依赖关系,而且还要求写出详细的模块路径

rmmod命令主要用于卸载正在使用的Linux内核模块,与modprobe -r命令相似

[root@rhel6 ~]# insmod /lib/modules/2.6.32-220.el6.x86_64/kernel/fs/fat/fat.ko   

[root@rhel6 ~]# insmod /lib/modules/2.6.32-220.el6.x86_64/kernel/fs/vfat/vfat.ko

[root@rhel6 ~]# rmmod vfat

[root@rhel6 ~]# rmmod fat

·    <b>通过</b><b> </b><b>depmod </b><b>重新注册内核模块信息</b>

(非系统自带的内核模块不能通过modprobe直接加载,可通过insmod手工加载或者将该内核模块的*.ko文件拷贝到相应的目录下通过depmod重新注册内核模块信息)

[root@rhel6 ~]# depmod [-ane]

-a     :不加任何参数时, depmod 会主动的去分析目前核心的模块,并且重新写入/lib/modules/$(uname -r)/modules.dep 当中。

        若加入 -a 参数时,则 depmod会去搜寻比 modules.dep 内还要新的模块,如果找到新模块,才会升级。

-n  :不写入 modules.dep ,而是将结果输出到屏幕上(standard out);

-e  :显示出目前已加载的不可运行的模块名称

[root@rhel6 ~]# file /lib/modules/2.6.32-220.el6.x86_64/modules.dep        

/lib/modules/2.6.32-220.el6.x86_64/modules.dep: ASCII text, with very long lines

[root@rhel6 ~]# rm -f /lib/modules/2.6.32-220.el6.x86_64/modules.dep

[root@rhel6 ~]# depmod                                       //重新注册当前系统的内核模块信息并生成modules.dep文件

[root@rhel6 ~]# ls /lib/modules/2.6.32-220.el6.x86_64| grep modules.dep

modules.dep

modules.dep.bak

[root@rhel6 ~]# ls /lib/modules/2.6.32-220.el6.x86_64/modules.dep

/lib/modules/2.6.32-220.el6.x86_64/modules.dep

[root@rhel6 ~]# depmod -a                              //注册/lib/modules/下所有内核的内核模块信息

[root@rhel6 ~]# depmod `uname -r`                  //只注册当前系统中的内核模块信息

·    <b>通过</b><b> </b><b>modinfo </b><b>查看内核模块信息</b>

[root@rhel6 ~]# modinfo vfat

filename:       /lib/modules/2.6.32-220.el6.x86_64/kernel/fs/fat/vfat.ko

author:         Gordon Chaffee

description:    VFAT filesystem support

license:        GPL

srcversion:     ACCC2F7E9526F402F526976

depends:        fat

vermagic:       2.6.32-220.el6.x86_64 SMP mod_unload modversions

     本文转自Vnimos51CTO博客,原文链接:http://blog.51cto.com/vnimos/1102390,如需转载请自行联系原作者

继续阅读