FreeBSD連載(60):預設核心配置選項

2000年1月3日 11:23 王波

預設核心配置選項

  通用核心的設置檔案中包含了很多比較重要的設置選項,這裡的設置選項 也是最常用的配置選項,為了編譯出適合自己電腦的設置,就需要了解這個檔案 中的設置選項。

#
# GENERIC -- Generic machine with WD/AHx/NCR/BTx family disks
#
# For more information read the handbook part System Administration -> 
# Configuring the FreeBSD Kernel -> The Configuration File. 
# The handbook is available in /usr/share/doc/handbook or online as
# latest version from the FreeBSD World Wide Web server 
# <URL:http://www.FreeBSD.ORG/>
#
# An exhaustive list of options and more detailed explanations of the 
# device lines is present in the ./LINT configuration file. If you are 
# in doubt as to the purpose or necessity of a line, check first in LINT.
#
#	$Id: GENERIC,v 1.143.2.2 1999/02/15 02:50:07 des Exp $

machine		"i386"
cpu		"I386_CPU"
cpu		"I486_CPU"
cpu		"I586_CPU"
cpu		"I686_CPU"
ident		GENERIC
maxusers	32

  machine行定義了系統所使用的電腦體系結構,對於運行在個人 電腦平台上的FreeBSD,此參數值只能是i386,運行在其他平台上的BSD系統將使 用其他相應設置。注意由於這個配置參數中混用了字母和數字,因此需要用引號將 其括起來。這種情況在配置檔案中經常會碰到,如果不使用雙引號括起來,配置程 序就不能區分它是用於標識字符串還是用於數值設置,造成語法錯誤。

  可以多個cpu參數描述了處理器類型,可以使用 ”I386_CPU” 、 “I486_CPU” 、 “I586_CPU” 、 “I686_CPU” 四種類型。 “I386_CPU” 是最低配置,缺 省的GENERIC配置檔案中將這些類型全部列出,這使得這個通用核心在任何個人計算 機系統下都能正常運行,但最好根據處理器類型進行針對配置。由於處理器是向下兼 容的,但不能向上兼容,因此如果配置的參數高於電腦實際處理器類型,核心就不 能正常啟動和工作。

  對於586以上的處理器,各個兼容廠商的標記方法各不相同,因此必須小心選擇 正確的處理器類型,以避免選擇錯誤。可以使用系統啟動時的檢測信息來判斷處理器的 類型:

# dmesg | grep ^CPU

  ident用於標識核心,每個核心都應該具有自己的標識,GENERIC核心的 標識為GENERIC,而自己定制的核心可以在這一行中定義自己的標識。由於系統中可能 存在有多個核心,因此使用這個標識來幫助區分不同的核心。這個標識在系統啟動時將 顯示在啟動螢幕上。

  maxusers這個值並不直接限制FreeBSD的用戶數目,而是定義了核心中的 一些非常重要的系統表格大小,這些表格會隨系統中進程的增加和資源的被占用會逐漸 被填滿,而系統中的用戶和進程數量有一定的關系,因此這個值大概等於系統同時允許 的用戶數目。但是當用戶使用X Winodw或其他產生了大量進程和應用程序時,即使只有 很少的用戶,系統表格也很容易被填滿。因此這個值不能設置的太小。尤其是要將FreeBSD 用作伺服器的時候,伺服器會啟動大量的進程,往往要增大這個值以提升系統對高負載的 支持能力。

  系統的進程表的大小為:20+16*maxusers,去除系統啟動時自動啟動的一些守護 進程數目,因此可以大致估計出系統中空余的進程表項。進而估計出系統中還可以容納的 進程數目,因此就可以根據需求改變這個值的設置。

