FreeBSD handbook中文版 9 配制FreeBSD 的內核
2024-07-26 00:29:05
供稿:網友
目錄
9 配制FreeBSD 的內核
9.1 概要
第3 頁9.2 為什么要定制一個內核?
9.3 建立和安裝一個定制的內核
9.4 配置文件
9.5 建立設備的節點
9.6 如果出現問題怎么辦
=============================================================
(翻譯中出現的任何問題或錯誤,請廣大讀者及時反饋給我:freebsdhandbook@163.com)
9.1 概要
時你需要重新配置和編譯你的內核。
.
.
.
.
.
.
9.2 為什么要定制一個的內核?
帶來很多好處。不象GENERIC 內核,它需要支持很廣泛的硬件設備,而定制的內核將只支持
你機器的硬件設備,這樣會帶來很多好處:
FreeBSD 使用手冊
第9章配置FreeBSD 的內核
內核是FreeBSD 的核心。它用來管理內存,執行安全控制,網絡,磁盤訪問等等。而有
讀完這章,你將了解到:
為什么需要建構一個定制的內核。
如何寫一個內核配置文件,或修改已存在的配置文件。
如何使用內核配置文件創建和建構一個新的內核。
如何安裝一個新內核。
如何在/dev 中創建設備文件的入口。
如何解決一些常見的問題。
定制內核基本上是每一個UNIX 用戶必須經歷的一關。這樣做將會對你的FreeBSD 系統
1. 快速啟動。既然系統內核只檢測你機器上的硬件,那它所花費的啟動時間將大大減
少。
2. 較少的內存使用。一個定制的內核會比GENERIC 內核使用較少的內存。這一點非常
重要,因為內核在處理時必須經常使用內存。所以,一個定制的內核對于內存較少的機
器來說是非常有用的。
3. 額外的硬件支持。一個定制的內核允許你加入象聲卡之類設備的支持,而這恰恰是
GENERIC 內核所做不到的。
第1 頁FreeBSD 使用手冊
9.3 建立并安裝一個定制的內核
首先,讓我們先來看一下建立內核的目錄。所有提到的目錄都在/usr/src/sys 中,也
可以通過/sys 訪問。有許多子目錄充當了內核的不同部分。但最重要的是/arch/conf,你
可以在這兒配置內核,然后進行編譯。這里的arch 也可能是i386,alpha,pc98。在一個特
殊的架構目錄內,所有的東西都是為這個架構服務的;其它部分的代碼是與所有平臺共享的。
注意一下這個目錄的邏輯結構,所有支持的硬件驅動程序、文件系統、參數選項,都放在各
自的目錄下。另外,所有放在i386 目錄下的是只跟PC 硬件有關的,而i386 目錄之外的其
它目錄,則是FreeBSD 可能移植到的平臺會共享到的部分。
注意:如果你的系統沒有這個/usr/src/sys 目錄,那么內核源代碼就沒有被安裝。最
快速的安裝方式是以root 登陸, 然后運行/stand/sysinstall , 選擇
configure Distributions src sys。
接著,切換到arch/conf 目錄,拷貝GENERIC 配置文件,并給這個文件起一個容易辨認的名
稱,它就是你的內核名稱。例如:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNEL
通常,這個名稱是大寫的,如果正維護著多臺不同硬件的FreeBSD 機器,以你機器的域
名來命名是非常好的主意。我們把它命名為MYKERNEL 就是這個原因。
注意:你必須以root 帳戶登陸再執行下面的命令,否則你會沒有權限,而導致錯誤。
現在,用你喜歡的文本編輯器編輯MYKERNEL。如果你是初學者,那唯一能用的編輯器
可能就是vi,它由于太復雜而不在這兒介紹了,但在參考書目中有許多書會介紹到它。然
而,FreeBSD 中最容易的編輯器是ee,如果你是一個工程師,它是一個非常好的選擇。你可
以很自由地改變注釋行來反映你的配置情況,或你在GERNERIC 中已經做的變化。如果你在
Sunos 或其它BSD 系統下定制過內核,那這個文件中的絕大部分將對你非常熟悉。如果你使
用的是諸如DOS 這樣的系統,那GENERIC 配置文件就看起來非常困難,所以在下面的配置文
件章節將慢慢地、仔細地進行介紹。
注意:確信經常檢查/usr/src/UPDATING,在你執行任何修改之前,記得要用最新發布
的源代碼來同步你的源代碼樹。在這個文件中所有重要的升級都要記下來。
/sur/src/UPDATING 總是符合你的FreeBSD 源代碼版本,而且總是比手冊所說的信息更加精
確。
當你完成以上步驟之后,如果你使用的FreeBSD 是4.0 之前的版本的話,就執行下面的
第2 頁FreeBSD 使用手冊
命令進行編譯和安裝內核;如果你使用的是4.0 版或是之后的版本,你的/usr/src/目錄可
能已經包含了sys/子目錄了。
注意:如果你設法從一個舊版本的FreeBSD 升級你的內核,你可能必須從你得到新內核
源代碼的地方,找到新版的配制文件,重建并安裝它。
# /usr/sbin/config MYKERNEL
# cd ../../compile/MYKERNEL
# make depend
# make
# make install
如果你剛升級到一個比較新的版本,確信你已經重建了整個系統,然后運行下面的命令:
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
如果你還沒有升級你的源代碼樹,那你應當按順序執行:
config,make depend,make,make install
警告:如果你已經升級了你的源代碼,你必須使用make buildkernel 方法來定制你的
內核。否則,用舊的工具來定制內核,可能會引起錯誤。如果你已經升級了源代碼,不要
使用config/make 來定制內核。
新的內核將會被拷貝到/kernel 目錄下,而舊的內核將會被移到/kernel.old?,F在,
關閉系統,然后重新用你的內核啟動系統。如果發生錯誤,在這章結尾會有一些故障的解決
辦法。一旦你的新內核不能啟動,請務必讀一下有關如何恢復的章節。
注意:如果你已經加入了新的設備(如聲卡),你可能在使用之前,要先在你的/dev 目
錄下加入這些設備節點。
9.4 配置文件
內核設置的格式是很簡單的,每一行包含了一個關鍵詞(keyWord)與一個或多個參數,
而大多數的設置都只包含一個參數。#號之后的文字都是注釋,會被程序忽略掉。下面的每
個小節,將依次介紹每個列在GENERIC 中的參數,雖然各相關主題(如網絡)的關鍵詞會放在
同一小節,但是這些關鍵詞可能位于GENERIC 的很多地方。詳細地列出各個選項(option),
而LINT 列出了絕大部分的選項(options),比起在同一目錄下的GENERIC,有更詳細的解釋。
第3 頁FreeBSD 使用手冊
如果你不能確定某一行設定的目的是否必要,請先看看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 時會出錯。
如果數字是表示數目、個數,如maxuser 64 這個設置,則不要加雙引號。目
前FreeBSD CURRENT 版本已經去掉上述限制,不論是哪種形式的數字都不需要加雙
引號。本章的例子,在文字形式的數字前后仍加了雙引號(“”),如果你使用FreeBSD
CURRENT,請自動去除雙引號。
下面是一個帶有很多額外注釋的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
第4 頁FreeBSD 使用手冊
# 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
上面的選項指出了在你的系統中所用的CPU 類型。你可以使用多個CPU 類型(例如,你
不確信你使用的是I586_CPU 還是I686_CPU),然而,對于一個定制的內核,最好是只指定
你所擁有的CPU 類型。如果你不能確定你的CPU 類型,你可以使用dmesg 命令來看看你的啟
動信息。
Alpha 結構的機器使用下面的選項:
cpu EV4
cpu EV5
如果你正使用一臺Alpha 機器,你應當使用上面的CPU 類型。
ident GENERIC
ident 是一個內核的標識符。你應該自己命名一個容易辨認的名稱,以有別于GENERIC
的名稱─GENERIC。放在ident 后的參數,將在你用這個內核啟動時顯示在屏幕上。如果你
同時設置了幾個內核,采用不同的名稱是個不錯的主意。
注意,象machine 與cpu 這兩個設置。如果你的內核名稱包含數字,請記得用雙引號把
它括起來。內核名稱將會使用-D 參數傳給編譯器,所以不要用像DEBUG 或是其它可能干擾
編譯器的機器、CPU 名稱,如vax。
maxusers 32
這個設置的大小值定義了重要的system tables。這個數值粗略地假設你的機器同時會
有多少使用者。然而,在一般情況下,你最少要設置4 個以上,特別是你要執行X Window
或是編譯程序。原因是maxusers 值決定了系統同時可有多少個進程( processes),其算法
是20 + 16 * maxusers。如果你設置maxusers 值是1,則你的系統只能同時存在36 個
第5 頁FreeBSD 使用手冊
processes,包括18 個(或更多)系統啟動要占去的processes;如果你執行了X Window,則
又要用掉15 個以上。甚至閱讀一個man page 也會使用九個processes 來過濾、解壓縮、然
后顯示文件。設置maxusers=4,則系統可以同時有84 個processes,對任何人應該都是足
夠的。當你執行程序時,得到像是“proc table full”這樣的錯誤信息,或者你要建一個
同時會有很多人來訪問的網站(如Walnut Creek CDROM 的FTP)時,你就要增加這個設置的
值,然后重新編譯內核。
注意: maxuser 這個參數并不限制可以登陸你系統的用戶的數目。它只是系統中使用者
可以最多執行的程序的個數。有一個關鍵詞的值則真的限制了可以同時遠程連接(remote
logins)的人數:pseudo-device pty 16。
# Floating point support - do not disable.
device npx0 at nexus? port IO_NPX irq 13
npx0 是連接FreeBSD 中浮點運算處理器的一個接口。不論你有硬件的浮點運算處理器
還是使用軟件仿真,都需要這個設置。這個設置并不是可有可無的。
# Pseudo devices - the number indicates how many units to allocate.
pseudo-device loop # Network loopback
loop 是一個通用的TCP/ip 接口。如果你用telnet 或ftp 連到localhost(等同于
127.0.0.1),則該連接會通過這個虛擬設備連回來。這是一定要有的設置,請不要去掉。
#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
options MATH_EMULATE #Support for x87 emulation
如果你的計算機沒有浮點運算處理器(386 或486SX),你可以加入這行,使得內核提供
軟件仿真的浮點運算處理器。如果你用的是486DX 或是386SX、486SX(還加裝了387、487
芯片)或更高的(Pentium、Pentium II 等)則不需要這行設置。
注意: 這個仿真的浮點運算處理器并不是很精確。如果你沒有浮點運算器,還需要較
高的精度,你可以改用GPL_MATH_EMULATE 參數,這將會使用GNU 的浮點運算仿真器。至于
為什么這個仿真器不是系統默認值,是因為GNU 使用許可的關系。
options INET #InterNETworking
提供網絡支持。就算你不打算連上網絡,你還是要留著這個選項。對于絕大部分的程序,
這個選項是一定要有的。
第6 頁FreeBSD 使用手冊
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 空間,使用這個選項可以給你不少好處。把/tmp 掛到MFS 分區是一
個相當好的想法,因為不少程序都會在此暫存資料。要把/tmp 掛到MFS RAM disk,可以修
改/etc/fstab,加入以下一行:
/dev/ad1s2b /tmp mfs rw 0 0
現在重啟動,或是鍵入mount /tmp 命令:
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
網絡文件系統(Network Filesystem, NFS),除非你要從網絡上的其它機器加載目錄,
不然你可以用# 號注釋掉這行設置。
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
第7 頁FreeBSD 使用手冊
Process filesystem。這是一個虛擬的文件系統,掛在/proc 下,允許一些程序,像ps
來讀取資料,提供你正在執行的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 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 幾百字節的空間。
第8 頁FreeBSD 使用手冊
注意: ipcs 命令可以顯示出任何使用到上述三個System V 功能的processes。
options P1003_1B #Posix P1003_1B real-time extensions
options _KPOSIX_PRIORITY_SCHEDULING
在1993 POSIX 中添加的實時擴展。在ports collection 中某些應用程序會用到這些(如
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: 盤。ft0 則是連接到軟盤的QIC-80 磁帶機。如
果你沒有上述設備,就注釋掉這幾行設置。
device ata
第9 頁FreeBSD 使用手冊
這個驅動器支持所有ATA 和ATAPI 設備。你只要在內核中加入ata 選項,就可以讓內核
支持現代計算機上的所有PCI ATA/ATAPI 設備。
device atadisk # ATA disk drives
這個是ATAPI 磁盤驅動器所必須的。
device atapicd # ATAPI CDROM drives
這個是ATAPI CDROM 驅動器所必須的。
device atapifd # ATAPI floppy drives
這個是ATAPI 軟盤驅動器所必須的。
device atapist # ATAPI tape drives
這個是ATAPI 磁帶機驅動器所必須的。
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?
第10 頁FreeBSD 使用手冊
device aic0 at isa?
SCSI 控制器??梢宰⑨尩裟阆到y中沒有的設備。如果你只有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 外圍設備。也可以象上面一樣操作。
# RAID controllers
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
支持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 鍵盤控制器的AT 84 鍵盤
與AT 加強型鍵盤的訪問服務。
device psm0 at atkbdc? irq 12
如果你的鼠標連接到PS/2 鼠標端口,就使用這個設備驅動程序。
device vga0 at isa?
顯卡驅動。
# splash screen/screen saver
第11 頁FreeBSD 使用手冊
pseudo-device splash
在啟動時的啟動畫面!屏幕保護也需要這個。
# syscons is the default console driver, resembling an SCO console
device sc0 at isa?
sc0 是默認的console 驅動程序,絕大部分全屏幕程序都通過termcap 這類terminal
database library 來訪問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 的資料幾乎
所有的平臺上都支持。
# Power management support (see LINT for more options)
device apm0 at nexus? disable flags 0x20 # Advanced Power
Management
高級電源管理支持。使用在膝上型電腦上。
# 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 支持。如果你使用膝上型電腦,你需要這個。
第12 頁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
sio0 到sio3 可看作是MS-DOS 系統中的COM1 到COM4。如果你使用內置式的數據機,且
占用COM4,而你的系統又有COM2,則你必須修改調制解調器的IRQ 為2(IRQ 2 跟IRQ 9 是
一樣的),這樣你才能正常使用調制解調器。部分顯示卡(特別是使用S3 芯片的卡),用到
0x*2e8 這個I/O 地址,而一些便宜的串行卡,沒辦法正確譯碼16 位的I/O 尋址空間,因此
兩張卡會沖突,導致COM4 無法正常使用。每個串行口都要有一個唯一的IRQ,所以COM3 與
COM4 默認的IRQ 將無法使用。
# Parallel port
device ppc0 at isa? irq 7
ISA-bus 并行接口
device ppbus # Parallel port bus (required)
提供并行總線的支持。
device lpt # Printer
提供并口打印機的支持。
注意: 要使用并口打印機,就必須同時加入上面三行設置。
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.
第13 頁FreeBSD 使用手冊
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
MII 總線支持對于一些PCI 10/100 Ethernet NICs 來說是必需的。
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
第14 頁FreeBSD 使用手冊
# 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-device ether # Ethernet support
如果你有一個以太網卡,ether 是必需的。它包含了通用的以太網協議代碼。
pseudo-device sl 1 # Kernel SLIP
Sl 是針對SLIP 支持的。這已經完全被PPP 所代替,它是早期使用的協議。
pseudo-device ppp 1 # Kernel PPP
ppp 提供內核模式(kernel-mode)的PPP 撥號支持。另外有一個tun 則是用戶模式
(user-mode)的PPP 支持,tun 較有彈性且功能較多。如果你要使用這個PPP 驅動程序,請
參考內核模式PPP 這一章節。如同sl,number 設置系統最多同時能支持幾個PPP 連接。
pseudo-device tun # Packet tunnel.
tun 是使用者模式的PPP 軟件。這個程序設置相當方便,且速度很快。它有一些特殊的
功能,像是在需要連接時自動撥號(dial-on-demand)。tun 后面接的數字設置系統同時能支
持幾個PPP 連接。參看使用者模式PPP 以獲得更多信息。
第15 頁FreeBSD 使用手冊
pseudo-device pty # Pseudo-ttys (telnet etc)
pty 是虛擬的終端機,或仿真的login port。Ctelnet 或rlogin 連接、xterm 以及其它
應用程序如emacs 會用到pty。number 設置系統的pty 個數。系統默認值是16,如果你要
提高同時連接數,可以適當增加這個數值,最高可達256 個。
pseudo-device md # Memory “disks”
Memory disk pseudo-devices.
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
這是Berkeley 的封包過濾器。這個偽設備允許網絡接口被放在復雜的模式上,在網絡
上捕獲每個封包。這些封包能被磁盤捕獲或被tcpdump 程序檢查。
注意:bpf pseudo-device 也可以被dhclient 用來獲得默認路由的IP 地址。如果你使
用DHCP,不要注釋掉這行。
# 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
第16 頁FreeBSD 使用手冊
# USB Ethernet, requires mii
#device aue # ADMtek USB ethernet
#device cue # CATC USB ethernet
#device kue # Kawasaki LSI USB ethernet
支持多種USB 設備。更多有關FreeBSD 支持的設備請參考
/usr/src/sys/i386/conf/LINT。
9.5 建立設備的節點
幾乎內核中的每個設備在/dev 目錄下都有對應的節點。這些節點看上去是些規則文件,
但事實上是程序在使用對應的設備時,與內核聯系的進入點。當你一開始安裝操作系統時,
那些可執行的外殼腳本/dev/MAKEDEV 就創建了幾乎所有支持的設備。然而,它并不是建立
所有設備,所以當你加入對新設備的支持時,注意確信對應的節點在這個目錄下。如果不是,
就加入它們。這兒是一個簡單的例子:
確信在內核中加入了IDE CD-ROM 的支持??梢赃@樣加入:device acd0
這意味著你應當在/dev 目錄下找一些以acd0 為起點的入口,通常后面有一個字母,象
c 或以r 開頭表示這是一個raw 設備。那些文件不在那兒,必須改變/dev 目錄然后鍵入:
# sh MAKEDEV acd0
當這些腳本完成后,你要找一下在/dev 目錄下有acd0c 和racd0c 等幾個入口,表示程
序已經正確執行。
以下是加入聲卡節點的例子:
# sh MAKEDEV snd0
注意:當創建完諸如聲卡這樣的設備節點時,如果其它人有權訪問你的機器,可能有
必要在/etc/fbtab 文件中添加這些節點來保護系統安全。可看一下fstab 的聯機手冊以了
解更多信息。
依上述的簡單程序,建立任何不在GENERIC 里的硬件設備節點。
注意: 所有的SCSI 控制器都使用一樣的設備節點,所以你無須重新建立節點。另外,
網卡與SLIP/PPP 虛擬設備并沒有任何設備節點,所以你不必擔心怎么建立節點。
9.6 如果出現問題怎么辦?
在定制一個內核時,可能會出現四種問題。它們是:
配置失敗
第17 頁FreeBSD 使用手冊
當你在你的內核描述中看到config 命令失敗,你可能在某個地方發生了一個小錯誤。
幸運的是,config 會顯示出錯的那一行的行號,你可以用vi 編輯器做修改。例如,
如果你看到:config:line 17:syntax error
你可以在vi 中用命令模式輸入17G 來跳到17 行。比較GENERIC 內核或其它參考資料,
以確定你打對關鍵字。
編譯錯誤
如果編譯失敗,通常會在你的內核描述中提示一個錯誤,但config 并沒有找出錯誤。
另外,查看一下你的配置信息,如果你仍然無法解決這個問題,可以把你的內核配置
信息發郵件到FreeBSD 普通問題郵件列表<freebsd-questions@FreeBSD.org>,它將很快
地被解決。
內核無法啟動
如果你的新內核無法啟動,或無法識別你的硬件,不要擔心!幸運的是,BSD 有一個
解決復雜內核錯誤的很好機制。從FreeBSD 的啟動loader 中,選擇一個你要啟動的
內核。當配置一個內核時,記得在手頭保留一個能正常啟動的內核是個好主意。
在用一個好的內核啟動后,你可以檢查一下你的配置文件,再設法重新建立一個內核。
一個有幫助的文件是/var/log/messages 文件,它記載了每個成功啟動的所有內核信
息。同樣,dmesg 命令會列出當前啟動中的內核信息。
注意:你在編譯內核時,確信保留著一個GENERIC 或以其它名字命名的內核。你不能
僅依靠kernel.old,因為當你安裝一個新內核時,kernel.old 會被最后一次安裝的內
核所覆蓋。所以,盡快將當前正常工作的內核移到不能正常工作的內核,你可以用ps
命令查一下。解開編譯安裝內核文件的正確命令是:
#chflags noschg /kernel
另外,如果你要設定內核或其它文件的訪問限制,以至它不能被移動或修改,可以用
下面的命令:
#chflags schg /kernel
內核工作,但ps 根本就不工作!
如果你安裝了一個不同版本的內核到系統,例如,在3.x 系統中安裝了4.x 內核,許
多系統內建的命令象ps 和vmstat 會根本不工作。你必須重編譯libkvm 庫以及這些
程序。千萬不要隨意從其它系統拷貝不同版本的內核來使用。
第18 頁