您的位置:首页 > 产品设计 > 产品经理

内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

2016-06-07 10:22 603 查看
内核模块:/lib/modules/version/kernel或/lib/modules/$(uname-r)/kernel;

[root@localhostkernel]#cd/lib/modules/$(uname-r)/kernel
[root@localhostkernel]#ll
total32
drwxr-xr-x3rootroot4096Sep202015arch
drwxr-xr-x3rootroot4096Sep202015crypto
drwxr-xr-x39rootroot4096Sep202015drivers
drwxr-xr-x26rootroot4096Sep202015fs
drwxr-xr-x4rootroot4096Sep202015lib
drwxr-xr-x20rootroot4096Sep202015net
drwxr-xr-x3rootroot4096Sep202015samples
drwxr-xr-x9rootroot4096Sep202015sound


内核源码:/usr/src/linux或/usr/src/kernels;

[root@localhostboot]#cd/usr/src/kernels
[root@localhostkernels]#ll
total216
drwxr-xr-x27rootroot4096Nov52015linux-2.6.32
-rwxrw-rw-1rootroot12078Sep182015tracehook.patch
-rw-r--r--1rootroot149494Sep182015utrace.patch
-rw-r--r--1rootroot47352Sep182015utrace-ptrace.patch


如果内核顺利被加载了,会有以下几个信息记录:


[root@localhostkernels]#cat/proc/version
Linuxversion2.6.32(root@localhost.localdomain)(gccversion4.1.220080704(RedHat4.1.2-55))#1SMPSunSep2018:58:21PDT2015
Youhavenewmailin/var/spool/mail/root


系统内核功能:/proc/sys/kernel