options		MATH_EMULATE		#Support for x87 emulation
options		INET			#InterNETworking
options		FFS			#Berkeley Fast Filesystem
options		FFS_ROOT		#FFS usable as root device [keep this!]
options		MFS			#Memory Filesystem
options		MFS_ROOT		#MFS usable as root device, "MFS" req'ed
options		NFS			#Network Filesystem
options		NFS_ROOT		#NFS usable as root device, "NFS" req'ed
options		MSDOSFS			#MSDOS Filesystem
options		"CD9660"		#ISO 9660 Filesystem
options		"CD9660_ROOT"		#CD-ROM usable as root. "CD9660" req'ed
options		PROCFS			#Process filesystem
options		"COMPAT_43"		#Compatible with BSD 4.3 [KEEP THIS!]
options		SCSI_DELAY=15000	#Be pessimistic about Joe SCSI device
options		UCONSOLE		#Allow users to grab the console
options		FAILSAFE		#Be conservative
options		USERCONFIG		#boot -c editor
options		VISUAL_USERCONFIG	#visual boot -c editor

config		kernel	root on wd0

  MATH_EMULATE選項是一個x87浮點運算模擬器,當電腦中沒有x87協處理 器時才需要使用。目前586級以上處理器的處理器內部均已集成了浮點運算器件,因此除非 使用386芯片或部分低檔486芯片,核心配置並不需要這種模擬功能。此外,另一個具有相 同功能的選項為GPL_MATH_EMULATE,這個選項性能更好,只是它使用GNU的數學函 數代碼,而GNU公用許可比BSD許可要求更嚴格。因為這個版權的原因,預設使用 MATH_EMULATE,這保証FreeBSD可以只以二進制形式向外發布,而不違反GNU許可。 由於兩個選項功能相同,只能任選一種,不能同時使用這兩個選項。

  INET選項定義了基本的TCP/IP支持,由於FreeBSD是網路操作系統,因此這 是最基本的選項。

  FFS為BSD快速檔案系統,即UFS檔案系統,這是FreeBSD使用的基本檔案系 統。FFS_ROOT用於在UFS系統上啟動系統, 允許將UFS檔案系統用作根檔案系統。 由於UFS是FreeBSD使用的最基本的檔案系統,因此應該設置FFS_ROOT,以使系統能夠從磁碟 上正常啟動。

  NFS為Sun公司開發的網路檔案系統,它是Unix之間共享檔案系統一種事實標 準。NFS檔案系統也可以用作根檔案系統,這通過NFS_ROOT選項進行定義,使得可以 配置FreeBSD無碟工作站,無碟的FreeBSD系統可以用於專用X終端等特殊場合。

  "CD9660"為ISO 9660 格式的CD-Rom檔案系統,使用它訪問CD-Rom上的檔案系 統。"CD9660_ROOT"使得可以用光碟作根檔案系統

  MFS為內存映射檔案系統,可以將內存映射為檔案系統,改善檔案系統的性能, 當然這只適合有大量物理內存和交換空間的系統。也可以使用mfs類型來將交換分區安裝到某 個目錄上,保存一些臨時檔案。例如,系統的交換分區為wd0s3b,那麼可以使用 “mount -t mfs /dev/wd0s3b /tmp” ,將交換分區安裝到/tmp目錄上。由於tmp是臨時目錄, 被程序用來交換數據,使用mfs檔案系統能提高訪問速度,這是擁有大量內存的電腦使用 mfs較常用的方式。MFS_ROOT用於將內存映射檔案系統用作根檔案系統,FreeBSD的安 裝軟碟就是使用的這種根檔案系統,此外,使用MFS_ROOT也用於將FreeBSD系統用作專用防火 牆的嵌入式操作系統。

  當安裝了系統原始碼之後,可以很容易生成能運行在一張軟碟上的FreeBSD系統,叫做 PicoBSD,它主要被用做路由器、防火牆等專用伺服器等。

  MSDOSFS選項定義了msdos的fat檔案系統,這不是必要的檔案系統選項,使用它 來訪問本地硬碟上的msdos檔案系統。如果要訪問軟碟上的msdos檔案系統,使用mtools軟體更 為方便。

  PROCFS是一個偽檔案系統,它被安裝到/proc目錄,用於訪問與相應的進程相關 的信息,一些系統程序如ps,使用它來獲得進程的信息。

  此外,"EXT2FS"選項為Linux所使用Ext2fs類型的檔案系統,如果用戶的電腦 上還運行著Linux,並希望使用FreeBSD訪問本地硬碟上的Linux檔案系統,就需要這個選項。

  FreeBSD 2.x以後版本是從4.4BSD發展來的,但FreeBSD 1.x是來自於4.3BSD的。4.3BSD是 一個非常重要的BSD版本,很多應用程序也是依照4.3BSD開發的。因此需要使用這個"COMPAT_43" 選項保持和基於4.3BSD(包括FreeBSD 1.x)應用程序的兼容性。

  SCSI設備在設置時需要一定的延遲時間,以便使SCSI控制卡能正確的和SCSI設備通信。因 此需要定義SCSI_DELAY=15000選項,與其他選項不同,這個選項為數值設置,使用了賦值 符號和數字。這個值的單位為毫秒

  UCONSOLE選項使用戶能接管console,通常在使用X Window時比較有用,這樣就能在 X Window下接管console輸出的與系統相關的信息。FAILSAFE選項使得配置程序對待核心更 為謹慎和保守,從而增加了系統的安全性。

  USERCONFIGVISUAL_USERCONFIG這兩個選項使用戶可以在啟動時進入核心 參數設置程序UserConfig,配置硬體參數。USERCONFIG參數只提供基本命令行配置功能,而 VISUAL_USERCONFIG進一步提供全屏的編輯功能。

  config行指定核心檔案名及其位置,它指定核心名為kernel,並且核心所在的根檔案 系統位於wd0硬碟上,根檔案系統即為wd0a。FreeBSD習慣上使用kernel作為核心的檔案名,不應改變 。而它的位置wd0可能會根據硬體設置的不同而不同,例如:如果將FreeBSD安裝到了SCSI硬碟上,則 核心和根檔案系統的位置就為da0中的分區。

