Linux 核心是一種模組化的設計,在開機時只有一個最小的常駐核心會被載入到記憶體中。因此當使用者要求常駐核心中不存在的特色時,便會動態地載入一個 『核心模組』(有時候稱為一個 『驅動程式』)到記憶體中。
在安裝過程中,會偵測系統上的硬體,依據這次的偵測以及由使用者提供的資訊,安裝程式會決定那些模組需要在開機時載入。 安裝程式會設定一個動態的載入機制以方便運作。
假如在安裝完成後加入新的硬體,而該硬體需要一個核心模組,系統需要經過設定以為新的硬體載入適當的核心模組。 當含有新硬體的系統開機時,便會執行 Kudzu 程式來偵測新的硬體(假如有受支援的話),並且為其設定一個模組。 您也可以編輯 /etc/modules.conf 模組設定檔案來手動地指定模組。
請注意 | |
---|---|
使用來顯示 X 視窗系統介面的顯示卡是 XFree86 套件的一部分,並不屬於核心,因此這個章節不適用它們。 |
舉例來說,假如一部系統含有一個 SMC EtherPower 10 PCI 網路介面卡,模組設定檔案將會包含以下這一行:
alias eth0 tulip |
假如新增第二張網路卡到系統上,並且該卡與第一張卡相同,請新增以下這一行到 /etc/modules.conf 檔案中:
alias eth1 tulip |
請參閱 Red Hat Linux 參考手冊 以找出以字母順序排列的核心模組清單,以及模組所支援的硬體。
假如有安裝 modutils 套件,您便可以使用一組用來管理核心模組的指令,請使用這些指令以決定模組是否被成功載入,或者當您為一個新的硬體測試不同的模組時。
/sbin/lsmod 指令將會顯示目前已經載入的模組清單,例如:
Module Size Used by Not tainted iptable_filter 2412 0 (autoclean) (unused) ip_tables 15864 1 [iptable_filter] nfs 84632 1 (autoclean) lockd 59536 1 (autoclean) [nfs] sunrpc 87452 1 (autoclean) [nfs lockd] soundcore 7044 0 (autoclean) ide-cd 35836 0 (autoclean) cdrom 34144 0 (autoclean) [ide-cd] parport_pc 19204 1 (autoclean) lp 9188 0 (autoclean) parport 39072 1 (autoclean) [parport_pc lp] autofs 13692 0 (autoclean) (unused) e100 62148 1 microcode 5184 0 (autoclean) keybdev 2976 0 (unused) mousedev 5656 1 hid 22308 0 (unused) input 6208 0 [keybdev mousedev hid] usb-uhci 27468 0 (unused) usbcore 82752 1 [hid usb-uhci] ext3 91464 2 jbd 56336 2 [ext3] |
每一行中的第一個欄位是模組的名稱,第二個欄位是模組的大小,而第三個欄位是用量的記數。
最後一個欄位中的資訊對於每一個模組都有些許不同。 假如模組的該欄位列出 (unused),表示該模組目前並不在使用中。 如果是 (autoclean),表示該模組可以由 rmmod -a 指令自動清理(autocleaned),在執行這個指令後,任何被標示為 autoclean 的模組將會被卸載(如果從上一次 autoclean 的動作後都沒有被使用)。 Red Hat Linux 並不預設執行這個 autoclean 的動作。
假如在一行的最後列出一個以括號括住的模組名稱,該模組是依附於該行第一個欄位中所列出的模組。 舉例來說:
usbcore 82752 1 [hid usb-uhci] |
hid 與 usb-uhci 核心模組是依附於 usbcore 模組。
/sbin/lsmod 指令的輸出與檢視 /proc/modules 檔案的內容是相同的。
如要載入一個核心模組,請使用 /sbin/modprobe 指令再加上核心模組的名稱。 預設情況下,modprobe 會試著從 /lib/modules/<核心版本>/kernel/drivers/ 的子目錄載入模組,在其中每一種類型的模組都放置於一個子目錄中,如 net/ 子目錄會存放網路介面驅動程式。 有些核心模組有模組相依性的情況,這表示必須先載入其他模組才能載入這個模組。 /sbin/modprobe 指令將會檢查這些相依性,並且於載入特定模組前先載入相依的模組。
舉例來說:
/sbin/modprobe hid |
這個指令會載入任何的相依模組,然後再載入 hid 模組。
如要在螢幕上列出所有指令一如 /sbin/modprobe 執行它們,請使用 -v 選項,例如:
/sbin/modprobe -v hid |
會顯示類似如下的輸出:
/sbin/insmod /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o Using /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.o Symbol version prefix 'smp_' |
/sbin/insmod 指令也可用來載入核心模組,然而它並不解決相依性的問題,因此還是建議您使用 /sbin/modprobe 指令。
如要卸載核心模組,請使用 /sbin/rmmod 指令再加上模組名稱。 rmmod 指令只能卸載不在使用中的模組,而且該模組並不依附於其他使用中的模組。
例如這個指令
/sbin/rmmod hid |
將會卸載 hid 核心模組。
另一個好用的核心模組工具是 modinfo,請使用 /sbin/modinfo 指令來顯示關於一個核心模組的資訊,一般的語法是:
/sbin/modinfo [選項] <模組名稱> |
包含 -d 選項將會秀出該模組的一個簡短的描述,而 -p 選項則會列出該模組所支援的參數。 如要取得完整的選項清單,請參考 modinfo 的 man page (man modinfo)。