[root@localhostkernels]#cd/proc/sys/kernel
[root@localhostkernel]#ll
total0
-rw-r--r--1rootroot0Jun619:11acct
-rw-r--r--1rootroot0Jun619:11acpi_video_flags
-rw-r--r--1rootroot0Jun619:11auto_msgmni
-rw-r--r--1rootroot0Jun619:11blk_iopoll
-r--r--r--1rootroot0Jun619:11bootloader_type
-r--r--r--1rootroot0Jun619:11bootloader_version
-rw-------1rootroot0Jun619:11cad_pid
-rw-r--r--1rootroot0Jun619:11compat-log
-rw-r--r--1rootroot0Jun619:11core_pattern
-rw-r--r--1rootroot0Jun619:11core_pipe_limit
-rw-r--r--1rootroot0Jun618:28core_uses_pid
-rw-r--r--1rootroot0Jun619:11ctrl-alt-del
-rw-r--r--1rootroot0Jun619:11domainname
-rw-r--r--1rootroot0Jun619:11ftrace_dump_on_oops
-rw-r--r--1rootroot0Jun619:11hostname
-rw-r--r--1rootroot0Jun618:27hotplug
-rw-r--r--1rootroot0Jun619:11hung_task_check_count
-rw-r--r--1rootroot0Jun619:11hung_task_panic
-rw-r--r--1rootroot0Jun619:11hung_task_timeout_secs
-rw-r--r--1rootroot0Jun619:11hung_task_warnings
-rw-r--r--1rootroot0Jun619:11io_delay_type
dr-xr-xr-x0rootroot0Jun619:11keys
-rw-r--r--1rootroot0Jun619:11kstack_depth_to_print
-rw-r--r--1rootroot0Jun619:11max_lock_depth
-rw-r--r--1rootroot0Jun618:27modprobe
-rw-r--r--1rootroot0Jun619:11modules_disabled
-rw-r--r--1rootroot0Jun618:28msgmax
-rw-r--r--1rootroot0Jun618:28msgmnb
-rw-r--r--1rootroot0Jun619:11msgmni
-r--r--r--1rootroot0Jun618:28ngroups_max
-rw-r--r--1rootroot0Jun619:11nmi_watchdog
-r--r--r--1rootroot0Jun619:11osrelease
-r--r--r--1rootroot0Jun619:11ostype
-rw-r--r--1rootroot0Jun619:11overflowgid
-rw-r--r--1rootroot0Jun619:11overflowuid
-rw-r--r--1rootroot0Jun619:11panic
-rw-r--r--1rootroot0Jun619:11panic_on_io_nmi
-rw-r--r--1rootroot0Jun619:11panic_on_oops
-rw-r--r--1rootroot0Jun619:11panic_on_unrecovered_nmi
-rw-r--r--1rootroot0Jun619:11perf_event_max_sample_rate
-rw-r--r--1rootroot0Jun619:11perf_event_mlock_kb
-rw-r--r--1rootroot0Jun619:11perf_event_paranoid
-rw-r--r--1rootroot0Jun619:11pid_max
-rw-r--r--1rootroot0Jun619:11poweroff_cmd
-rw-r--r--1rootroot0Jun619:11print-fatal-signals
-rw-r--r--1rootroot0Jun619:11printk
-rw-r--r--1rootroot0Jun619:11printk_delay
-rw-r--r--1rootroot0Jun619:11printk_ratelimit
-rw-r--r--1rootroot0Jun619:11printk_ratelimit_burst
dr-xr-xr-x0rootroot0Jun619:11pty
dr-xr-xr-x0rootroot0Jun619:11random
-rw-r--r--1rootroot0Jun619:11randomize_va_space
-rw-r--r--1rootroot0Jun619:11real-root-dev
-rw-r--r--1rootroot0Jun619:11sched_child_runs_first
-rw-r--r--1rootroot0Jun619:11sched_compat_yield
dr-xr-xr-x0rootroot0Jun619:11sched_domain
-rw-r--r--1rootroot0Jun619:11sched_features
-rw-r--r--1rootroot0Jun619:11sched_latency_ns
-rw-r--r--1rootroot0Jun619:11sched_migration_cost
-rw-r--r--1rootroot0Jun619:11sched_min_granularity_ns
-rw-r--r--1rootroot0Jun619:11sched_nr_migrate
-rw-r--r--1rootroot0Jun619:11sched_rt_period_us
-rw-r--r--1rootroot0Jun619:11sched_rt_runtime_us
-rw-r--r--1rootroot0Jun619:11sched_shares_ratelimit
-rw-r--r--1rootroot0Jun619:11sched_shares_thresh
-rw-r--r--1rootroot0Jun619:11sched_time_avg
-rw-r--r--1rootroot0Jun619:11sched_wakeup_granularity_ns
-rw-r--r--1rootroot0Jun618:28sem
-rw-r--r--1rootroot0Jun618:28shmall
-rw-r--r--1rootroot0Jun618:28shmmax
-rw-r--r--1rootroot0Jun618:28shmmni
dr-xr-xr-x0rootroot0Jun619:11slow-work
-rw-r--r--1rootroot0Jun619:11softlockup_panic
-rw-r--r--1rootroot0Jun619:11softlockup_thresh
-rw-r--r--1rootroot0Jun618:28sysrq
-rw-r--r--1rootroot0Jun619:11tainted
-rw-r--r--1rootroot0Jun619:11threads-max
-rw-r--r--1rootroot0Jun619:11timer_migration
-rw-r--r--1rootroot0Jun619:11unknown_nmi_panic
-r--r--r--1rootroot0Jun619:11version
-rw-r--r--1rootroot0Jun619:11vsyscall64


假如我有个新硬件,偏偏我的系统不支持,要这样做:
重新编译内核,并加入最新的硬件驱动程序源码;
将该硬件的驱动程序编译成为模块,在启动时加载该模块。


内核:/boot/vmlinuz或/boot/vmlinuz-version;
内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);
[root@server1boot]#pwd
/boot