# To make an SMP kernel, the next two are needed
options 	SMP				# Symmetric MultiProcessor Kernel
options 	APIC_IO			# Symmetric (APIC) I/O
# Optionally these may need tweaked, (defaults shown):
#options	NCPU=2			# number of CPUs
#options	NBUS=4			# number of busses
#options	NAPIC=1			# number of IO APICs
#options	NINTR=24			# number of INTs

  如果用戶的電腦有多個處理器,就需要取消注釋,使用這幾個選項以進行支持。一般 SMPAPIC_IO是最基本的兩個設置選項,SMP選項是用於支持對稱多處理器SMP結構 的基本代碼,APIC_IO支持APIC IO方式對稱I/O。使用這兩個選項之後,系統就能自動檢測出所使用 的處理器個數以及其他系統資源。當然也可以手工指定這些資源設置,這用於不能正確偵測處理器數 目時使用。預設核心不支持多處理器,因此對於多處理器系統必須重新生成核心。

  由於只有586以上的芯片才支持SMP,因此這需要在cpu行的設置中刪除386和486行的設置,明確指 定處理器的類型。否則就會發生邏輯衝突。

controller	isa0
controller	eisa0
controller	pci0

  這三行定義了三種控制器的基本支持代碼:ISAEISAPCI總線控 制器。

  ISA總線類型是個人電腦的標準配置,很多驅動程序代碼都基於ISA控制器的代碼,因 此系統必須對ISA總線進行支持。EISA總線類型是ISA的擴展,使用在一些較老型號的伺服器中, 今天已經逐漸被PCI總線代替,它是可選的。PCI選項支持PCI總線設備的通用代碼,目前PCI總線 主板是個人電腦的主流,這個選項也是必須的。

  如果用戶的電腦不存在EISA總線,可以刪除對EISA選項的支持。但是,由於後面設置的一些設備 是EISA總線類型的設備,依賴這個選項的支持,必須同時也必須刪除所有的EISA總線類型的設備,否則就存 在邏輯錯誤。配置程序並不會自動刪除那些並不存在的設備選項,這樣就導致直到編譯時才會發現EISA總 線設備的驅動程序發生編譯錯誤,編譯不能正常完成。

