核心設定檔的格式是很簡單的,每一行包含了一個關鍵字(keyword) 與一個 或多個參數,而大多數的設定都只包含一個參數。# 號之 後的敘述都是註解,並會被程式忽略。接下來的每個小節,將依序介紹每個列在 GENERIC 的參數,雖然各相關主題(如網路)的關鍵字會 放在同一小節,但是這些關鍵字可能散落在 GENERIC 的 各處。 詳細的列出各個選項(option),而 與 GENERIC 在同個目錄的 LINT 則列出更詳細的選項(options)與註解。如果你不確定某一行設定的目的或其必 要性,請先看看 LINT。
數字的引號限制: 在 FreeBSD 3.X(含 3.X)之前的所有版本,其核心設定檔中若有任何屬於 文字形式的數字(如 i386),必須用雙引號包起來,不然執行 config(8) 時會出錯。
FreeBSD 4.X,也就是本手冊所針對的版本,移除了這個限制,如果你使 用 4.X 之前的版本,請查看你系統內的 /usr/src/sys/i386/conf/LINT 與 /usr/src/sys/i386/conf/GENERIC 兩個檔案,確定哪 些字串需要加上雙引號。
底下是一個 GENERIC 核心設定檔的範例,裡面加上 很多的註解好讓你能了解每個選項的意義。這個範例檔應該非常接近 /usr/src/sys/i386/conf/GENERIC 的內容。如果你想知 道所有可用核心參數,可以查看 /usr/src/sys/i386/conf/LINT。
# # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # For more information on this file, please read the handbook section on # Kernel Configuration Files: # # http://www.freebsd.org/handbook/kernelconfig-config.html # # The handbook is also available locally in /usr/share/doc/handbook # if you've installed the doc distribution, otherwise always see the # FreeBSD World Wide Web server (http://www.FreeBSD.ORG/) for the # latest information. # # An exhaustive list of options and more detailed explanations of the # device lines is also present in the ./LINT configuration file. If you are # in doubt as to the purpose or necessity of a line, check first in LINT. # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp $
底下的關鍵字是每個核心一定要有的:
machine i386
硬體平台架構,在這裡要填上 i386、 alpha 或 pc98 其中一種。
cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU
上面列出可用的 CPU 設定。你可以寫上好幾行(特別是在你不知道該用 I586_CPU 或 I686_CPU 時)。然而, 對於一個定製的核心,最好只指定你系統所使用的 CPU 類型,如果你不確定你 的 CPU 類型,你可以輸入 dmesg 查看開機訊息。
Alpha 硬體平台的 cpu_type 值跟上面不一樣,目前 已支援的 Alpha CPU 有以下幾種:
cpu EV4 cpu EV5
如果你使用 Alpha CPU,你應該使用上面其中一種 CPU 類型。
ident GENERIC
這是核心的識別字。你應該把它改成你想要的核心名稱,在本手冊中,我們 用 MYKERNEL 來當核心識別字。放在 ident 之後的字串,開機時會顯示在螢幕上,所以你可以 給每個核心不同的名稱好識別其用途(譬如建立一個實驗性質的核心)。
maxusers 32
maxusers 這個選項設定 system tables 的大小。這 個數值與你期望可能同時來使用你系統的使用者數目大致相符。然而,在一般 情形下,你最少要設定 4,以上,特別是你要執行 X Window 或是編譯軟體。原因是 maxusers 值限定了系統同 時可有多少個 processes,其算法是 20 + 16 * maxusers 。如果你設定 maxusers 值是 1,則 你的系統只能同時存在 36 個 processes,包括 18 個(或更多)系統開機即佔去 的 processes,如果你執行了 X Window,則又要吃掉 15 個以上。甚至讀取一 個 man page 也會開啟九個 processes 來過濾、解壓縮、然後顯示出來。把 maxusers 值設定到 64 可以讓你的系統同時處理 1044 個 程序(processes),對大部分的使用者來說應該足夠了。當你執行程式時看到類 似 proc table full 的訊息,或者你的伺服器同時會 有很多人來存取、使用時(如 ftp.FreeBSD.org ),你可以加大這個參數的值,並重新編譯核心。
Note: maxuser 這個參數 並不是 限制可以同時使用你系統的使用者人數。它只是考量系統中可能同時使用你系 統的使用者上限,以及每個使用者可能執行的程序個數,然後設定一些系統所 使用的表格的合理大小。有一個關鍵字的值則真的 限 制了可以同時遠端連線 的人數,這個關鍵字是 pseudo-device pty 16。
接下來的選項有些是可由可無的,查看每個選項底下的註解以獲得更詳細的 資訊。
#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols options MATH_EMULATE #Support for x87 emulation
如果你的電腦沒有浮點運算處理器(386 或 486SX),這行設定可以讓你的核 心模擬出一個浮點運算處理器。如果你使用 486DX,或你用 386、486SX,但是 有加裝 387、487 晶片,或者你用更高階的 CPU(如 Pentium、Pentium II 等 等),你可以註解這一行。
Note: 這個模擬的浮點運算處理器並不是很精確,如果 你沒有浮點運算器,且你需要較高的精度,你可以改用 GPL_MATH_EMULATE 參數,這將會使用 GNU 的浮點運算 模擬器。至於為什麼這個模擬器不是系統預設值,是因為 GUN 使用執照的關 係。
options INET #InterNETworking
網路支援。即使你不打算連上網路,還是要留下這個選項。很多程式需要回 溯介面(如連線到你自己的電腦),所以這個選項基本上是一定要有的。
options INET6 #IPv6 communications protocols
這個選項讓核心可以支援 IPv6 通訊協定。
options FFS #Berkeley Fast Filesystem options FFS_ROOT #FFS usable as root device [keep this!]
基本的硬碟檔案系統,如果你要從硬碟開機,就留著。
options MFS #Memory Filesystem options MD_ROOT #MD is a potential root device
Memory-mapped 檔案系統。使用 RAM disk,以供需要快速存取的資料或是 暫存資料用,如果你有很大的 swap 空間,使用這個選項可以善用你的 swap 空 間。把 /tmp 掛入到 MFS 分割區是一個相當好的想法, 因為不少程式都會在此暫存資料。要把 /tmp 掛到 MFS RAM disk,可以修改 /etc/fstab,加入底下的設定:
接著你可以重開機,或是執行 mount /tmp。
options NFS #Network Filesystem options NFS_ROOT #NFS usable as root device, NFS required
network 檔案系統(NFS)。除非你想透過 TCP/IP 網路掛上其他 UNIX 檔案 伺服器的分割區,不然你可以註解掉這一行。
options MSDOSFS #MSDOS Filesystem
MS-DOS 檔案系統。除非你要在開機時掛入一個 DOS 格式的硬碟,不然你可 以放心的把這行註解掉。如同前述,在你第一次掛入一個 DOS分割區時,核心將 會自動載入模組來支援它。此外,mtools 這個相 當不錯的軟體(可在 ports 裡面找到),可以讓你存取 DOS 磁片,而不需要掛入 或卸載軟碟(也不需要 MSDOSFS 的支援)。
options CD9660 #ISO 9660 Filesystem options CD9660_ROOT #CD-ROM usable as root, CD9660 required
CD-ROM 使用的 ISO 9660 檔案系統。如果你沒有光碟機,或是很少用光碟 機讀取資料,可以註解掉這一行(核心會在第一次掛入時動態載入模組以支援之) 。音樂 CD 則不會用到這個檔案系統。
options PROCFS #Process filesystem
process 檔案系統。這是一個掛在 /proc 底下的 "假"檔案系統,允許一些程式,像是 ps(1) 來讀取資料, 提供你正在執行的 processes 的資訊。
options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
使系統相容 4.3BSD,不要拿掉這一行,不然部分程式將無法正常執行。
options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
這行設定告訴核心等待 15 秒鐘,以供 SCSI 控制器偵測你電腦上的 SCSI 裝置。如果你只有 IDE 硬碟,你可以不要理會這個設定,要不然你可以降低這 個值,也許降到五秒,以增加開機的速度。如果你發現降低後,FreeBSD 無法正 確辨認你的 SCSI 裝置,那麼你該提高這個值,延長等待時間。
options UCONSOLE #Allow users to grab the console
允許使用者攫取 console,對 X Window 頗為有用。舉例來說,你可以輸入 xterm -C 來開啟一個 console xterm,這個視窗將顯現任 何 write、talk 等指令的訊息,以 及你送出去的訊息。當然,kernel 產生的訊息也會在這裡出現。
options USERCONFIG #boot -c editor
這個選項使你可以在開機時進入硬體組態編輯器。
options VISUAL_USERCONFIG #visual boot -c editor
這個選項使你可以在開機時進入視覺化的硬體組態編輯器。
options KTRACE #ktrace(1) support
打開核心的追蹤功能,在除錯時很有用。
options SYSVSHM #SYSV-style shared memory
提供 System V Shared memory(SHM) 的支援,最常用到 SHM 的應該是 X Window 的 XSHM 延伸,不少繪圖相關程式(像是影片撥放程式 XAnim 與 Linux DOOM 遊戲)會自動使用 SHM 以提供額外的速度。如果你要使用 X Window,你 最好加入這個選項。
options SYSVSEM #SYSV-style semaphores
支援 System V semaphores,比較不常用到,但是只在 kernel 中佔用幾百 位元組的空間。
options SYSVMSG #SYSV-style message queues
支援 System V messages,一樣的,只佔用 kernel 數百位元組的空間。
Note: >ipcs(1) 指令可以顯示出任何使用到上述三個 System V 功能的 processes。
options P1003_1B #Posix P1003_1B real-time extensions options _KPOSIX_PRIORITY_SCHEDULING
1993年POSIX標準中新加入的即時系統擴充選項,ports裡面某些應用軟體( 像 Star office)會用到這些選項。
options ICMP_BANDLIM #Rate limit bad replies
這個選項用來啟動 ICMP 協定對於錯誤回應的頻寬限制,這個選項通常會用 在保護你的機器免於阻斷服務封包攻擊。
# To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O
如果你要使用 SMP,一定要加入上面兩行。
device isa
所有 FreeBSD 所支援的 PC 都需要這行設定。如果你使用 IBM PS/2 (微通 道架構)電腦,則你無法在該機器上執行 FreeBSD。
device eisa
如果你的主機板上有 EISA 匯流排,加入這個設定。使用這個選項可以自動 偵測並設定所以連接在 EISA 匯流排上的裝置。
device pci
如果你的主機板有 PCI 匯流排,就加入這個選項。使用這個選項可以自動 偵測 PCI 卡並橋接 PCI 與 ISA 匯流排。
# Floppy drives device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1
軟式磁碟機控制器: fd0 是 A: 磁碟機,fd1 是 B: 磁碟雞。
device ata
這個驅動程式支援所有的 ATA 與 ATAPI 裝置。你只需要寫一行 device ata 即可,核心會偵測新式機器上所有的 PCI ATA/ATAPI 裝置。
device atadisk # ATA disk drives
要使用 ATAPI 磁碟機,就要加入這個 device ata 與 這個選項。
device atapicd # ATAPI CDROM drives
要使用 ATAPI 光碟機,就要加入這個 device ata 與 這個選項。
device atapifd # ATAPI floppy drives
要使用 ATAPI 軟碟機,就要加入這個 device ata 與 這個選項。
device atapist # ATAPI tape drives
要使用 ATAPI 磁帶機,就要加入這個 device ata 與 這個選項。
options ATA_STATIC_ID #Static device numbering
這個選項固定控制器的編號(如同舊的驅動程式),不然裝置的編號會被動態 配置。
# ATA and ATAPI devices device ata0 at isa? port IO_WD1 irq 14 device ata1 at isa? port IO_WD2 irq 15
上面幾行是給舊式、非 PCI 的系統使用的。
# SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices device amd # AMD 53C974 (Teckram DC-390(T)) device dpt # DPT Smartcache - See LINT for options! device isp # Qlogic family device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets) device adv0 at isa? device adw device bt0 at isa? device aha0 at isa? device aic0 at isa?
SCSI 控制器。將你系統沒安裝的控制器註解掉。如果你的系統只有 IDE, 你可以將上面幾行全部移除。
# SCSI peripherals device scbus # SCSI bus (required) device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access)
SCSI 周邊,一樣的,把你沒有的移除,如果你只使用 IDE 裝置,你可以移 除全部的設定。
# RAID controllers device ida # Compaq Smart RAID device amr # AMI MegaRAID device mlx # Mylex DAC960 family
已支援的 RAID 控制器。如果你沒任何 RAID 控制器,你可以移除全部的設 定。
# atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD
鍵盤控制器(atkbdc)提供了 AT 鍵盤以及 PS/2 滑鼠 裝置的 I/O 服務。鍵盤驅動程式(atkbd)與 PS/2 滑鼠驅 動程式(psm)需要這個控制器。
device atkbd0 at atkbdc? irq 1
atkbd 驅動程式與 atkbdc 支援 了 AT 84 鍵鍵盤或者連接到 AT 鍵盤控制器的 AT 加強型鍵盤。
device psm0 at atkbdc? irq 12
如果你的滑鼠連接到 PS/2 滑鼠連接埠,你需要這行設定。
device vga0 at isa?
顯示卡驅動程式。
# splash screen/screen saver pseudo-device splash
此虛擬裝置讓使用者可以在開機時顯示點陣圖。螢幕保護程式也需要用到這 個虛擬裝置。
# syscons is the default console driver, resembling an SCO console device sc0 at isa?
>sc0 是預設的 console 驅動程式,類似 SCO console。絕大部分全螢幕程式都透過 termcap 這類終 端機資料函式庫來存取 console,因此不論你用這個驅動程式或是 VT220 相容 console 驅動程式 vt0,其間並無太大差別。如果使用 sc0,且你在登入系統後,執行全螢幕程式遇到問題,請將你的 TERM 設定成 scoansi。
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver #device vt0 at isa? #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor # If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines #options PCVT_SCANSET=2 # IBM keyboards are non-std
這是一個相容 VT220 的 console 驅動程式,並向下相容 VT100/102。在部 分與 sc0 相衝的筆記型電腦上,這個驅動程式運作良好。 當然,當你登入系統時,記得設定 TERM 參數為 vt100 或是 vt220。當連接到網路上 許多電腦時,這個驅動程式也常是很有用的,這是因為許多的電腦上的 termcap 或是 terminfo 並沒有 sc0 的資料 -- 而 vt100 幾乎所有的平台上都有支援。
# Floating point support - do not disable. device npx0 at nexus? port IO_NPX irq 13
npx0 是連接 FreeBSD 與浮點運算處理器的一個介面 ,不論你有硬體的浮點運算處理器還是使用軟體模擬,都需要這個設定。這個設 定並不是可有可無的。
# Power management support (see LINT for more options) device apm0 at nexus? disable flags 0x20 # Advanced Power Management
支援進階電源管理(APM),對筆記型電腦尤其有用。
# PCCARD (PCMCIA) support device card device pcic0 at isa? irq 10 port 0x3e0 iomem 0xd0000 device pcic1 at isa? irq 11 port 0x3e2 iomem 0xd4000 disable
PCMCIA 支援,如果你把 FreeBSD 裝在筆記型電腦上,你會需要這個裝置。
# Serial (COM) ports device sio0 at isa? port IO_COM1 flags 0x10 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9
四個串列埠裝置,在 MS-DOS/Windows 裡面被稱作 COM1 ~ COM4。
Note: 如果你你有一張內接式 Modem 卡,而且 COM2 是打開的,那麼你必須把 Modem 卡的 IRQ 改成 2(技術上來說 IRQ2 = IRQ9)這樣 FreeBSD 才可以正常 使用你的 Modem 卡。如果你有一張多埠卡,請閱讀 sio(4) 以獲得更多 資訊。有些顯示卡(特別是採用 S3 晶片的顯示卡)使用 0x*2e8 這個 IO 位址,加上許多廉價的序列卡無法完全 解析 16 位元的 IO 位址,於是造成衝突,使得這些使用 COM4 的卡幾乎無法 正常使用。
每個序列埠需要自己的 IRQ(除非你用可以支援分享 IRQ 的多埠卡),所 以 COM3 跟 COM4 的 IRQ 預設是不能使用。
# Parallel port device ppc0 at isa? irq 7
這是 ISA 匯流排的並列埠介面。
device ppbus # Parallel port bus (required)
支援並列埠匯流排。
device lpt # Printer
支援並列埠印表機。
Note: 如果要使用並列埠印表機,就要同時加上上面三個裝置的設定。
device plip # TCP/IP over parallel
這是並列網路介面的驅動程式。
device ppi # Parallel port interface device
一般用途的 I/O("geek port" + IEEE1284 I/O。
#device vpo # Requires scbus and da
Iomega Zip 磁碟機需這個裝置。它同時需要 scbus da 支援。把並列埠設定成 EPP 1.9 模式下可以獲得最加 效能。
# PCI Ethernet NICs. device de # DEC/Intel DC21x4x ("Tulip") device fxp # Intel EtherExpress PRO/100B (82557, 82558) device tx # SMC 9432TX (83c170 "EPIC") device vx # 3Com 3c590, 3c595 ("Vortex") device wx # Intel Gigabit Ethernet Card ("Wiseman")
一堆 PCI 網路卡的驅動程式。把你系統沒有的卡註解掉或是移除。
# PCI Ethernet NICs that use the common MII bus controller code. device miibus # MII bus support
一些 10/100 乙太網路卡需要 MII 匯流排,這些卡不是使用跟 MII 相容的 transceivers 就是實作一個跟 MII 類似的 transceiver 控制介面。在核心設 定檔裡頭加上 device miibus 以提供通用 miibus API 與 所有使用通用 miibus 而不是使用自己驅動程式的 PHY。
device dc # DEC/Intel 21143 and various workalikes device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 ("Starfire") device sis # Silicon Integrated Systems SiS 900/SiS 7016 device ste # Sundance ST201 (D-Link DFE-550TX) device tl # Texas Instruments ThunderLAN device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x ("Boomerang", "Cyclone")
用到 MII 匯流排控制器的'網路卡驅動程式。
# ISA Ethernet NICs. device ed0 at isa? port 0x280 irq 10 iomem 0xd8000 device ex device ep # WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really # exists only as a PCMCIA device, so there is no ISA attachment needed # and resources will always be dynamically assigned by the pccard code. device wi # Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will # work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP # mode (the factory default). If you set the switches on your ISA # card for a manually chosen I/O address and IRQ, you must specify # those parameters here. device an # The probe order of these is presently determined by i386/isa/isa_compat.c. device ie0 at isa? port 0x300 irq 10 iomem 0xd0000 device fe0 at isa? port 0x300 device le0 at isa? port 0x300 irq 5 iomem 0xd0000 device lnc0 at isa? port 0x280 irq 10 drq 0 device cs0 at isa? port 0x300 device sn0 at isa? port 0x300 irq 10 # requires PCCARD (PCMCIA) support to be activated #device xe0 at isa?
ISA 乙太網路卡。查看 /usr/src/sys/i386/conf/LINT 以了解哪個驅動程式支 援哪張卡。
# Pseudo devices - the number indicates how many units to allocated. pseudo-device loop # Network loopback
這是一個通用的 TCP/IP 回溯介面。如果你 telnet 或 ftp 到 localhost(也等於 127.0.0.1)那個你實際上是透過這個虛擬裝置連回你 的電腦。這個裝置一定要有,切勿移除。
pseudo-device ether # Ethernet support
如果你有乙太網路卡,你就需要 ether 虛擬裝置,它 包含了通用的乙太網路通訊協定的程式碼。
pseudo-device sl 1 # Kernel SLIP
sl 支援 SLIP。目前 SLIP 已經被 PPP 取代了,因為 PPP 比較好設定,較適合 Modem 對 Modem 的連線,而且功能更強大。 sl 後面的 number 設定最 多能同時支援幾個 SLIP 連線。
pseudo-device ppp 1 # Kernel PPP
支援 kernel PPP 撥接連線。另外有一個使用 tun 的 userland PPP,提供更高的彈性與更多的功能,像是有連線需求再撥號的功能。 ppp 後面的 number 設定最 多能同時支援幾個 PPP 連線。
pseudo-device tun # Packet tunnel.
userland PPP 會使用到這個虛擬裝置。tun 後面的 number 設定最多能同時支援幾個 PPP 連線。查 閱本使用手冊的 PPP 部份以獲得更多資訊。
pseudo-device pty # Pseudo-ttys (telnet etc)
這是虛擬 "pseudo-terminal" 或虛擬的登入埠。遠端連過來 的 telnet 與 rlogin 連線、xterm 與 emacs 等應用程式都會用到這個虛擬裝置。 pty 後面的 number 設定要 建立幾個 pty。如果你會同時用到的 xterm 視窗 或是遠端連線超過預設的 16 個,你可以增加這個值,但是不要超過 256 個。
pseudo-device md # Memory "disks"
memory disk 虛擬裝置。
pseudo-device gif 4 # IPv6 and IPv4 tunneling
提供 IPv6 經 IPv4 的傳送通道、IPv4 經 IPv6 的傳送通道、IPv4 經 IPv4 的傳送通道以及 IPv6 經 IPv6 的傳送通道。
pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
這個虛擬裝置抓取送給它的封包,並轉給負責 IPv4/IPv6 轉換的背景服務 程式。
# The `bpf' pseudo-device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! pseudo-device bpf # Berkeley packet filter
這是柏克萊的封包過濾器。這個虛擬裝置讓網路卡處在不區分封包的模式, 在此模式此裝置會抓取廣播式網路(如乙太網路)的每個封包。這些封包會被存在 硬碟,或是由 tcpdump(1) 程式來分析。
# USB support
#device uhci # UHCI PCI->USB interface
#device ohci # OHCI PCI->USB interface
#device usb # USB Bus (required)
#device ugen # Generic
#device uhid # "Human Interface Devices"
#device ukbd # Keyboard
#device ulpt # Printer
#device umass # Disks/Mass storage - Requires scbus and da
#device ums # Mouse
# USB Ethernet, requires mii
#device aue # ADMtek USB ethernet
#device cue # CATC USB ethernet
#device kue # Kawasaki LSI USB ethernet
上面的設定支援各式各樣的 USB 裝置。
查看 /usr/src/sys/i386/conf/LINT 以獲得更多 FreeBSD 支援的 USB 裝置與其資訊。