[root@server1boot]#ll
总用量23536
-rw-r--r--.1rootroot1052008月12014config-2.6.32-431.23.3.el6.x86_64
drwxr-xr-x.3rootroot40968月142014efi
drwxr-xr-x.2rootroot40968月142014grub
-rw-------.1rootroot171257474月1021:24initramfs-2.6.32-431.23.3.el6.x86_64.img
-rw-r--r--.1rootroot1939258月12014symvers-2.6.32-431.23.3.el6.x86_64.gz
-rw-r--r--.1rootroot25198158月12014System.map-2.6.32-431.23.3.el6.x86_64
-rwxr-xr-x.1rootroot41330408月12014vmlinuz-2.6.32-431.23.3.el6.x86_64



下面我们着重讲一下内核模块
一、内核模块与依赖性
基本上,内核模块放置处是在/lib/modules/$(uname-r)/kernel当中,里面的几个目录主要为:
arch与硬件平台有关的选项
crypto内核所支持的加密的技术
drivers一些硬件的驱动程序
fs内核所支持的文件系统
lib一些函数库
net与网络有关的各项协议数据,还有防火墙模块等
sound与音效有关的各项模块
还有文件/lib/modules/$(uname-r)/modules.dep,记录了内核支持的模块的依赖性。那么如何创建该文件呢?如下:
#depmod[-Ane]
-A:不加任何参数时,depmod会主动去分析目前内核的模块,并且重新写入/lib/modules/$(uname-r)/
modules.dep当中。如果加-A参数,则会查找比modules.dep内还要新的模块,如果真找到,才会更新。
-n:不写入modules.dep,而是将结果输出到屏幕上。
-e:显示出目前已加载的不可执行的模块名称。

例子:我做好一个网卡驱动程序a.ko(内核模块名以.ko结尾),该如何更新内核的依赖性?
#cpa.ko/lib/modules/$(uname-r)/kernel/drivers/net
#depmod

二、内核模块的查看
查看目前模块加载了多少的模块。

[root@server1~]#lsmod
ModuleSizeUsedby
xenfs57051
microcode1126850
xen_netfront189690
i2c_piix4126080
i2c_core310841i2c_piix4
ext43744051
jbd2934271ext4
mbcache81931ext4
xen_blkfront161082
pata_acpi37010
ata_generic38370
ata_piix246010
dm_mirror143840
dm_region_hash120851dm_mirror
dm_log99302dm_mirror,dm_region_hash
dm_mod843372dm_mirror,dm_log

模块名称模块的大小此模块是否被其他模块使用


查阅每个模块信息
#modinfo[-adln][module_name|filename]
-a:仅列出作者名
-d:仅列出该modules的说明
-l:仅列出授权
-n:仅列出该模块的详细路径


[root@server1~]#modinfoext4
filename:/lib/modules/2.6.32-431.23.3.el6.x86_64/kernel/fs/ext4/ext4.ko
license:GPL
description:FourthExtendedFilesystem
author:RemyCard,StephenTweedie,AndrewMorton,AndreasDilger,TheodoreTs'oandothers
srcversion:88E736686F4302B17E0DA05
depends:mbcache,jbd2
vermagic:2.6.32-431.23.3.el6.x86_64SMPmod_unloadmodversions


[root@server1~]#modinfodm_log
filename:/lib/modules/2.6.32-431.23.3.el6.x86_64/kernel/drivers/md/dm-log.ko
license:GPL
author:JoeThornber,HeinzMauelshagen<dm-devel@redhat.com>
description:device-mapperdirtyregionlog
srcversion:B0BB111AC7F0B71848484DF
depends:dm-mod
vermagic:2.6.32-431.23.3.el6.x86_64SMPmod_unloadmodversions


