站长论坛

标题: 核心模组的载入与移除 [打印本页]

作者: tznktg    时间: 2010-2-17 18:28
标题: 核心模组的载入与移除
 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 咯嘛!




欢迎光临 站长论坛 (http://www.tzlink.com/bbs/) Powered by Discuz! X3.2