controller	fdc0	at isa? port "IO_FD1" bio irq 6 drq 2
disk		fd0	at fdc0 drive 0
disk		fd1	at fdc0 drive 1

  控制器fdc0是支持標準軟碟控制器的基本代碼,一般個人電腦能支持兩個軟碟驅動器, fd0fd1設備。 通過drive參數的值可以指定這兩個軟碟的順序。fdc0使用的資源是個 人電腦預設設置,因此不存在系統探測問題。此外,雖然讓核心自動探測軟碟的數量沒什麼壞處, 但刪除不必要的選項可以略微加快系統啟動的速度

options		"CMD640"	# work around CMD640 chip deficiency
controller	wdc0	at isa? port "IO_WD1" bio irq 14
#controller	wdc0	at isa? port "IO_WD1" bio irq 14 flags 0x00ff8004
disk		wd0	at wdc0 drive 0
disk		wd1	at wdc0 drive 1

controller	wdc1	at isa? port "IO_WD2" bio irq 15
disk		wd2	at wdc1 drive 0
disk		wd3	at wdc1 drive 1

options		ATAPI		#Enable ATAPI support for IDE bus
options		ATAPI_STATIC	#Don't do it as an LKM
device		acd0		#IDE CD-ROM
device		wfd0		#IDE Floppy (e.g. LS-120)

  前面的這些選項是用於支持IDE驅動器及硬碟的配置,事實上這些設置不但支持IDE驅動器, 還支持一些較老的ST506或ESDI界面的硬碟設備,雖然那些硬碟設備已經淘汰,沒有人再使用它們 了。

  "CMD640"用於修正使用CMD640控制芯片的系統主板的問題,wdc0是第一個IDE接口 控制器,wdc1為第二個IDE控制器,一個個人電腦系統中只能存在兩個標準IDE控制器,並且一 個IDE驅動器能帶兩個硬碟設備,因此wdc0上能連接兩個硬碟wd0和wd1,wdc1能連接wd2和wd3。其 中wd0和wd2為主硬碟,wd1和wd3為從硬碟。當然可以通過指定磁碟的參數at和drive參數的設置, 改變硬碟號的順序。

  由於IDE經過了一個長期的發展,控制器是由不同的制造廠商制造的,因此在一些細微的方 面也存在有差異,主要是新的控制器能夠支持更強的傳輸模式,當然它也支持原有的兼容模式。為 這些細小的差異沒有必要重寫驅動程序,只需要更改配置行中的參數設置,就能支持某些IDE控制 器的高級功能。

  每個控制器都有長32位的flags標志位,用於定義IDE硬碟的I/O類型,其中前16位定義 drive 1的標志,後16位定義drive 0的標志。例如wdc0的標志為0x00ff8004,表示定義了wd0的 標志為0x8004,使用32位I/O每次傳送4個扇區,而wd1設置為0x00ff,不探測32位傳輸而使用兼 容模式。這個標志也可以分割為兩個16位的部分,也在每個磁碟設備的標志中定義。

  IDE控制器中還支持光碟驅動器,首先需要ATAPI提供IDE界面使用的ATAPI類型光驅 基本代碼, ATAPI_STATIC這一選項使ATAPI代碼直接編譯到核心檔案中,而不編譯為可加載 模塊。而acd0就為IDE光驅的驅動程序。由於光驅就是連接在IDE控制器上,因此IDE接口的光驅還需 要相應IDE驅動器的支持,例如光驅接在第二個IDE控制器上,則必須增加wdc1控制器選項。如果光 驅上的主/從(master/slave)跳線不正確,就不能正確偵知IDE光驅,很多IDE光驅出廠設置位從設 備,在該IDE總線上沒有其他設備的情況下,應該將光驅跳為主設備。

  2.2和3.0release版本使用wcd0作光驅的驅動程序,而acd0是3.1-stable使用的新CD-ROM驅 動,因此從2.2.x或3.0-release升級到3.1-stable時,要更改設置檔案中的原wcd0項為acd0項。以 後隨著系統的發展,老wcd0的代碼會完全刪除,新代碼的驅動名字會恢復為wcd0。

  wfd0為IDE接口的軟碟驅動器,某些zip驅動器需要這個驅動器的支持。