[root@localhostkernel]#modinfoe1000
filename:/lib/modules/2.6.32/kernel/drivers/net/e1000/e1000.ko
version:7.3.21-k5-NAPI
license:GPL
description:Intel(R)PRO/1000NetworkDriver
author:IntelCorporation,<linux.nics@intel.com>
srcversion:2B8A35B3369384355170615
alias:pci:v00008086d000010B5sv*sd*bc*sc*i*
alias:pci:v00008086d00001099sv*sd*bc*sc*i*
alias:pci:v00008086d0000108Asv*sd*bc*sc*i*
alias:pci:v00008086d0000107Csv*sd*bc*sc*i*
alias:pci:v00008086d0000107Bsv*sd*bc*sc*i*
alias:pci:v00008086d0000107Asv*sd*bc*sc*i*
alias:pci:v00008086d00001079sv*sd*bc*sc*i*
alias:pci:v00008086d00001078sv*sd*bc*sc*i*
alias:pci:v00008086d00001077sv*sd*bc*sc*i*
alias:pci:v00008086d00001076sv*sd*bc*sc*i*
alias:pci:v00008086d00001075sv*sd*bc*sc*i*
alias:pci:v00008086d00001028sv*sd*bc*sc*i*
alias:pci:v00008086d00001027sv*sd*bc*sc*i*
alias:pci:v00008086d00001026sv*sd*bc*sc*i*
alias:pci:v00008086d0000101Esv*sd*bc*sc*i*
alias:pci:v00008086d0000101Dsv*sd*bc*sc*i*
alias:pci:v00008086d0000101Asv*sd*bc*sc*i*
alias:pci:v00008086d00001019sv*sd*bc*sc*i*
alias:pci:v00008086d00001018sv*sd*bc*sc*i*
alias:pci:v00008086d00001017sv*sd*bc*sc*i*
alias:pci:v00008086d00001016sv*sd*bc*sc*i*
alias:pci:v00008086d00001015sv*sd*bc*sc*i*
alias:pci:v00008086d00001014sv*sd*bc*sc*i*
alias:pci:v00008086d00001013sv*sd*bc*sc*i*
alias:pci:v00008086d00001012sv*sd*bc*sc*i*
alias:pci:v00008086d00001011sv*sd*bc*sc*i*
alias:pci:v00008086d00001010sv*sd*bc*sc*i*
alias:pci:v00008086d0000100Fsv*sd*bc*sc*i*
alias:pci:v00008086d0000100Esv*sd*bc*sc*i*
alias:pci:v00008086d0000100Dsv*sd*bc*sc*i*
alias:pci:v00008086d0000100Csv*sd*bc*sc*i*
alias:pci:v00008086d00001009sv*sd*bc*sc*i*
alias:pci:v00008086d00001008sv*sd*bc*sc*i*
alias:pci:v00008086d00001004sv*sd*bc*sc*i*
alias:pci:v00008086d00001001sv*sd*bc*sc*i*
alias:pci:v00008086d00001000sv*sd*bc*sc*i*
depends:
vermagic:2.6.32SMPmod_unloadmodversions
parm:TxDescriptors:Numberoftransmitdescriptors(arrayofint)
parm:RxDescriptors:Numberofreceivedescriptors(arrayofint)
parm:Speed:Speedsetting(arrayofint)
parm:Duplex:Duplexsetting(arrayofint)
parm:AutoNeg:Advertisedauto-negotiationsetting(arrayofint)
parm:FlowControl:FlowControlsetting(arrayofint)
parm:XsumRX:DisableorenableReceiveChecksumoffload(arrayofint)
parm:TxIntDelay:TransmitInterruptDelay(arrayofint)
parm:TxAbsIntDelay:TransmitAbsoluteInterruptDelay(arrayofint)
parm:RxIntDelay:ReceiveInterruptDelay(arrayofint)
parm:RxAbsIntDelay:ReceiveAbsoluteInterruptDelay(arrayofint)
parm:InterruptThrottleRate:InterruptThrottlingRate(arrayofint)
parm:SmartPowerDownEnable:EnablePHYsmartpowerdown(arrayofint)
parm:KumeranLockLoss:EnableKumeranlocklossworkaround(arrayofint)
parm:copybreak:Maximumsizeofpacketthatiscopiedtoanewbufferonreceive(uint)
parm:debug:Debuglevel(0=none,...,16=all)(int)


