在核心設定檔中,我們提到了很多次可動態載入模組,那它到底要如何運作管理呢?且看本章揭曉!!
開機時要載入模組,您應該了解一下 FreeBSD 啟動流程,就會清楚的知道為何是如此以及該如何運用了。
一般來說,在開機時要載入的模組應該是針對週邊裝置的驅動,因為這些週邊裝置的模組,系統是不會自動載入的,它需要您手動載入;而檔案系統模組系統會自行載入。當然,這並非絕對的設置方式,全看您的高興。
要在開機前就將模組載入(等於將驅動程式/介面編入核心中),您可透過 /boot/loader.conf 這個檔案來做設定。它與 /etc/rc.conf 一樣,在 /boot 目錄下尚有個 defaults/ 子目錄,此子目錄下的 loader.conf 檔案,就是系統預設的設定檔,其中有這麼個設定行︰
loader_conf_files="/boot/device.hints /boot/loader.conf /boot/loader.conf.local"
這一行的意思是告訴系統說除了讀取 /boot/defaults/loader.conf 檔案之外,還要去讀取 /boot/device.hints、/boot/loader.conf、/boot/loader.conf.local 這三個檔案,當然,不存在的檔案就不用讀取了。而通常我們是直接將所需的設定一股腦兒的全寫在 /boot/loader.conf 檔案中,因為需要的設定不多。
我們以如下的硬體裝置範例來說明︰
- Sound Card -> Use VIA® VT82C686B chip support DirectSound AC'97
- NET Card -> Use RealTek 8129/8139 chip
- TV Card -> Use Brooktree Bt848/Bt878 chip
- Mouse -> Use USB wheel mouse
不管是啥原因,我們不想將上述週邊給編進 kernel 中,但是卻又必需要使用到它們,且想在開機時就載入。此時,我們先查看 /boot/defaults/loader.conf 檔案,以晶片名稱為關鍵字找出相關的設定,如下︰
### Sound modules ###
snd_via82c686_load="NO" # via82c686 pci
### Networking drivers ###
if_rl_load="NO" # RealTek 8129/8139
### Other modules ###
bktr_mem_load="NO" # Brooktree Bt848/Bt878 Card Memory Holder
bktr_load="NO" # Brooktree Bt848/Bt878 TV/Video Capture Card
### USB modules ###
usb_load="NO" # USB subsystem
ums_load="NO" # Mouse
|
因為直接編改 /boot/defaults/loader.conf 檔案不是好的習慣,所以我們將找到的設定給加入寫到 /boot/loader.conf 檔中,並且將 NO 改為 YES︰
# -- sysinstall generated deltas -- #
# 安裝系統完成時預先產生的設定,為了讀取 /boot/kernel.conf 設定 #
userconfig_script_load="YES"
# 自行加入的設定 #
snd_via82c686_load="YES" # 音效卡
if_rl_load="YES" # 網路卡
bktr_mem_load="YES" # TV 卡
bktr_load="YES" # TV 卡
usb_load="YES" # USB 介面需要
ums_load="YES" # USB Mouse
|
為設定檔加入相關的說明是不錯的習慣,建議您可以養成這個習慣喲 ^_^
至於其他還有哪些設定可以使用的,您應該自行查看過 /boot/defaults/loader.conf 這個檔案,並試著把玩其他的設定,看看會有什麼變化,不然如果全部說光了,那麼就剝奪了您學習、嚐試的樂趣嘍。
偷偷給您一個提示︰有些核心參數是可以在這兒做設定的喲,比如 maxusers
有些功能我們可能只是短暫的使用而已,像這些我們並不需要將它給編進核心中,但是系統會自動依需求而載入的核心模組只有檔案系統與一些虛擬出來的網路裝置和網路系統需求部份而已,如果要用到時,既沒有編進核心也沒有在開機時指定載入,那怎麼辦??
這點 FreeBSD 當然不可能會忘了,並提供了一套不錯用的管理指令,且請看倌耐心等候我們細細道來︰
載入模組
kldload
|
---|
指令用法 | kldload [-v] filename
| 參數解說 | -v => 顯示更多的訊息
| 備 註 |
filename 指的就是模組的檔案名稱。
模組的檔案名稱一定要以 .ko 做結尾,比如︰abc.def_ghi-jkl.ko、zzz.ko
預設存放模組的目錄是 /modules,若要載入非存放於 /modules 目錄下的模組檔案,需要加上完整的路徑 (/path/filename)
模組名稱的 .ko 可不用輸入
沒使用 -v 參數的執行結果
shell # kldload md shell #
有使用 -v 參數的執行結果
shell # kldload -v md Loaded md, id=10 shell #
|
模組狀態
kldstat
|
---|
指令用法 | kldstat [-v] [-i id] [-n name]
| 參數解說 | -v => 顯示更多的訊息 -i => 模組的編號 -n => 模組名稱
| 備 註 |
shell # kldstat
Id Refs Address Size Name
1 7 0xc0100000 17c080 kernel
2 1 0xc0914000 4000 if_tun.ko
3 4 0xc091a000 9000 netgraph.ko
4 1 0xc0927000 3000 ng_ether.ko
5 1 0xc092b000 5000 ng_pppoe.ko
6 1 0xc0931000 3000 ng_socket.ko
7 1 0xc0d45000 3000 md.ko
shell #
shell # kldstat -vi 2
Id Refs Address Size Name
2 1 0xc0914000 4000 if_tun.ko
Contains modules:
Id Name
55 if_tun
shell #
|
卸下模組
kldunload
|
---|
指令用法 | kldunload [-v] -i id kldunload [-v] [-n] name
| 參數解說 | -v => 顯示更多的訊息 -i => 模組的編號 -n => 模組名稱
| 備 註 | 我們要先執行 kldstat 來查看目前所載入的核心模組有哪些,以求得模組的編號或名稱,除非您確定您知道要卸下的模組名稱為何。
|
啥??
這麼好用的工具這樣就沒了?? 是的,真的就是這樣子而已。
您不得不佩服惡魔的法力是如此的龐大 ^_^
|