# A single entry for any of these controllers (ncr, ahb, ahc) is
# sufficient for any number of installed devices.
controller	ncr0
controller	ahb0
controller	ahc0
controller	isp0

# This controller offers a number of configuration options, too many to
# document here  - see the LINT file in this directory and look up the
# dpt0 entry there for much fuller documentation on this.
controller      dpt0

controller	adv0	at isa? port ? cam irq ?
controller	adw0
controller	bt0	at isa? port ? cam irq ?
controller	aha0	at isa? port ? cam irq ?
#controller	aic0	at isa? port 0x340 bio irq 11

controller	scbus0
#controller  scbus1 at ahc1 bus 0

device		da0
#disk  da0 at scbus0 target 0 unit 0

device		sa0
device		pass0
device		cd0	#Only need one of these, the code dynamically grows

  對於網路伺服器來講,SCSI控制器是理想的選擇,因為SCSI設備不需要占用電腦處理器的 處理能力,因此適合經常發生並發存取的伺服器系統。FreeBSD 3.0之後的SCSI驅動代碼已經完全重 寫,新的代碼更高效,並支持更多新設備。

  對於不同的SCSI設備,需要不同的SCSI控制器驅動程序,例如aha0為支持使用Adaptec 154x 芯片SCSI控制器的驅動程序,核心配置檔案LINT和安裝介質中的HARDWARE.TXT中也列出了FreeBSD支持的 SCSI控制器對應的各個選項。需要根據自己電腦上的SCSI卡的具體型號進行選擇。確定了具體的驅動之 後,可以刪除和添加相應的控制行,但需要注意最好不要改變配置檔案中控制器的前後順序,因為配置順 序決定系統檢測硬體的順序,那麼配置順序不正確有可能造成錯誤的檢測結果。

  scbus0控制器提供基本的SCSI總線驅動代碼,當不使用參數的時候,這個控制器將自動和檢 測到的某個SCSI控制器聯繫起來。在已經了解系統擁有的控制器的條件下,可以使用at參數手工指定某個序 號的SCSI總線位於哪個SCSI控制器上,一般一個SCSI控制器可以有幾個SCSI總線通道。上例中注釋中的 scbus1總線控制器被指定為ahc1控制卡上的第一個總線,注意自動分配SCSI總線序號的方式與手工指定 SCSI總線的方式不應該混用,以避免出現衝突錯誤。

  da0就用於標識SCSI硬碟設備,不同的SCSI磁碟的SCSI總線scbus0,總線上的target號和邏 輯單元號unit這三個參數是不同的,可以用來標識不同的SCSI硬碟。如果忽略這三個配置參數,FreeBSD按 檢測的順序分配硬碟的序號。但是也可以手工指定這三個參數,確定硬碟序號。同樣,手工指定和自動分配 序號不能混用。

  指定總線序號並指定硬碟序號的益處是硬碟序號的順序將與核心自動檢測的順序無關。由於每個系統 中會同時存在多個SCSI總線,每個總線上可以有安裝有多個SCSI設備和邏輯單元,因此在增加、移去某個磁 碟時,會使其他磁碟自動分配的序號發生改變,從而使FreeBSD安裝檔案系統出現問題,嚴重的會影響正常 啟動。解決辦法就是應該手工指定SCSI硬碟與總線、控制器的關系。

  sa0為SCSI磁帶驅動器,cd0為SCSI光驅,pass0為新SCSI驅動程序CAM中的通 道驅動程序。

device		wt0	at isa? port 0x300 bio irq 5 drq 1
device		mcd0	at isa? port 0x300 bio irq 10

controller	matcd0	at isa? port 0x230 bio

device		scd0	at isa? port 0x230 bio

  上面這些驅動是一些老式的ATAPI界面的光驅,這些光驅控制器一般都和聲卡作在一起,目前已 經很少使用這些光驅了。

# atkbdc0 controlls both the keyboard and the PS/2 mouse
controller	atkbdc0	at isa? port IO_KBD tty
device		atkbd0	at isa? tty irq 1
device		psm0	at isa? tty irq 12