[root@localhostkernel]#modinfo-pe1000
debug:Debuglevel(0=none,...,16=all)
copybreak:Maximumsizeofpacketthatiscopiedtoanewbufferonreceive
KumeranLockLoss:EnableKumeranlocklossworkaround
SmartPowerDownEnable:EnablePHYsmartpowerdown
InterruptThrottleRate:InterruptThrottlingRate
RxAbsIntDelay:ReceiveAbsoluteInterruptDelay
RxIntDelay:ReceiveInterruptDelay
TxAbsIntDelay:TransmitAbsoluteInterruptDelay
TxIntDelay:TransmitInterruptDelay
XsumRX:DisableorenableReceiveChecksumoffload
FlowControl:FlowControlsetting
AutoNeg:Advertisedauto-negotiationsetting
Duplex:Duplexsetting
Speed:Speedsetting
RxDescriptors:Numberofreceivedescriptors
TxDescriptors:Numberoftransmitdescriptors


e1000模块参数设置:

[root@localhoste1000]#ll
total0
drwxr-xr-x2rootroot0Jun619:34drivers
drwxr-xr-x2rootroot0Jun619:34holders
-r--r--r--1rootroot4096Jun619:34initstate
drwxr-xr-x2rootroot0Jun619:34parameters
-r--r--r--1rootroot4096Jun619:34refcnt
drwxr-xr-x2rootroot0Jun619:34sections
-r--r--r--1rootroot4096Jun619:34srcversion
-r--r--r--1rootroot4096Jun619:34version
[root@localhoste1000]#cdparameters
[root@localhostparameters]#ll
total0
-rw-r--r--1rootroot4096Jun619:35copybreak
[root@localhostparameters]#pwd
/sys/module/e1000/parameters



scsi_mod:模拟参数设置



[root@server1module]#pwd
/sys/module
[root@server1module]#cdscsi_mod
[root@server1scsi_mod]#ll
总用量0
drwxr-xr-x2rootroot06月710:41parameters

[root@server1scsi_mod]#cdparameters
[root@server1parameters]#ll
总用量0
-rw-r--r--1rootroot40966月710:41default_dev_flags
-rw-r--r--1rootroot40966月710:41eh_deadline
-rw-r--r--1rootroot40966月710:41inq_timeout
-rw-r--r--1rootroot40966月710:41max_luns
-rw-r--r--1rootroot40966月710:41max_report_luns
-r--r--r--1rootroot40966月710:41scan
-rw-r--r--1rootroot40966月710:41scsi_logging_level


三、内核模块的加载与删除
最好使用modprobe这个命令加载模块,因为modprobe会主动查找modules.dep的内容,解决了依赖性后,才决定需要加载的模块有哪些。
insmod则完全由用户自行加载一个完整文件名的模块,并不会主动分析模块依赖性。
#insmod[/full/path/module_name][parameters]

例子:尝试载入cifs.ko这个文件系统模块
#insmod/lib/modules/$(uname-r)/kernel/fs/cifs/cifs.ko
记住,一定要是完整的文件名。

#rmmod[-fw]module_name
-f:强制将该模块删除掉,不论是否正在被使用
-w:若该模块正在被使用,则等待该模块被使用完毕后再删除

insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.
#modprobe[-lcfr]module_name
-c:列出目前系统上面所有的模块
-l:列出目前在/lib/modules/`uname-r`/kernel当中的所有模块完整文件名
-f:强制加载该模块
-r:删除某个模块

