FreeBSD 核心設定
為什麼要定製一個核心?
建立一個定製的核心是每個 Unix 系統管理員所必須經歷的重要儀式之一。 雖然會耗去不少時間,不過這項過程將帶給你的 FreeBSD 系統不少好處。跟必 須支援絕大部分的 SCSI 卡、網路卡,以及其他常見的硬體週邊的 GENERIC 核心不同,一個定製的核心只需支援 你的 電腦硬體,這樣有下列幾個好處:
開機的速度較快,因為無須浪費時間偵測你沒有的硬體裝置。
一個定製的核心通常使用較少的記憶體。這是很重要的一點,因為核心 程序必須一直存在於記憶體之中,佔的記憶體越多,你的程式能用的記憶體 就越少。對一些記憶體有限的系統而言,這點尤其重要。
最後一點,有些核心參數可以讓你微調,以適合你的系統使用;你也可 以加入一些原本不在 GENERIC 核心之中的硬體裝置 驅動程式,像是音效卡。
建立並安裝一個定製的核心
首先,讓我們快速的瀏覽一下 kernel build directiry。所有我們提到的 目錄都在 /usr/src/sys 這個主目錄之下,你也可以透 過 /sys這個 link 來存取。在這個目錄下,有不少的副 目錄,其中放置了核心各不同部分的程式、資料等等。在這些目錄之中,有兩個 是本章討論的重點,一個是 i386/conf─你將會在這個 目錄下編寫你的核心設定檔;另一個是 compile 目錄─ 你將在這個目錄下編譯你的核心。注意一下這個目錄的邏輯結構,所有支援的硬 體裝置驅動程式、檔案系統、參數選項,都放在各自的目錄。另外,所有放在 i386 目錄下的只跟 PC 硬體有關,而 i386 目錄之外的其他目錄,則是其他 FreeBSD 可能會移植過去的平 台會共用到的部分。
Note: 如果你的系統內 沒有 /usr/src/sys 這個目錄,那表示你沒有安裝好核心的原始程式碼,最快速的安 裝方式,就是以 root 身分執行 /stand/sysinstall,選擇 Configure,選擇 Distributions,選擇 src,最後 選擇 sys 選項。
接下來,切換到 i386/conf 這個目錄,並且將 GENERIC 複製一份,並給這個檔案一個易於辨認名稱, 這個名稱就是你的核心名稱。例如:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
依照慣例,核心名稱最好全用大寫字母。此外,如果你要管理很多部硬體 配備不同的機器,在核心名稱後加上各個主機名稱是個不錯的做法。在接下來 的章節,我們會用 MYKERNEL 來當作範例。
Note: 在做接下來的動作,請確定你是以 root 身分執行,不然你將會看到 permission denied 這個錯誤訊息。
現在,用你最上手的編輯器編輯 MYKERNEL。 如果你才剛裝好你的系統,那麼系統裡面唯一可用的編輯器大概是 vi 了,vi 是個頗複雜的編輯器,在這裡我們不加以贅 述,你可以參考 bibliography 的介紹 。此外,FreeBSD 還提供了一個叫 ``ee'' 的簡單編輯器,如果你是 新手,ee 是個不錯的選擇。你可以隨心所欲的修改你的核心設定檔最上面的註 解,反映出你做過的設定或修改,以別於 GENERIC。
如果你曾經在 SunOS 或是其他 BSD 作業系統下建立過核心,你對這個檔案 的不少內容會有種似曾相似的感覺。如果你才剛從其他作業系統─像是 DOS,轉 移過來,你可能會被 GENERIC 的內容給嚇到,所以請慢 慢並仔細地閱讀 設定檔 這章 節。
Note: 如果你想把你的舊版核心更新成新版的,你最好從你抓取核心原始程式碼 的地方順便抓取新版的 config(8) ,相關的原始程式碼會被放置在 /usr/src/usr.sbin,所以在做接下來的動作前,你必 須先下載這些程式碼,編譯,然後安裝到你的系統裡頭。
當你做完以上步驟後,輸入以下指令來編譯並安裝你的新核心:
# /usr/sbin/config MYKERNEL
# cd ../../compile/MYKERNEL
# make depend
# make
# make install
新的核心將被複製到根目錄,叫做 kernel,而舊的 將被更名成 /kernel.old。現在關閉你的系統並重開機 以便系統能載入新的核心。如果你遇到任何困難,請參考本文件最後的 troubleshooting 指示。無論是否 能開機成功,你最好仔細的閱讀 無法開機 這個小節。
Note: 如果你加裝了任何新硬體裝置(像是音效卡),你可能要到 /dev 目錄下增加一些裝置節點,這樣你才能夠使用這些 硬體裝置。
核心設定檔
核心設定檔的格式是很簡單的,每一行包含了一個關鍵字(keyword) 與一個 或多個參數,而大多數的設定都只包含一個參數。# 號之 後的敘述都是註解,並會被程式忽略。接下來的每個小節,將依序介紹每個列在 GENERIC 的參數,雖然各相關主題(如網路)的關鍵字會 放在同一小節,但是這些關鍵字可能散落在 GENERIC 的 各處。 詳細的列出各個選項(option),而 LINT 列出絕大部分的選項(options),比起在同目錄下 的 GENERIC,有更詳盡的解釋。如果你不確定某一行設 定的目的或是否必要,請先看看 LINT。
目前核心在處理各個選項上正轉換到一個比較好模式。 傳統上,設定檔案中的各個選項皆轉換成核心程式的 Makefile 中, 屬於 CFLAGS 的一個 -D 參數。 久而久之,這造成了一個選項處理機制的一個問題, 沒有人知道在那一個檔案中參考使用了那一個選項。
在新的機制中,使用 #ifdef 來參考選項的程式碼是存放在由執行 config 時所產生的 opt_foo.h 。 由 config 所產生的有效的選項清單儲存在兩個檔案裡: 獨立於系統架構的選項列在 /sys/conf/options, 與系統架構有關的選項則列在 /sys/arch/conf/options.arch, 其中 arch 的一個例子便是 i386.
數字的引號限制(Quoting numbers): 目前所有 FreeBSD 版本,包括 3-stable 版,其核心設定檔中若有任何 屬於文字形式的數字(如 i386),必須用雙引號包起來,不然執行 config(8) 時會出錯。
如果數字是表示數目、個數,如 maxuser 64 這個 設定,則 不要 加雙引號。
目前 FreeBSD CURRENT 版本已經解除上述限制,不論是哪種形式的數字 都不需要加雙引號。
本章節的範例,在文字形式的數字前後仍加了雙引號(" ),如果你使用 FreeBSD CURRENT,則請自動去除雙引號。
7.3.1. 一定要有的關鍵字
以下介紹的關鍵字,必須存在於每個核心設定檔之中。
machine arch
第一個關鍵字 machine,表示 FreeBSD 執行 的硬體平台,不是 Intel 386 (與相容機種)就是 DEC Aplha 兩者,其 參數分別為 i386 與 alpha。
cpu "cpu_type"
接下來的關鍵字是 cpu,設定 FreeBSD 所能 支援的 CPU。i386 系統能夠設定的 cpu_type 值包括以下幾種:
I386_CPU
I486_CPU
I586_CPU
I686_CPU
以下則是採用 DEC Alpha CPU 機種能設定的 cpu_type 值:
EV4
EV5
在 GENERIC 核心中同時設定了數個不同的 cpu 參數,但是對一個量身定製的核心而言,最 好只設定適合你 CPU 的參數。例如你有一台使用 Pentium CPU 的機器 ,就設定 cpu 值是 I586_CPU 。
ident machine_name
接下來,我們設定 ident,這是一個核心的 識別字。你應該自己命名一個容易辨認的名稱,以有別於 GENERIC 的名稱─GENERIC。放在 ident 後的參數,將在你用這個核心開機時顯示在螢幕上,如 果你同時設定了數個核心(例如實驗性質的),採用不同的名稱是個不錯 的做法。注意,如同 machine 與 cpu 這兩個設定,如果你的核心名稱包含數字,請記得用 雙引號把它包起來。
核心名稱將會使用 -D 參數傳給編譯器,所以 不要用像是 DEBUG 或是其他可能干擾編譯器的 機器、CPU 名稱,如 vax。
maxusers number
這個設定的大小值定義了重要的 system tables。這個數值粗略 假設你的機器同時會有多少使用者。然而,在一般情形下,你最少要 設定 4,以上,特別是你要執行 X Window 或 是編譯程式。原因是 maxusers 值限定了系統 同時可有多少個 processes,其算法是 20 + 16 * maxusers。如果你設定 maxusers 值是 1,則你的系統只能同時存在 36 個 processes,包括 18 個(或更多)系統開機即佔去的 processes,如果 你執行了 X Window,則又要吃掉 15 個以上。甚至執行閱讀一個 man page 也會開啟九個 processes 來過濾、解壓縮、然後顯示出來。設 定 maxusers 4,則系統可以同時有 84 個 processes,對任何人應該都是足夠的。當你執行程式時,得到像是 ``proc table full'' 這樣的錯誤訊息,或是你 要架設一個同時會有很多人來存取的網站(如 Walnut Creek CDROM 的 FTP),你就要增加這個設定的值,然後重新編譯核心。
Note: maxuser 這個參數 並不是 代表著可以同時使用你的電腦的使用者。 它只是基於系統中最多使用者以及每個使用者執行程式的個數, 對於設定了一些系統所使用的表格的合理大小。 有一個關鍵字的值則 真的 限制了可以同時 遠端連線 (remote logins) 的人數是 pseudo-device pty 16.
config kernel_name root on root_device
這行設定指定核心的名稱與所在,傳統上,Unix 核心被叫做 vmunix,但是在 FreeBSD 上,我們直接用 kernel 來稱呼核心。你不可以隨意使用 kernel 以外的字來當作核心名稱,不然許多 系統程式會無法正確執行。這個設定的第二部分告訴系統在哪個磁碟機 上的哪個分割區可以找到 root filesystem 與核心。一般而言, wd0 表示核心不在 SCSI 磁碟上,而 da0 表示核心在 SCSI 磁碟上。
7.3.2. 一般選項
以下參數設定核心能支援的檔案系統與其他選項。
options MATH_EMULATE
如果你的電腦沒有浮點運算處理器(386 或 486SX),你可以加入這 行,使得核心提供軟體模擬的浮點運算處理器。如果你用的是 Pentium 、486DX,或是 386SX、486SX,但是另外加裝 387、487,則你不需要 這行設定。
Note: 這個模擬的浮點運算處理器並不是很精 確,如果你沒有浮點運算器,且你需要較高的精度,你可以改用 GPL_MATH_EMULATE 參數,這將會 使用 GNU 的 浮點運算模擬器。至於為什麼這個模擬器不是系統預設值,是因為 GUN 使用執照的關係。
options "COMPAT_43"
使系統相容 4.3BSD,不要拿掉這一行,不然部分程式將無法正常 執行。
options UCONSOLE
允許使用者擷取 console 資訊,對 X Window 頗為有用。舉例來 說,你可以輸入 xterm -C 來開啟一個 console xterm,這個視窗將顯現任何 write、 talk 等指令的訊息,以及你送出去的訊息。當 然,kernel 產生的訊息也會在這裡出現。
options SYSVSHM
提供 System V Shared memory(SHM) 的支援,最常用到 SHM 的 應該是 X Window 的 XSHM 延伸,不少繪圖相關程式(像是影片撥放程 式 XAnim 與 Linux DOOM 遊戲)會自動使用 SHM 以提供額外的速度。 如果你要使用 X Window,你最好加入這個選項。
options SYSVSEM
支援 System V semaphores,比較不常用到,但是只在 kernel 中 佔用幾百位元組的空間。
options SYSVMSG
支援 System V messages,一樣的,只佔用 kernel 數百位元組的 空間。
Note: ipcs(1) 指令可以顯示出任何使用到上述三個 System V 功能的 processes。
7.3.3. 檔案系統選項
以下的選項可支援不少檔案系統,你至少要加入一樣支援你開機裝置的檔 案系統,一般來說,如果你要從硬碟開機,則要有 FFS ,如果你要使用無磁碟工作站,從乙太網路上開機,則要有 NFS 。你可以在你的核心加入其他常用的檔案系統,但可隨意移除其他 不常用到的檔案系統(也許是 MS-DOS 檔案系統?),因為在你第一次掛入此類 核心不支援的檔案系統時,你的核心會從 /modules 目錄動態載入模組來支援之。
options FFS
最基本的硬碟檔案系統,如果你要從硬碟開機,就留著。
options NFS
網路檔案系統(Network Filesystem, NFS),除非你要從網路上的 其他主機掛入目錄,不然你可以用 # 號註解掉這行設定。
options MSDOSFS
MS-DOS 檔案系統。除非你要在開機時掛入一個 DOS 格式的硬碟, 不然你可以放心的把這行註解掉。如同前述,在你第一次掛入一個 DOS 分割區時,核心將會自動載入模組來支援它。此外, mtools 這個相當不錯的軟體(可在 ports 裡面找到), 可以讓你存取 DOS 磁片,而不需要掛入或卸載軟碟(而且也不需要 MSDOSFS 的支援)
options "CD9660"
CD-ROM 使用的 ISO 9660 檔案系統。如果你沒有光碟機,或是很 少用光碟機讀取資料,可以註解掉這一行(核心會在第一次掛入時動態 載入模組以支援之)。音樂 CD 則不會用到這個檔案系統。
options PROCFS
Process filesystem。這是一個虛擬的檔案系統,掛在 /proc 之下,允許一些程式,像是 ps(1) 來讀取資料,提供你正在執行的 processes 的資訊。
options MFS
Memory-mapped file system。提供 RAM disk,以供需要快速存取 的資料或是暫存資料用,如果你分割了不小的 swap 空間,使用這個選 項可以提供給你不少好處。把 /tmp 掛入到 MFS 分割區是一個相當好的想法,因為不少程式都會在此暫存資料。 要把 /tmp 掛到 MFS RAM disk,可以修改 /etc/fstab,加入以下那一行,然後重開機, 或是鍵入 mount /tmp:
/dev/wd1s2b /tmp mfs rw 0 0
Note: 把 /dev/wd1s2b 換成你的 swap 分割區 ,swap 分割區會列在 /etc/fstab,看起來 像下面那一行:
/dev/wd1s2b none swap sw 0 0
Note: 記住,MFS 檔案系統 不能 夠使用動態載入的方式,如果你要使用它,你必須將這 設定加入到你的核心。
options "EXT2FS"
Linux 原生檔案系統,讓你可以讀、寫 Linux 分割區,如果你的 電腦同時裝有 FreeBSD 跟 Linux,加入這個選項,可以方便的共享兩 個系統的資料。
options QUOTA
啟動磁碟配額限制(Disk Quota)。如果你有一台提供公眾服務的 機器,且你不希望用完 /home 分割區的空間 ,你可以為設定使用者可用的磁碟配額, 磁碟配額 有更詳盡的說明。
7.3.4. 基本的控制器與裝置
本小節介紹 FreeBSD 支援的磁碟、磁帶與 CD-ROM 控制器。這個小節與 SCSI 控制器還有 網路卡的部分是分開的。
controller isa0
所有 FreeBSD 所支援的 PC 都需要這行設定。如果你使用 IBM PS/2 (微通道架構)電腦,則你無法在該機器上執行 FreeBSD。
controller eisa0
如果你的主機板上有 EISA 匯流排,加入這個設定。使用這個選項 可以自動偵測並設定所以連接在 EISA 匯流排上的裝置。
controller pci0
如果你的主機板有 PCI 匯流排,就加入這個選項。使用這個選項 可以自動偵測 PCI 卡並 gatewaying from the PCI to the ISA bus.
controller fdc0
軟式磁碟機控制器: fd0 是 A: 磁碟機,fd1 是 B: 磁碟雞。ft0 則是連接到軟式 磁碟機控制器的 QIC-80 磁帶機。如果你沒有上述裝置,就註解掉相關 的幾行設定吧。
Note: QIC-80 磁帶機支援需要一個獨特的程式,叫做 ft(8),請 查閱 manual page 以得到詳細資訊。
controller wdc0
這是主要的 IDE 控制器。wd0 跟 wd1 分別是 master 與 slave。以此類推,wdc1 是次要的 IDE 控制器,而你可能在上面接了第三或第四個 硬碟,或是 IDE CD-ROM。註解掉沒用到的那幾行(例如你使用 SCSI 硬 碟,你可能可以註解掉全部六行)。
device acd0
這個裝置提供對 IDE CD-ROM 的支援。確定你留下了 wdc0 與 wdc1,當你有一個以上的 IDE 控制器,且 CD-ROM 接在次要的控制器上。另外,你必須加入 options ATAPI,這樣才能正常無誤的使用 CD-ROM。
device npx0 at isa? port "IO_NPX" irq 13 vector npxintr
npx0 是連接 FreeBSD 中浮點運算處理器的 一個介面,不論你有硬體的浮點運算處理器還是使用軟體模擬,都需要 這個設定。這個設定並不是可有可無的。
device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr
Wangtek and Archive QIC-02/QIC-36 磁帶機的支援。
專屬介面 CD-ROM 的支援
接下來的設定是一些採用專屬介面的 CD-ROM 的驅動程式。這些裝置使用自己的控制卡,或是連接到音效卡 上,如聲霸卡 16。這些控制器不屬於 IDE 或 SCSI 控制器,大多數老舊的一倍數與二倍數 CD-ROM 採用這些介面, 而四倍數以上的幾乎都使用 IDE 或是 SCSI 介面。
device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr
Mitsumi CD-ROM (LU002, LU005, FX001D).
device scd0 at isa? port 0x230 bio
Sony CD-ROM (CDU31, CDU33A).
controller matcd0 at isa? port ? bio
Matsushita/Panasonic CD-ROM (與創巨聲霸卡一起搭售)。
7.3.5. SCSI Device Support
本小節介紹不少 FreeBSD 支援的 SCSI 控制器與裝置。
SCSI 控制器
接下來的十餘行介紹各式各樣 FreeBSD 支援的 SCSI 控制器,註 解掉其他的,只留下你有的:
controller bt0 at isa? port "IO_BT0" bio irq ? vector btintr
支援絕大部分的 Buslogic 控制器。
controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr
UltraStor 14F 與 34F
controller ahc0
Adaptec 274x/284x/294x
controller ahb0 at isa? bio irq ? vector ahbintr
Adaptec 174x
controller aha0 at isa? port "IO_AHA0" bio irq ? drq 5 vector ahaintr
Adaptec 154x
controller aic0 at isa? port 0x340 bio irq 11 vector aicintr
Adaptec 152x 與使用 Adaptec AIC-6360 晶片的音效卡 (頗慢!)。
controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr
使用 NCR 5380 或 Trantor T130 的 ProAudioSpectrum 音 效卡。
controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
Seagate ST01/02 8 位元控制器(頗慢!)。
controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr
Western Digital WD7000 控制器
controller ncr0
NCR 53C810, 53C815, 53C825, 53C860, 53C875 PCI SCSI 控制器
Note: 本設定亦支援 Diamond FirePort控制器。
options SCSI_DELAY=15000
這行設定告訴核心等待 15 秒鐘,以供 SCSI 控制器偵測你電腦上 的 SCSI 裝置。如果你只有 IDE 硬碟,你可以不要理會這個設定,不 然你可能會想要降低這個值,也許降到五秒,以增加開機的速度。如果 你發現降低後,FreeBSD 無法正確辨認你的 SCSI 裝置,那麼你該提高 這個值,延長等待時間。
controller scbus0
如果你有任何 SCSI 控制器,必須加入這行以提供一般性的 SCSI 支援。如果你沒有任何 SCSI 裝置與控制器,你可以註解掉一行,以及 接下來的幾行。
device da0
對 SCSI 硬碟的支援。
device sa0
對 SCSI 磁帶機的支援。
device cd0
對 SCSI CD-ROM 的支援。
device ch0
支援可自動換片的 SCSI 媒體,像是磁帶櫃。
device pass0
CAM 穿透支援
注意上面的數字 0 可能會造成一些誤會: 這些所有的裝置的組態在被發現的時候就已經自動的設定好了, 無論有幾個裝置與 SCSI 匯流排連結, 也不管到底他們的 ID 是多少。
如果想要 ``知道(wire down)'' 特定的 ID 對應的裝置的種類,請參考在 LINT 核心設定檔中對應的部分。
Console、Bus Mouse、鍵盤、以及 X Server 的支援
你必須在兩種 console 模式中選擇一個,如果你要在 X Window 下使用 vt220 console,就加入 XERVER 選項,並加入 bus mouse 或 PS/2 滑鼠的選 項。
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
sc0 是預設的 console 驅動程式,絕大部分 全螢幕程式都透過 termcap 這類 terminal database library 來存取 console,因此不論你用這個驅動程式或是 VT220 相容 console 驅動程式 vt0,其間並無太 大差別。如果使用 sc0,且你在登入系統後,執行全螢幕程式遇到問題 ,請將你的 TERM 設定成 ``scoansi''。
controller atkbdc0 at isa? port IO_KBD tty
鍵盤控制器 atkbdc 提供 AT 鍵盤輸入以及 PS/2 指標裝置的 I/O 服務。鍵盤驅動程式 atkbd 與 PS/2 滑鼠驅動程式 psm 需要 這個控制器,所以不要移除它。
options "KBD_RESETDELAY=X", options "KBD_MAXWAIT=Y"
鍵盤驅動程式 atkbd 與指標輸入裝置 驅動程式 psm 可跟 atkbdc 要求要在開機時重置這些裝置。有時候這些裝 置需要較長時間來回應重置命令。這兩個選項告訴 atkbdc 該等多久;驅動程式最多將等待 X * Y 毫秒,如果還是沒回應就放棄。如果驅動 程式無法正確的偵測到裝置,你可能需要增加這些值。預設的 X 值是 200 毫秒, y 值是 5 毫秒。
options "KBDIO_DEBUG=N"
設定除錯等級,預設值是 0,隱藏所有除錯輸出。
Note: 每個系統只能設定一個 atkbdc 裝置。
device atkbd0 at isa? tty irq 1
atkbd 驅動程式,與 atkbdc 控制器一起作用,提供連接到 AT 鍵盤控 制器的 AT 84 鍵鍵盤與 AT 加強型鍵盤的存取服務。
device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint
這是一個相容 VT220 的 console 驅動程式,並向下相容 VT100/ 102。在部分與 sc0 相衝的筆記型電腦上,這個 驅動程式運作良好。當然,當你登入系統時,記得設定 TERM 參數為 vt100 或是 vt220。 當連接到網路上許多電腦時,這個驅動程式也常是很有用的, 這是因為許多的電腦上的 termcap 或是 terminfo 並沒有 sc0 的資料 -- 而 vt100 的資料幾乎所有的平台上都有支援。
options "PCVT_FREEBSD=210"
vt0 console 驅動程式需要這個選項 。
options XSERVER
只能跟 vt0 console 驅動程式搭配使 用。這個驅動程式包含了在 vt0 console 驅動程式下執行 XFree86 X Window Server 的程式碼。
device mse0 at isa? port 0x23c tty irq 5 vector ms
如果你有羅技(Logitech) 或 ATI InPort bus mouse 介面卡,就 加入這個裝置。
Note: 如果你用序列埠滑鼠,就別理會這兩行設定與說明,並記得看看 序列 埠是否有啟 動(通常是 COM1)。
device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
如果你的滑鼠連接到 PS/2 滑鼠埠,就使用這個裝置驅動程式。
序列埠與並列埠
絕大部分的系統都會有序列埠與並列埠,如果你有一台印表機,連接到其 中某個埠,可以看看 列印 這個章節,相 信可以給你不少助益。如果你要使用數據機,Dialup access 章節,對序列埠的設定與這些裝 置的用法,有更詳盡的介紹。
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
sio0 到 sio3 可看做是 MS-DOS 系統中的 COM1 到 COM4。如果你使用內接式的數據 機,且佔用 COM4,而你的系統又有 COM2,則你必須修改數據機的 IRQ 為 2(IRQ 2 跟 IRQ 9 是一樣的),這樣你才能正常使用數據機。如果 你有一張多埠序列卡,請參閱 sio(4) 以得到更詳細的資訊。部 分顯示卡(特別是使用 S3 晶片的卡),用到 0x*2e8 這個 I/O 位址,而一些便宜的序列卡,沒辦法正確解碼 16 位元的 I/O 定址空間,因此兩張卡會相衝,導致 COM4 無法正常使 用。
每個序列被都要有一個唯一的 IRQ(除非你用的是可以共享中斷的 多埠卡),所以 COM3 與 COM4 預設的 IRQ 將無法使用。
controller ppbus0
提供對並列埠的支援
device ppc0 at isa? port? tty irq 7
ISA-bus 並列埠介面
device lpt0 at ppbus?
提供使用並列埠的印表機的支援。
Note: 要使用並列埠印表機,就必須同時加入上面三行設定。
網路
FreeBSD,與一般的 Unix 一樣,特別強調網路功能。就算你沒有網路卡 ,你仍須注意一定要有的網路設定,與撥接網路服務。
options INET
提供網路支援。就算你不打算連上網路,你還是要留著這個選項。 絕大部分的程式,至少需要回溯介面(像是與你自己的電腦建立網路連 線),因此這個選項是一定要有的。
乙太網路卡
接下來的幾行,介紹不少乙太網路卡,如果你沒有網路卡,你可以 註解掉全部的網路卡設定。除此之外,你可留下能支援你網路卡的驅動 程式。
device cs0
IBM Etherjet 與其他使用 Crystal Semi CS89x0 晶片的網 路卡。
device de0
使用 DEC DC21040、DC21041、DC21140 等晶片的網路卡。
device fxp0
Intel EtherExpress Pro/100B
device vx0
3Com 3C590 與 3C595 (有臭蟲!)
device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr
Cronyx/Sigma multiport sync/async (with Cisco or PPP framing)
device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr
使用 Western Digital 與 SMC 80xx and 8216晶片,以及 Novell NE1000、NE2000,3Com 3C503,HP PC Lan Plus (HP27247B 與 HP27252A) 等等網路卡。
device el0 at isa? port 0x300 net irq 9 vector elintr
3Com 3C501 (頗慢!)
device eg0 at isa? port 0x310 net irq 5 vector egintr
3Com 3C505
device ep0 at isa? port 0x300 net irq 10 vector epintr
3Com 3C509 (有臭蟲!)
device fe0 at isa? port 0x240 net irq ? vector feintr
Fujitsu MB86960A/MB86965A Ethernet
device fea0 at isa? net irq ? vector feaintr
DEC DEFEA EISA FDDI 配接卡
device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr
AT&T StarLAN 10 與 EN100; 3Com 3C507; unknown NI5210; Intel EtherExpress 16
device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr
Digital Equipment EtherWorks 2 與 EtherWorks 3 (DEPCA, DE100, DE101, DE200, DE201, DE202, DE203, DE204, DE205, DE422)
device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr
Lance/PCnet 網路卡 (Isolan, Novell NE2100, NE32-VL)
device xl0
使用 3Com Etherlink XL 系列 PCI 乙太網路控制晶片 (3C905B 與相關產品)的網路卡。
device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr
使用 IBM/National Semiconductor PCMCIA 乙太網路控制 晶片的網路卡。
device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr
3Com PCMCIA Etherlink III
Note: 對部分網路卡(特別是 NE2000 相容卡),你必須自己設定 I/O 位址與 IRQ 值,因為這些卡並無所謂的標準設定。
pseudo-device loop
loop 是一個通用的 TCP/IP 回溯介面。如果 你用 telnet 或 ftp 連回到 localhost(等同於 127.0.0.1),則該連線會透過這個 虛擬裝置連回來。這是一定要有的設定,請勿拿掉。
pseudo-device ether
當你有乙太網路卡,並且想使用它的時候,你才需要這個虛擬裝置 ether,。
pseudo-device sl number
sl 是給 SLIP (Serial Line Internet Protocol) 用的。目前幾乎都被設定簡單、適合 modem 對 modem 連線 的 PPP 給取代了。sl 後面接的 number,表示最多同時能支援幾個 SLIP 連線。本使用手冊其他章節對 SLIP 有更詳盡的介紹,請參閱: client 或 server。
pseudo-device ppp number
ppp 提供核心模式(kernel-mode)的 PPP 撥 接支援。另外有一個 tun 則是使用者模式 (user-mode)的 PPP 支援,tun 較有彈性 且功能較多。如果你要使用這個 PPP 驅動程式,請參閱 核心模式 PPP 這一章節。如同 sl,number 設定 系統最多同時能支援幾個 PPP 連線。
pseudo-device tun number
tun 是使用者模式的 PPP 軟體。這支程式設 定相當方便,且速度很快。它有一些特殊的功能,像是在需要時連線時 自動撥號(dial-on-demand)。tun 後面接的數字 設定系統同時能支援幾個 PPP 連線。參閱 使用者模式 PPP 以獲得更多資訊。
pseudo-device bpfilter number
柏克萊的封包過濾器(Berkeley packet filter)。這個虛擬裝置允 許網路配接卡切換到雜亂(promiscuous)模式,擷取廣播式網路上的每 一個封包(像是乙太網路)。這些封包可以被抓到硬碟裡,或是被 tcpdump(1) 程式給解讀出來。注意,使用這個裝置可能會危害 到網路的整體安全。最後面接的 number 設定最多同時可以有幾張配接卡可以被檢測。這是一個可有可無的選項 ,但建議是不要使用,除非你知道有什麼潛在的危險。並不是所有的網 路卡都支援這個功能。
音效卡
這個小節包含的幾行設定,並沒有放在 GENERIC 核心之中,若你要加入音效卡支援,你必須到 LINT 核心(LINT 包含所有的裝 置驅動設定)複製正確的幾行設定,加到你的核心設定之中。 以下介紹各類音效卡設定:
controller snd0
通用的音效卡支援。除了 pca 與 pcm 以外,所有的音效卡都需要這個設定。
device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr
ProAudioSpectrum digital audio 與其 MIDI 支援。
device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr
SoundBlaster 數位音效支援。
Note: 如果你的音效卡使用不同的 IRQ(像是 IRQ 5),記得要把 irq 7 改成正確的值,如 irq 5,然後移除 conflicts 這個關鍵字。
device sbxvi0 at isa? drq 5
SoundBlaster 16 16-bit 數位音效支援。
Note: 如果你的 SB16 使用不同的 DMA 通道(像是 6 或 7),記得改變 drq 5 成你的音效卡設定值。
device sbmidi0 at isa? port 0x330
SoundBlaster 16 MIDI 介面。如果你有 SB16,你一定要加入這一 行,不然核心將無法編譯。
device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr
Gravis Ultrasound 的支援。
device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr
Microsoft Sound System 的支援。
device opl0 at isa? port 0x388 conflicts
魔奇音效卡(AdLib) FM 合成音效支援。如果你使用 AdLib、Sound Blaster 與 ProAudioSpectrum 任一張卡,並要使用 playmidi(包含在 ports 裡面)來撥放 MIDI,就 加入這個設定。
device mpu0 at isa? port 0x330 irq 6 drq 0
Roland MPU-401 介面卡的支援。
device uart0 at isa? port 0x330 irq 5 vector "m6850intr"
支援使用 6850 UART 的 MIDI 介面卡。
device pca0 at isa? port "IO_TIMER1" tty
使用 PC 喇叭來撥放數位音效。注意,音質極差且非常耗 CPU 資 源(不過不需要任何音效卡)。
device pcm0 at isa? port ? tty irq 10 drq 1 flags 0x0
pcm 驅動程式支援相容 WSS/MSS 或 Sound Blaster Pro、Sound Blaster 16 的各式音效卡。
Note: 額外資訊可在 /usr/src/sys/i386/isa/sound/ 與 /usr/src/sys/i386/isa/snd/ 兩個檔案找到。 如果你要使用任何音效裝置,確定你加入了音效的 裝置蜃I。
虛擬裝置
虛擬裝置屬於核心的一部份,其行為有如一般裝置,但是機器上並無相對 應的真實硬體存在。網路相關 節介紹網路方面的虛擬裝置。本章節介紹其他的虛擬裝置。
pseudo-device gzip
gzip 讓你能執行壓縮過的 FreeBSD 程式。 在 /stand 目錄下的檔案都是壓縮過的,所以 在你的核心中加入這個選項是個明致的選擇。
Note: 只有 a.out 執行檔才能使用 gzip 功能。
pseudo-device log
log 是用來記錄核心產生的錯誤訊息,這是 一定要有的設定,不可以拿掉。
pseudo-device pty number
pty 是虛擬的終端機,或模擬的 login port 。Ctelnet 或 rlogin 連線 、xterm 以及其他應用程式如 emacs 會用到 pty。 number 設定系統的 pty 個數。系統預設值是 16,如 果你要提高同時連線數,可以適當增加這個數值,最高可達 256 個。
pseudo-device snp number
監看裝置。這個虛擬裝置允許使用者 使用 watch(8) 指令,從一個終端機監看另一個終端機。注意,使用 這項功能牽涉到系統安全與個人隱私的問題。number 設定同時能執行幾個監看程式。這個選項可有可無。
pseudo-device vn
Vnode 驅動程式。經過 vnconfig(8) 設定後,可將檔案視為 一個裝置來使用。這個驅動程式,在管理軟碟機的映像檔(image)與把 檔案當作 swap 裝置(像是 MS Windows 的置換檔)上頗為有用。這個選 項可有可無。
pseudo-device ccd number
連結磁碟(Concatenated disks)。這個虛擬裝置允許你連結數個磁 碟機的分割區成一個大磁碟。number 表 示最多會建立幾個連結磁碟(不是所有可以被連結的磁碟機個數)。參閱 ccd(4) 與 ccdconfig(8) 以獲得更多資訊。這個選項可有 可無。
搖桿、PC 喇叭、雜項
這個章節介紹 FreeBSD 支援的雜項硬體裝置。注意,這些設定沒有包含 在 GENERIC 核心,你必須從本使用手冊,或是 LINT 核心複製正確的設定, 加入到你的核心之中。
device joy0 at isa? port "IO_GAME"
PC 搖桿裝置。
pseudo-device speaker
支援 IBM PC 喇叭。/usr/sbin/spkrtest 這個有趣的 sh#ll script,會用到這個裝置來撥放簡單的音樂,而 /usr/games/piano 則讓你可以用鍵盤來彈奏簡 單的樂曲(你必須安裝 games 套件才能使用這功 能)。另外,NetHack 這個出色的角色扮 演(rpg)遊戲,也可以設定使用這個裝置來發聲。
建立裝置節點
幾乎所有包含在核心的每個裝置,在 /dev 目錄下都有一個對應的``節點''。 這些節點看起來與一般檔案沒什麼兩樣, 其實是程式在使用對應的裝置時,與核心溝通的進入點。 /dev/MAKEDEV 這支 sh#ll script,會在你安裝作業系 統的時候,建立絕大部分系統需要的裝置節點,但是並不是建立全部的節點,因 此,當你在核心中加入對新裝置的支援後,記得要到 /dev 目錄下查看是否有對 應的節點,如果沒有就增加。以下是一個簡單的範例:
假設你要核心中加入對 IDE CD-ROM 的支援,則要加入以下一行:
device acd0
這表示你必須到 /dev 目錄下,找尋是否有 acd0 開頭的 entries,通常後面會接一個字母,像是 c,或是 r,表示這是一個 raw 裝置 。如果你找不到,則可以切換到 /dev 目錄下,輸入:
# sh MAKEDEV acd0
當這個 script 執行完畢後,你可以發現 /dev 目 錄下出現 acd0c 與 racd0c 等 幾個 entries,表示程式執行正確。
以下是加入音效卡節點的範例:
# sh MAKEDEV snd0
Note: 如果你的機器有提供給其他人使用,而你建立了一些像是音效卡之類的裝 置節點,最好修改 /etc/fbtab,加入這些特殊的節點 ,以保護系統安全。請參閱 man fbtab 以獲得更多資訊 。
依循上述的簡單程序,建立任何不在 GENERIC 裡頭 的硬體裝置的節點。
Note: 所有的 SCSI 控制器都使用一樣的裝置節點,所以你無須重新建立節點。 另外,網路卡與 SLIP/PPP 虛擬裝置並沒有任何裝置節點,所以你不必擔心要 怎麼建立節點。
遇到問題怎麼辦?
有四類的問題是在定製一個核心時可能會遇到的:
Config 程式回報錯誤
如果 config 程式回報錯誤,你可能只是打錯 或漏打幾個字。幸運的是,config 會顯示哪一行出 現問題,你可利用 vi 快速的解決掉這些問題。例 如出現:
config: line 17: syntax error
你可以在 vi 的命令列模式輸入 17G 跳到第 17 行。比對 GENERIC 核心或是其他參考資料,以確 定你打對關鍵字。
make 程式執行失敗
如果 make 執行失敗,通常表示你的核心設定 出了問題,但是 config 並沒找出錯誤。一樣的, 檢查你的設定檔,如果你一直找不出問題,可以寄信給 FreeBSD general questions mailing list <[email]
[email protected][/email]> ,並附上你的核心設定檔,你應該可以很快收到回應。
核心無法正常開機
如果你的新核心無法正常開機,或是不能辨認出你的硬體裝置,別擔 心!FreeBSD 有一套相當完善的回復機制可以解決這個問題。只要在開機 命令列輸入你想啟用的核心名稱(例如 kernel.old ),而不是按 Enter(Return) 鍵跳過。在系統內保留一個可 以正常開機的核心,以備不時之需,是一個不錯的想法。
在用正悸漁痐葍}機後,你可以檢查你的核心設定檔,並嘗試再次建 立該核心。/var/log/messages 紀錄每次成功開 機時,核心產生的訊息。此外,dmesg(8) 則會列出該次開機的核心 訊息
Note: 如果你在編譯核心時遇到問題,確定你在系統內有保留一個 GENERIC 核心,或是其他你知道可正常開機的 核心。不要以為有 kernel.old 就夠了,因為 每次建立新核心時,kernel.old 會被最後一次 建立的 kernel 給覆寫過去,而這個核心有可能是有問題的。另外,最 好把目前的開機核心覆寫到 kernel,不然部分 程式如 ps(1) 將無法正常執行。接下來的指令介紹如何解除核心 的存取限制(以便把舊的核心覆寫回去):
# chflags noschg /kernel
另外,如果你要設定核心,或是其他檔案的存取限制,以便他們不 被修改或移除,則可輸入以下指令:
# chflags schg /kernel
核心運作良好,但是 ps 指令卻怪怪的?
如果你安裝不同版本的核心到系統上,例如在使用 3.1-RELEASE 的 系統上,裝了目前仍在實驗階段的 ``4.0'' 核心,許多查看 系統資訊的程式,像是 ps(1)、vmstat(8) 將無法執行。你必 須重新編譯 libkvm 函式庫以及這些程式。切記 不要隨意從其他系統拷貝不同版本的核心來使用。