device		vga0	at isa? port ? conflicts

# splash screen/screen saver
pseudo-device	splash

# syscons is the default console driver, resembling an SCO console
device		sc0	at isa? tty
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device		vt0	at isa? tty
#options		XSERVER			# support for X server
#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

device		npx0	at isa? port IO_NPX irq 13

  atkbdc0為鍵碟控制器,atkbd0為相應的鍵碟設備,psm0為ps/2 類型的滑鼠設備。vga0為顯示驅動程序,標準的控制台程序需要它的支持。vga0的 conflicts標志指出這個驅動程序會和其他設備共享某些資源,告訴核心不要因為這個硬體發生 資源衝突而認為是這個設置不正確。FreeBSD為多用戶系統,一般情況下各個設備不應該相互共 享資源,以避免訪問衝突。除非設備不能被使用者直接訪問的情況下,硬體才能共享系統資源。

  如果要取得更好的顯示效果,可以使用VESA選項(options VESA),來支持800x600的 控制台顯示模式(能支持132x60的字符模式)。只是VESA選項不能和多處理器選項SMP共存,它 也要求系統核心提供對虛擬86模式的支持,以便VESA顯示子系統就能控制顯示卡,所以同時需 要 “options VM86” 選項。

  splash偽設備用於支持splash螢幕圖象和螢幕保護功能,這能使得系統啟動時展 示一個圖象啟動標志,並能提供控制台下的螢幕保護功能。

  全稱為syscon的sc0驅動程序定義了預設的控制台設備,支持彩色和虛擬控制台 模式。vt0是可以用來替換sc0驅動另一個控制台驅動程序,只有在使用有些特殊的與sc0 不兼容的硬體的時候,才需要使用這個pcvt控制台驅動程序。如果使用vt0驅動,那麼或者會需要 設置XSERVERFAT_CURSOR等選項以提供更完善的支持。

  npx0為浮點協處理器的接口,這是用於支持浮點協處理器必需的選項。沒有浮點 協處理器的電腦必須配置數學防真MATH_EMULATE或者GPL_MATH_EMULATE以支持浮點運算。如果 同時使用了這兩類選項,則按照系統檢測結果,當npx0被檢測到時npx0就發揮作用。

#
# Laptop support (see LINT for more options)
#
device		apm0    at isa?	disable	flags 0x31 # Advanced Power Management

# PCCARD (PCMCIA) support
#controller	card0
#device		pcic0	at card?
#device		pcic1	at card?

  上面這些選項用來支持便攜電腦,apm0用於支持高級電源管理功能,card0 控制器對PCMCIA接口的設備進行支持,需要指定相應的設備如pcic0等。

  標準的FreeBSD核心代碼支持的便攜電腦設備並不豐富,因此FreeBSD中有一個PAO的開發 計劃,專門為用於支持便攜電腦。

device		sio0	at isa? port "IO_COM1" flags 0x10 tty irq 4
device		sio1	at isa? port "IO_COM2" tty irq 3
device		sio2	at isa? disable port "IO_COM3" tty irq 5
device		sio3	at isa? disable port "IO_COM4" tty irq 9

# Parallel port
device		ppc0	at isa? port? net irq 7
controller	ppbus0
device		nlpt0	at ppbus?
device		plip0	at ppbus?
device		ppi0	at ppbus?
#controller	vpo0	at ppbus?

  sio0、sio1、sio2sio3為四個標準串口設備,其中sio0還可以用做終端 控制台,這樣專用伺服器就可以不使用顯示器、鍵碟而使用一個普通字符終端來完成控制任務, 這樣多個FreeBSD系統能放在專用機架上,用做專用伺服器。sio0的flags規定了這個串口用做控 制台的優先級,通常使用0x10就足夠了,使用0x20或0x40會妨礙對這個串口進行其他正常操作。

  3.0之前的FreeBSD系統使用COMCONSOLE設置選項來達到同樣的目的,這個選項在新系統中不 再有效,使用sio0的flags就能達到同樣的目的。

  要使用串口作控制台,還需要在/etc/ttys中定義相應的配置行,使得系統在sio0對應的ttyd0 設備上執行相應的getty命令。Packages Collection中的comconsole-0.1.tgz軟體包能幫助進行這些 設置。

  設備ppc0、控制器ppbus0用於支持並口設備,nlpt0為並口印表機設備,plip0為並口網路界 面,ppi0用於一般目的的輸入輸出。vpo0為某些並口SCSI設備的控制器,因此除了並口驅動之外, 也需要SCSI總線控制器scbus0和SCSI硬碟da0的支持。這些並口設備是3.1版本之後更新的並口驅動, 原有的驅動為lpt0,只能支持最標準的並口模式,不能並口的新模式。