[root@localhostkernel]#modprobe-l
/lib/modules/2.6.32/kernel/net/ipv6/xfrm6_tunnel.ko
/lib/modules/2.6.32/kernel/net/xfrm/xfrm_ipcomp.ko
/lib/modules/2.6.32/kernel/drivers/net/pcmcia/xirc2ps_cs.ko
/lib/modules/2.6.32/kernel/drivers/net/tulip/xircom_cb.ko
/lib/modules/2.6.32/kernel/crypto/xor.ko
/lib/modules/2.6.32/kernel/net/sunrpc/xprtrdma/xprtrdma.ko
/lib/modules/2.6.32/kernel/net/netfilter/xt_CLASSIFY.ko
/lib/modules/2.6.32/kernel/net/netfilter/xt_HL.ko

...




[root@server1/]#modprobe-l
kernel/net/rds/rds.ko
kernel/net/rds/rds_rdma.ko
kernel/net/rds/rds_tcp.ko
kernel/net/mac80211/mac80211.ko
kernel/net/rfkill/rfkill.ko
kernel/net/9p/9pnet.ko
kernel/net/9p/9pnet_virtio.ko
kernel/net/9p/9pnet_rdma.ko
kernel/net/wimax/wimax.ko
kernel/net/openvswitch/openvswitch.k
...


[root@server1/]#cd/lib/modules/`uname-r`/kernel
[root@server1kernel]#ll
总用量36
drwxr-xr-x.3rootroot40968月142014arch
drwxr-xr-x.3rootroot40968月142014crypto
drwxr-xr-x.61rootroot40968月142014drivers
drwxr-xr-x.30rootroot40968月142014fs
drwxr-xr-x.3rootroot40968月142014kernel
drwxr-xr-x.6rootroot40968月142014lib
drwxr-xr-x.2rootroot40968月142014mm
drwxr-xr-x.28rootroot40968月142014net
drwxr-xr-x.9rootroot40968月142014sound
[root@server1kernel]#pwd
/lib/modules/2.6.32-431.23.3.el6.x86_64/kernel
[root@server1kernel]#cdnet
[root@server1net]#ll
总用量104
drwxr-xr-x.2rootroot40968月142014802
drwxr-xr-x.2rootroot40968月1420148021q
drwxr-xr-x.2rootroot40968月1420149p
drwxr-xr-x.2rootroot40968月142014atm
drwxr-xr-x.6rootroot40968月142014bluetooth
drwxr-xr-x.3rootroot40968月142014bridge
drwxr-xr-x.2rootroot40968月142014can
drwxr-xr-x.2rootroot40968月142014core
drwxr-xr-x.2rootroot40968月142014dccp
drwxr-xr-x.2rootroot40968月142014ieee802154
drwxr-xr-x.3rootroot40968月142014ipv4
drwxr-xr-x.3rootroot40968月142014ipv6
drwxr-xr-x.2rootroot40968月142014key
drwxr-xr-x.2rootroot40968月142014llc
drwxr-xr-x.2rootroot40968月142014mac80211
drwxr-xr-x.4rootroot40968月142014netfilter
drwxr-xr-x.2rootroot40968月142014openvswitch
drwxr-xr-x.2rootroot40968月142014phonet
drwxr-xr-x.2rootroot40968月142014rds
drwxr-xr-x.2rootroot40968月142014rfkill
drwxr-xr-x.2rootroot40968月142014sched
drwxr-xr-x.2rootroot40968月142014sctp
drwxr-xr-x.4rootroot40968月142014sunrpc
drwxr-xr-x.2rootroot40968月142014wimax
drwxr-xr-x.2rootroot40968月142014wireless
drwxr-xr-x.2rootroot40968月142014xfrm
[root@server1net]#cdrds
[root@server1rds]#ll
总用量296
-rwxr--r--.1rootroot1114488月12014rds.ko
-rwxr--r--.1rootroot1563048月12014rds_rdma.ko
-rwxr--r--.1rootroot281688月12014rds_tcp.ko


例子:加载cifs模块
#modprobecifs
很方便,因为我们根本不用知道完整的模块文件名

内核模块的额外参数配置:/etc/modprobe.conf
如果你想修改某些模块的额外参数设置,就在这个文件内。
#vi/etc/modprobe.conf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: