2009年1月13日 星期二

核心模組的載入與移除: insmod, modprobe, rmmod

好了,如果我想要自行手動載入模組,又該如何是好? 有很多方法啦,最簡單而且建議的,是使用 modprobe 這個指令來載入模組, 這是因為 modprobe 會主動的去搜尋 modules.dep 的內容,先克服了模組的相依性後, 才決定需要載入的模組有哪些,很方便。至於 insmod 則完全由使用者自行載入一個完整檔名的模組, 並不會主動的分析模組相依性啊!
[root@linux ~]# insmod [/full/path/module_name] [parameters]

範例一:請嘗試載入 /lib/modules/`uname -r`/kernel/fs/smbfs/smbfs.ko
[root@linux ~]# insmod /lib/modules/`uname -r`/kernel/fs/smbfs/smbfs.ko
[root@linux ~]# lsmod | grep smbfs
smbfs 67897 0
對吧!他立刻就將該模組載入囉~這個需要加入完整檔名啦!那如何移除這個模組呢?
[root@linux ~]# rmmod [-fw] module_name
參數:
-f :強制將該模組移除掉,不論是否正被使用;
-w :若該模組正被使用,則 rmmod 會等待該模組被使用完畢後,才移除他!
範例:


範例一:將剛剛載入的 smbfs 模組移除!
[root@linux ~]# rmmod smbfs
帥吧!移除掉了。不過,如前所述的, insmod 實在不怎麼人性化,近年來, 我們都建議直接使用 modprobe 來處理模組載入的問題,這個指令的用法是:
[root@linux ~]# modprobe [-lcf] module_name
參數:
-c :列出目前系統所有的模組!(更詳細的代號對應表)
-l :列出目前在 /lib/modules/`uname -r`/kernel 當中的所有模組完整檔名;
-f :強制載入該模組;
-r :類似 rmmod ,就是移除某個模組囉~
範例:


範例一:載入 smbfs 模組
[root@linux ~]# modprobe smbfs
# 很方便吧!不需要知道完整的模組檔名,這是因為該完整檔名已經記錄到
# /lib/modules/`uname -r`/modules.dep 當中的緣故啊!如果要移除的話:

[root@linux ~]# modprobe -r smbfs
使用 modprobe 真的是要比 insmod 方便很多!因為他是直接去搜尋 modules.dep 的紀錄, 所以囉,當然可以克服模組的相依性問題,而且還不需要知道該模組的詳細路徑呢! 好方便! ^_^