# Order is important here due to intrusive probes, do *not* alphabetize
# this list of network interfaces until the probes have been fixed.
# Right now it appears that the ie0 must be probed before ep0. See
# revision 1.20 of this file.
device ax0
device de0
device fxp0
device mx0
device pn0
device rl0
device tl0
device tx0
device vr0
device vx0
device wb0
device xl0

device ed0 at isa? port 0x280 net irq 10 iomem 0xd8000
device ie0 at isa? port 0x300 net irq 10 iomem 0xd0000
device ep0 at isa? port 0x300 net irq 10
device ex0 at isa? port? net irq?
device fe0 at isa? port 0x300 net irq ?
device le0 at isa? port 0x300 net irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 net irq 10 drq 0
device ze0 at isa? port 0x300 net irq 10 iomem 0xd8000
device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000
device cs0 at isa? port 0x300 net irq ?

  由於FreeBSD是網路操作系統,因此通常電腦常常通過以太網卡或廣域網卡與網路相 連接。對於每個網卡設備,必須在核心配置中進行相應的配置。上述選項就用於設置不同的網 絡設備的驅動程序。FreeBSD預設核心包括了對很多網卡設備的支持,這些設備的驅動程序都被 編譯入系統核心中,占據了大量不必要的空間。因此在定制系統核心時,最好刪去電腦上不 存在的網卡類型的驅動,這樣也可以加快系統的硬體探測過程。如果在預設核心中,網卡已經 能正常運行,就可以使用dmesg找出正確的網卡類型。當不能確定網卡類型的時候,更改核心 配置檔案一定要注意順序,因為檢測順序非常重要,由於不同的網卡驅動相互有影響,正確的 檢測順序可以避免出現探測錯誤。

  較老的ISA網卡還需要配置參數和硬體設置相一致,就要調整網卡使用的端口地址,irq 和iomem等參數與網卡使用的真實資源相一致。這是由於生產兼容網卡的廠商太多,因此各種兼 容網卡的預設設置卻並不相同,而較老的驅動程序不能自動探測設備使用的資源。新的PCI網卡 就不存在這個問題,驅動程序支持PNP,可以自動探測硬體資源。

