- 核心模组的载入与移除
- 发布时间:2010-02-17 18:28:25 浏览数:7788 发布者:tznktg 设置字体【大 中 小】
insmod 则完全由使用者自行载入一个完整档名的模组, 并不会主动的分析模组相依性啊!
[root@www ~]# insmod [/full/path/module_name] [parameters]
范例一:请尝试载入 cifs.ko 这个‘档案系统’模组
[root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko
[root@www ~]# lsmod | grep cifs
cifs 212789 0
他立刻就将该模组载入啰~但是 insmod 后面接的模组必须要是完整的‘档名’才行!那如何移除这个模组呢?
[root@www ~]# rmmod [-fw] module_name
选项与参数:
-f :强制将该模组移除掉,不论是否正被使用;
-w :若该模组正被使用,则 rmmod 会等待该模组被使用完毕后,才移除他!
范例一:将刚刚载入的 cifs 模组移除!
[root@www ~]# rmmod cifs
范例二:请载入 vfat 这个‘档案系统’模组
[root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/vfat/vfat.ko
insmod: error inserting '/lib/modules/2.6.18-92.el5/kernel/fs/vfat/vfat.ko':
-1 Unknown symbol in module
# 无法载入 vfat 这个模组啊!伤脑筋!
使用 insmod 与 rmmod 的问题就是,你必须要自行找到模组的完整档名才行,而且如同上述范例二的结果, 万一模组有相依属性的问题时,你将无法直接载入或移除该模组呢!所以近年来我们都建议直接使用 modprobe 来处理模组载入的问题,这个指令的用法是:
[root@www ~]# modprobe [-lcf] module_name
选项与参数:
-c :列出目前系统所有的模组!(更详细的代号对应表)
-l :列出目前在 /lib/modules/`uname -r`/kernel 当中的所有模组完整档名;
-f :强制载入该模组;
-r :类似 rmmod ,就是移除某个模组啰~
范例一:载入 cifs 模组
[root@www ~]# modprobe cifs
# 很方便吧!不需要知道完整的模组档名,这是因为该完整档名已经记录到
# /lib/modules/`uname -r`/modules.dep 当中的缘故啊!如果要移除的话:
[root@www ~]# modprobe -r cifs
使用 modprobe 真的是要比 insmod 方便很多!因为他是直接去搜寻 modules.dep 的纪录, 所以啰,当然可以克服模组的相依性问题,而且还不需要知道该模组的详细路径呢!
例题:
尝试使用 modprobe 载入 vfat 这个模组,并且观察该模组的相关模组是哪个?
答:
我们使用 modprobe 来载入,再以 lsmod 来观察与 grep 撷取关键字看看:
[root@www ~]# modprobe vfat
[root@www ~]# lsmod | grep vfat
vfat 15809 0
fat 51165 1 vfat <==原来就是 fat 这个模组啊!
[root@www ~]# modprobe -r vfat <==测试完移除此模组
核心模组的额外参数设定: /etc/modprobe.conf
这个档案我们之前已经谈过了,这里只是再强调一下而已,如果您想要修改某些模组的额外参数设定, 就在这个档案内设定吧!我们假设一个案例好了,假设我的网路卡 eth0 是使用 ne , 但是 eth1 同样也使用 ne ,为了避免同一个模组会导致网路卡的错乱, 因此,我可以先找到 eth0 与 eth1 的 I/O 与 IRQ ,假设:
eth0 : I/O (0x300) 且 IRQ=5
eth1 : I/O (0x320) 且 IRQ=7
则:
[root@www ~]# vi /etc/modprobe.conf
alias eth0 ne
alias eth1 ne
options eth0 io=0x300 irq=5
options eth1 io=0x320 irq=7
如此一来,我的 Linux 就不会捉错网路卡的对应啰!因为被我强制指定某个 I/O 咯嘛!