pseudo-device	loop
pseudo-device	ether
pseudo-device	sl	1
pseudo-device	ppp	1
pseudo-device	tun	1
pseudo-device	pty	16
pseudo-device	gzip		# Exec gzipped a.out's

  偽設備並不與具體的物理設備有關,但外在表現為一種設備。通常偽設備用於支持系統中 與某類操作相關的基本代碼。

  loop定義TCP/IP使用的loopback網路設備,這將使電腦能夠通過TCP/IP堆棧內 部,以127.0.0.1(通常名字定義為localhost)的IP地址訪問自身。由於FreeBSD為網路操作系統 ,這個選項是必須的。不管電腦上有沒有網路設備,FreeBSD都提供了這個loopback的偽網路設 備,以提供最基本的網路功能。網路功能是FreeBSD系統的基本功能,FreeBSD上的很多程序需要 網路支持才能正常運行。很多程序能使用這種網路支持,進行本機內部進程間的連接。

  ether偽設備定義了支持Ethernet協議的基本代碼,Ethernet是最流行的局域網標 準,如果電腦通過Ethernet網卡互相連接,就需要這個選項的支持。

  sl為支持SLIP協議的偽設備,其後的數值參數為支持的sl偽設備的數目。SLIP協議 已經逐漸被PPP協議取代。因此一般可以刪除這個選項。

  ppp是在核心中實現PPP協議的驅動程序,之後的數字指定了可同時使用的PPP會話的 數量。用戶使用這個偽設備便能使用pppd,使用PPP協議通過modem與另一台電腦相連接。

  tun為tunnel偽設備,用於建立直接的通道。它也被常用來支持PPP協議,不同在於 它在內部沒有實現PPP協議,而支持PPP協議的代碼是在應用軟體ppp中實現的。這是用戶模式的PPP 支持,與偽設備ppp相比,它較容易配置和使用。

  pty是偽終端設備,在遠程登錄等需要以終端方式進行連接,但又並非真實終端的應 用程序中必須使用這種設備,如telnet或xterm等程序。這裡定義的限制是核心允許同時創建的偽終端 數,預設設置對於個人使用還能基本滿足,但如果將系統用於提供遠程登錄服務,例如用做BBS伺服器 ,16個偽設備就遠遠不夠。此外,X Window用戶也會占用大量的pty設備。

  偽設備gzip是FreeBSD的另一種特性,它使FreeBSD能夠運行用gzip壓縮過的a.out格式 執行檔案,因此能節約磁碟空間。但是這種特性只支持傳統的a.out格式執行檔案,而FreeBSD自3.0以 後,雖然仍然支持a.out格式,但標準執行程序的格式轉為ELF格式。因此這個特性帶來的好處就大大 降低了。為了利用這個特性,可以將應用程序編譯為a.out格式(使用-aout編譯連接選項)。

# KTRACE enables the system-call tracing facility ktrace(2).
# This adds 4 KB bloat to your kernel, and slightly increases
# the costs of each syscall.
options		KTRACE		#kernel tracing

# This provides support for System V shared memory and message queues.
#
options		SYSVSHM
options		SYSVMSG

  配置KTRACE選項使核心允許系統調用跟蹤程序ktrace能正常運行。

  SYSVSHM、SYSVMSG這個選項提供FreeBSD與System V的兼容性,其中第一個選項SYSVSHM 提供了進程間共享內存的機制,X Window系統就需要這種共享內存機制,以提高管理圖形的性能。 SYSVMSG用於支持System V的消息隊列,只在特定的程序中用到,如Windows 9x的模擬器wine。

#  The `bpfilter' pseudo-device enables the Berkeley Packet Filter.  Be
#  aware of the legal and administrative consequences of enabling this
#  option.  The number of devices determines the maximum number of
#  simultaneous BPF clients programs runnable.
#pseudo-device	bpfilter 4	#Berkeley packet filter

  bpfilter即Berkeley Packet Filter,通常電腦只接收與本機有關的數據包或廣播包。 在網上傳播的數據包,如果與本機無關,電腦將不予理會,這樣的好處是減輕了處理器負擔。如果要讓 電腦能夠捕獲經過網卡的所有數據包,就要讓網卡工作在混雜模式,此時就需要使用這個偽設備。後面 的數字指定能同時使用這個功能的程序的數目。

  使用這個選項的目的是使電腦能捕獲數據包並進行分析,監測網路、尋找故障,一些特殊功能 如DHCP的客戶程序,也需要這個偽設備的支持。但這種功能如果被不正當使用,將對整個局域網的安全 造成威脅,尤其是使用共享式以太網連接方式的網路,網路上傳播的信息將被這台電腦所竊聽。需要 注意的是,不是所有的網卡都支持混雜模式,只有支持混雜模式的網卡才能使用這個功能。

# USB support
#controller    uhci0
#controller    ohci0
#controller    usb0
#
# for the moment we have to specify the priorities of the device
# drivers explicitly by the ordering in the list below. This will
# be changed in the future.
#
#device        ums0
#device        ukbd0
#device        ulpt0
#device        uhub0
#device        ucom0
#device        umodem0
#device        hid0
#device        ugen0

#
#options       USB_DEBUG
#options       USBVERBOSE

  這些設置選項是用來支持USB控制器和USB設備,目前USB設備還不是很流行,但它是未來發展的 一個趨勢。