天天看點

FreeBSD手冊——配置FreeBSD核心

轉自中文FreeBSD使用者組 http://journal.cnfug.org/issue8/000045.html#45

FreeBSD手冊——配置FreeBSD核心  [閱讀次數: 1761次]

顧宏軍(redarmy)@linuxaid.com.cn>

9 配置FreeBSD 核心

9.1 大綱

9.2 為什麼要建構一個定制的核心?

9.3 建立并安裝一個定制的核心

9.4 配置檔案

9.5 建立裝置節點

9.6 出現問題如何解決

----------------------------------------------------------------------

Chapter 9 配置FreeBSD 核心

由Jake Hamby最初投稿,由Jim Mock更新

核心是FreeBSD系統的核心。它用來進行記憶體管理,安全控制,網絡,磁盤通路等等。而有

時你需要重新配置和編譯你的核心。

讀完這一章,你将知道以下内容:

* 為什麼需要建構一個定制的核心.

* 怎麼樣寫一個核心配置檔案,或修改一現有的配置檔案.

* 怎麼樣使用核心配置檔案創造并建構一新核心.

* 怎麼樣安裝一個新核心.

* 在需要的情況下,怎麼樣在/dev 中建立裝置檔案.

* 出問題後,如何解決所出現的問題.

以前,freebsd的核心是一個宏核心。這意味着,核心是一個支援固定數量裝置的大

型程式。如果你想改變核心的行為,就必須從新編譯核心,并用新核心從新啟動系統。.

如今,freebsd核心正快速向一子產品化方向遷移;也就是說核由子產品組成,核心功能

由子產品實作,我們能根據需要随時加載或解除安裝功能子產品。這使得核心能迅速識别新硬體

(如筆記本電腦上的PCMCIA卡),能容易的在核心中加入最初編譯的核心所不具備的功

能。這就是所說的子產品化核心。通俗的講,就是KLDs。.

盡管如此,仍然有必要做一些靜态的核心編譯。因為在某些情況下,功能性互相交叉,

無法實作動态加載;也有可能就是還沒有人寫出實作這種功能的核心可動态加載的子產品.

建構一個定制的核心幾乎是每一個UNIX 使用者都該有的重要能力之一。這樣做雖然會

消耗一定的時間,但它将會對你的FreeBSD 系統帶來很多好處。定制的核心将隻包含對

你PC的硬體裝置的支援,這點不象需支援很廣泛的硬體裝置的GENERIC 核心。它會帶來

許多好處:

* 更短的啟動時間。因為核心隻檢測你機器上有的硬體,那麼系統啟動所需的時間

将大大減少。

* 較少的記憶體使用量。一個定制的核心通常會比GENERIC 核心使用更少的記憶體。這

一點很重要,因為核心必須始終駐留實存,占用記憶體。是以,一個定制的核心對于記憶體較

少的機器來說尤為重要.

* 額外的硬體支援。一個定制的核心允許你為 聲霸卡等不為GENERIC 核心所支援的

裝置提供支援.

首先,我們粗略浏覽一下建構核心的目錄。所有提及的目錄都是相對于/usr/src/sys 

而言的,它們也可以通 過/sys 通路。這裡的子目錄代表核心的不同部分。但對我們而言,

最重要的是/arch/conf ,在這兒你可以定 制核心的配置,然後進行編譯,它是所譯核心

的存放地。這裡的arch 也可能是i386,alpha,或pc98(pc硬體的 一種體系,在日本比較流

行) 。在一個特殊的體系結構目錄内的所有代碼是這個體系結構所獨有的;其它部 分的

代碼是所有平台共享的。注意一下目錄的邏輯結構,所有支援的裝置、檔案系統和選項,

等都在它們各自 的子目錄下。FreeBSD 5.x及以後的版本已經支援sparc64,還有一些其

它平台的支援正在開發中。

注意:如果你的系統沒有/usr/src/sys 目錄,這表明核心源代碼就沒有被安裝。最

容易的安裝方式是以root 的身份運作/stand/sysinstall ,然後選擇

configure->Distributions->src->sys。要是你不喜歡用sysinstall,但有freebsd

的官方安裝盤,那麼你可 以用以下的指令安裝源代碼:

# mount /cdrom

# mkdir -p /usr/src/sys

# ln -s /usr/src/sys /sys

# cat /cdrom/src/ssys.[a-d]* | tar -xzvf -

接着,切換到arch/conf 目錄,拷貝GENERIC 檔案,并命名成你所希望的核心的名稱。

例如:

# cd /usr/src/sys/i386/conf

# cp GENERIC MYKERNEL

通常,這個名稱是大寫的,如果正維護着多台不同硬體的FreeBSD 機器,以你機器的域

名來命名是非常好的主意。我們把它命名為MYKERNEL做為例子。

技巧:把核心配置檔案儲存在/usr/src目錄下不是一個好的習慣。因為如果定制核心

出錯的話,隻需要删除/usr/src目錄,然後從新開始。但當你這樣做之後,你會意識到

你已經删除了你的核心定制檔案。不要直接編輯GENERIC,因為它可能會在下次同步

源碼樹時被覆寫,自然你的核心的更改也就沒啦。

你該把你的配置檔案放在别處,然後在i386中建個符号連結指向該配置檔案;

例如:

# mkdir /root/kernels

# cp GENERIC /root/kernels/MYKERNEL 

# ln -s /root/kernels/MYKERNEL

注意:必須要以root身份執行以上還有以下的指令,否則會出現權限不夠的錯誤。

現在,用你喜歡的文本編輯器編輯MYKERNEL 。如果你是初學者,那唯一能用的編輯器

可能就是vi,在這兒介紹它的使用就太複雜,不介紹了,但在參考書目中有許多書會介紹

到它。然而,FreeBSD 提供了更易使用的編輯器是ee, ee是初學者的上選。你可以

很自由地改變注釋行來反映你的配置情況,或和GERNERIC 的不同之處。

如果你定制Sunos 或其它BSD 系統核心的經驗,那麼這個檔案中的很多内容你可能非常

熟悉。如果你以前使用的是諸如DOS 之類的系統,那GENERIC 配置檔案就看起來非常困難,

是以在下面的配置檔案章節将慢慢地、仔細地進行介紹。

注意: 在執行任何更新之前,在要用最新釋出的源代碼來同步你的源代碼樹時,确信

始終檢查/usr/src/UPDATING檔案。在這個檔案中更新freebsd所有重要問題都指出來了。

/sur/src/UPDATING 總是适合你FreeBSD 源代碼的版本,是以對于新資訊比手冊所說更加

準确。

現在該開始編譯核心代碼了。有兩種方法實作核心的編譯,使用哪一種方法依賴于你重建

核心的原因以及你的freebsd的版本。

* 如果僅安裝了核心源代碼,那麼時候使用方法1.

* 如果你使用的FreeBSD 是4.0 之前的版本,并且沒有使用make world procedure更新

到4。0或以上版本,則使用方法1.

* 如果編譯核心,而沒有更新源代碼(多半是僅僅為增加一個新的特性,如IPFIREWALL)

,那麼你可以随便用哪種方法

* 如果你正重建的核心是make world過程的一部分,那麼使用方法2。

方法1:使用傳統方法建構核心

1. 運作config來産生核心代碼。

# /usr/sbin/config MYKERNEL

2. 進入建構目錄。 它在運作上述指令後産生。

# cd ../compile/MYKERNEL

對5。0之前版本的freebsd,使用以下指令:

# cd ../../compile/MYKERNEL

3. 編譯核心。

# make depend

# make

4. 安裝新核心

# make install

方法2. 使用新近的方法建構核心。

1. 進入 /usr/src目錄.

# cd /usr/src

2. 編譯核心.

# make buildkernel KERNCONF=MYKERNEL

3. 安裝新核心

# make installkernel KERNCONF=MYKERNEL

注意: 在freebsd4。2及之前版本裡,需要用KERNEL=. 4.2-STABLE代替KERNCONF=;

在2001年2月2日之前不能識别KERNCONF=。

如果你還沒有通過任何方法更新你的源代碼樹(沒有運作CVSup, CTM, 沒有使用anoncvs),

那你應當按如下順序執行:config,make depend,make,make install

新的核心将會被拷貝到根(/)目錄下,檔案名為kernel,而舊的核心将會被重命名為

kernel.old 。現在,重新系統以使用新的核心。如果發生錯誤,在這章結尾會有一些故

障的解決辦法。一旦你的新核心不能啟動,請務必讀有關如何恢複的章節。

注意:從freebsd5。0起,核心和它們的子產品一起被安裝在 /boot/kernel,舊核心被

備份成/boot/kernel.old。 其它和啟動程序相關的檔案如loader(8) 及配置也被放在

/boot裡。 第三方子產品或 定制的子產品被放在/boot/modules裡, 使用者應該意識到保持

子產品和編譯的核心的同步非常重要. 子產品不和編譯的核心同步,可以會引起不穩定或錯誤。

注意:如果加入了任何新的裝置(如聲霸卡),并且你使用的是4.x及之前的版本,你可能

需要在使用之前,先在/dev 目錄下加入這些裝置節點。具體的做法,可以看本章建立

裝置節點部分。

核心設定的格式是很簡單的,每一行包含了一個關鍵詞(keyword) 與一個或多個參數, 

而大多數的設定都隻包含一個參數。#号之後的文字都是注釋,會被程式忽略掉。下面的幾

個小節,将依次介紹每個列在GENERIC 中的關鍵詞(keyword),雖然有些相關主題(如網絡)

的關鍵詞會放在同一小節,但是這些關鍵詞可能位于GENERIC 的很多地方。詳細的各個選項

(option)清單,可以看和GENERIC檔案同一目錄下的LINT檔案;它列出了絕大部分可能的設

備及其選項(options),且有更詳細的注釋。如果你不能确定某一行設定的目的是否必要,

請先看LINT。

注意:在5。x及其以後的版本裡,LINT檔案将不複存在。在NOTES檔案中有和體系結構相關

的參數說明。一 些不依賴于特定體系結構的參數可以在/usr/src/sys/conf/NOTES檔案中

檢視。在這裡回顧一下這些參數也許 比較明智。

下面是一個帶有很多額外注釋的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/doc/en_US.ISO8859-1/books/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 ../../conf/NOTES and NOTES files.

# If you are in doubt as to the purpose or necessity of a line, check first

# in NOTES.

# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.380 2003/03/29 13:36:41 mdodd Exp $

下面這個選項在每個核心中都要有:

machine i386

它指明了機器的硬體體系結構。它必須是i386, pc98, sparc64, alpha, ia64, amd64,

和powerpc當中的一 種。

cpu I486_CPU

cpu I586_CPU

cpu I686_CPU

上面的選項指出了在你的系統中所用的CPU 類型。你可以使用多個CPU 類型(例如, 你

不确信你使用的是I586_CPU 還是I686_CPU), 然而,對于一個定制的核心,最好是隻

指定你所擁有的CPU 類型。如果你不能确定你的CPU 類型,你可以通過/var/run/dmesg.boot

檔案中的你的啟動信 息來确定。

freebsd對386級别的cpu的支援代碼仍然存在于核心源代碼中,但預設情況下它并未啟用

(STABLE 和CURRENT 版都是)。這意味着要在一386機器上安裝freebsd,有以下方式可行:

* 先安裝一個舊版的freebsd,然後從源代碼進行系統重建,具體方法見第9章第3節.

* 通過使用預編譯的/usr/obj,在新機型上編譯userland和核心,而安裝在386機器上。

(具體方法21章5節).

* 建立你自己的包含對386cpu支援的FreeBSD安裝CD光牒這幾種方法中,第一種是最簡單的,

但是它需要你的386上有比較大的空閑磁盤空間,而這一點比較難滿足。

The first of these options is probably the easiest of all, but you will

need a lot of disk space on a 386-class machine which may be difficult to

find.

ident GENERIC

ident 是一個核心的辨別符。你應該把它改成想給核心取的名字,例如,如果一直是按照

以上的說明做的,那 麼該改為MYKERNEL。放在ident 後的參數,将在你用這個核心啟動

時顯示在螢幕上。給新核心起個和通常核( 比如你想建實驗性質的kernel)不同的名稱

是個不錯的做法。

注意:象machine 與cpu 這兩個設定。如果你的核心名稱包含數字,請記得用雙引号把

它括起來。核心名稱将會使用-D 參數傳給編譯器,是以不要用像DEBUG 或是其它可能幹擾

編譯器的機器、CPU 名稱,如vax 。

maxusers n

maxusers值的大小定義了重要的系統表的大小。這個數值大概地和你機器的同時使用者的數量相等。

從freebsd4。5起,如果它被設定為0,那麼系統會自動進行調整。在5。x中,如果這個值沒有指定,

那麼它默 認是0。如果你使用的4。5之前的版本,或者你想自己定義它的大小,那麼它起碼要設定

為4 個以上,特别是 你要執行X Window 或是編譯程式。因為maxusers 值決定了系統最大可同時

運作的程序數(processes),算 法是20 + 16 * maxusers 。如果你設定maxusers 值是1,則你

的系統隻能同時存在36 個程序 ,包括18 個(或更多)系統啟動要占去的程序數; 如果你使用了

X Window ,則又要用至少15 個程序。甚至閱讀一個man page 也會使用九個processes 來進行過濾、

解壓縮、然後顯示檔案。設定maxusers=64 ,則系統可以同時有1044 個processes ,這樣差不多對

所有應用都足夠的了 。當你執行程式時,出現“proc table full ”這樣的錯誤資訊,或者你要建

一個同時會有很多人來通路的網站(如ftp.freebsd.org) 時,你就要增加這個設定的值,然後重新

編譯核心。

注意: maxuser 這個參數并不限制可以登陸你系統的使用者的數目。它隻是設定一些表的大小來

合理的評估系統 可能的最大使用者數,以及它們每個人所能有的最多的程序數。有一個

關鍵詞(pseudo-device)的值則真的限 制了可以同時遠端連接配接(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

這是一個通用的TCP/IP 接口。如果你用telnet 或ftp 連到localhost( 等同于

127.0.0.1) ,則該連接配接會通過這個虛拟裝置連回來。這是一個必需的設定。

以下内容或多或少都有選項。它們下面或之後的資訊可供參考。

#To statically compile in device wiring instead of /boot/device.hints

#hints "GENERIC.hints" #Default places to look for devices.

在freebsd5。x及其更新版本中,檔案device.hints用于設定裝置驅動程式參數。預設

情況下 loader将字系統 啟動時檢查/boot/device.hints檔案。如果直接把這些隐含

參數内容編譯到核心中,那麼就沒有必要在/boot 中建立一個device.hints。

#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols

為節約所需空間,通常freebsd核心建構程序并不産生從編譯到連結産生目标核心過程

中的調試資訊。如果你 正測試 -CURRENT 分支的核心或者你想開發屬于自己的

freebsd核心,那你就不該登出掉這行。它使用 -g選 項,使得代碼在被gcc處理

時産生調試資訊。如果你在使用傳統的方法建構核心,那麼config -g 選項也可

實作該功能 (具體情況參考9章3小節).

options MATH_EMULATE #Support for x87 emulation

如果你的計算機沒有浮點運算處理器(386 或486SX) ,這行将使得核心提供軟體仿真

的浮點運算處理器。如果 你用的是486DX 或是386SX 、486SX( 還加裝了387 、487

晶片)或更高的(Pentium 、Pentium II 等)則不需 要這行設定。

注意: 這個仿真的運算處理器并不是很精确。如果你沒有浮點運算器,但需要較

高的精度,你可以改用GPL_MATH_EMULATE 參數,這将會使用GNU 的浮點運算

仿真器。因為GNU 使用許可的關 系,這個仿真器不是系統預設值。

在5.x中,運算模拟器預設并不被支援,因為在舊的cpu中,沒有實際浮點運算器的

是相當少見的。在許多情 況下,并不被GENERIC 核心支援,除非使用了附加選項。

options INET #InterNETworking

網絡支援。即使你不打算連上網絡,也要留着這個選項。對于大量的程式,需要至少

有個loopback網絡(例如 :用pc建立網絡連結)。是以這個選項基本上是強制的。

options INET6 #IPv6 communications protocols

這個啟用IPv6 通訊協定

options FFS #Berkeley Fast Filesystem

options FFS_ROOT #FFS usable as root device [keep this!]

最基本的硬碟檔案系統。要從硬碟啟動,就得留着它。

注意: 在FreeBSD 5.X中, FFS_ROOT 已不是必須的了。

options UFS_ACL #Support for access control lists

這個選項目前隻在5。x中可以使用,它使核心支援通路控制。這依賴于使用于使用

UFS2 及其附加特性;具體 特性在節 10.13有詳細叙述。預設支援通路控制清單

(ACLs), 如果以前在檔案系統上使用了通路控制清單, 那麼最好不要去除該它,

因為去除,很可能出現無法預知的問題。

options UFS_DIRHASH #Improve performance on big directories

這個選項可以在有大量目錄檔案時,加快磁盤操作速度,而代價就時使用更大的記憶體。

它對大型伺服器,或 互動式工作站比較有用,而如果是個小型的系統,如一個

防火牆,則沒必要使用它,因為額外的記憶體使用換來 的是磁盤速度的一點點提升。

options SOFTUPDATES #Enable FFS Soft Updates support

使核心支援Soft Updates, 以加快磁盤的寫入速度。要真正使用該功能,還得打開分區

的相應參數。通過 mount指令的輸出,可以看到磁盤的 soft-updates 是否已經打開。

如果沒打開,則可通過tunefs(對現有的 檔案系統)或newfs(對新檔案系統)指令

進行調整以實作對soft-updates的支援。

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 指令:

注意: 在5.X中, 使用md-backed UFS 檔案系統 替代MFS(配置memory-backed 檔案系統

的有關資料在 mdconfig 和mdmfs的手冊頁裡,在12章10節也有)。 是以MFS選項在5。x中

已經沒有了。

options NFS #Network Filesystem

options NFS_ROOT #NFS usable as root device, NFS required

網絡檔案系統,若不需要通過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-ROM時,核心會動态加載子產品以支援它)。音樂CD 則不需要用到這個

檔案系統。

options PROCFS #Process filesystem

process file system。這是一個虛拟的檔案系統,挂在/proc 下,允許程式(如ps) 擷取

有關正在執行的進 程的資訊。在5.x中,PROCFS已經不是那麼的重要了,因為很多調試和監視

工具已經能在無PROCFS的情況下工 作。 另外,要在5.X-CURRENT下用PROCFS,還必須有

PSEUDOFS的支援:

options PSEUDOFS #Pseudo-filesystem framework

在FreeBSD 4.X中,沒有PSEUDOFS。在5。x中,預設将不使用程序檔案系統,這一點不象freebsd4.x。

options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]

使系統相容4.3BSD 。掉這一行,有些程式将無法正常運作。

options COMPAT_FREEBSD4 #Compatible with FreeBSD4

5.x的i386及Alpha版,需要這個選項來支援一些為舊版系統編譯的調用了舊版接口的軟體。

推薦在所有可能 運作舊應用程式的i386和Alpha 系統(僅5.x中)中保留此選項;但在

ia64 和Sparc64? 平台裡不需要該選項。

options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI

這行設定使核心等待15 秒鐘,以供SCSI 控制器掃描你計算機上的SCSI 裝置。如果

隻有IDE 硬碟,則可不理會這個設定,另外,也可降低這個值,比如降到五秒,

以加快啟動的速度。如果你發現降低後,FreeBSD 無法正确辨認你的SCSI 裝置,那麼你該提高

這個值,延長 等待時間。

options UCONSOLE #Allow users to grab the console

允許使用者擷取控制台,對X Window 使用者很有用。舉例來說,你可以輸入xterm -C 

來打開一個xterm終端 ,這個視窗将顯示任何write 、talk 等指令的資訊,以及其它你收到的

資訊。當然, kernel 輸出的資訊也會在這裡出現。

注意: 在FreeBSD 5.X中, UCONSOLE 已經不使必要選項。

options USERCONFIG #boot -c editor

這個選項允許你從啟動菜單啟動配置編輯器。

options VISUAL_USERCONFIG #visual boot -c editor

這個選項允許你從啟動菜單啟動可視化的配置編輯器。

注意: 從FreeBSD 5.0 開始,USERCONFIG選項和新的device.hints方式沖突。具體内容可以看7章5節。

options KTRACE #ktrace(1) support

這個選項啟用核心程序跟蹤,在調試時很有用。

options SYSVSHM #SYSV-style shared memory

提供System V Shared memory的支援,最常用到它的應該是X Window 的XSHM 

擴充,不少繪圖相關程式會自動使用它來提供額外的速度。如果你要使用X Window ,你最好加入這個選項。

options SYSVSEM #SYSV-style semaphores

System V semaphores的支援,一般用不到,但它隻在kernel 中占用幾百個位元組的空間。

options SYSVMSG #SYSV-style message queues

System V messages的支援,一樣的,隻占用kernel 幾百位元組的空間。

注意: ipcs 指令可以顯示出所有使用到上述三個System V 功能的processes 。

options P1003_1B #Posix P1003_1B real-time extensions

options _KPOSIX_PRIORITY_SCHEDULING

在1993 POSIX 中添加的實時擴充。在ports中有些應用程式會用到它們(比如Star Office )。

注意: 在 FreeBSD 5.X中, 此項功能已經被 _KPOSIX_PRIORITY_SCHEDULING 選項所取代,

并且P1003_1B也不 再是必選項了。

options ICMP_BANDLIM #Rate limit bad replies

這個選項啟用基于帶寬限制的ICMP 的錯誤響應。你使用這個選項可以幫助你保護你的機器

免受拒絕式服務攻擊。

注意: FreeBSD 5.X, 已經預設支援這種功能,而不需要有ICMP_BANDLIM選項。

# 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 ( 微信道架構,MCA)

計算機,FreeBSD提供的支 持就比較有限 。有關對MCA的支援,可以從

/usr/src/sys/i386/conf/LINT找到答案。

device eisa

如果你的主機闆上有EISA 總線,加入這個設定。使用這個選項可以自動掃描并設定所

有連接配接在EISA 總線上的裝置。

device pci

如果你的主機闆有PCI 總線, 就加入這個選項。使用這個選項可以自動掃描PCI卡,并在

PCI 到ISA 之間建立通路。

device agp

提供AGP顯示卡支援. 有AGP或AGP GART口的主機闆需要。

# 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 裝置支援。你隻要在核心中加入一個ata 選項,就可以讓核心

支援現代計算機上的所有 PCI ATA/ATAPI 裝置。 

device atadisk # ATA disk drives

ATAPI 磁盤驅動器所必須,前提是有device ata項。

device atapicd # ATAPI CDROM drives

ATAPI CDROM 驅動器所必須,前提是有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 控制器支援。如果你沒有,可以把它們注釋掉或是删掉。

# 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

pseudo-device splash

啟動畫面!屏保也需要它。

# syscons is the default console driver, resembling an SCO console

device sc0 at isa?

sc0 是預設的控制台驅動,類似于SCO地控制台。絕大部分全螢幕程式都通過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 支援。隻用于筆記本電腦上。

# 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 系統中的COM1 到COM4 。

注意:如果你的内貓占用COM4,并且序列槽占用COM2, 則你必須修改數據機的IRQ

為2(IRQ 2 跟IRQ 9 是 一樣的),這樣你才能在freebsd中正常使用數據機。

如果你用的時multiport的序列槽卡,則應該參考sio的 man手冊。部分顯示卡(特别

是使用S3 晶片的),用到I/O 位址0x*2e8 ,而一些便宜的串行卡,不能正确譯碼

16 位的I/O 尋址空間,是以它們會沖突,導緻COM4 無法正常使用。

每個串行口都要有一個唯一的IRQ(除非你用的時支援共享中斷的multiport卡) ,

是以COM3 與COM4 預設的 IRQ 無法使用。

# Parallel port

device ppc0 at isa? irq 7

ISA總線 并行接口

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.

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 網卡來說是必需的,也就是那些使用類似MII

傳輸方式操作的 網卡。 加miibus驅動到核心配置中,以實作對普通miibus API的支援及所有

的PHY驅動,包括一種不能被特 定驅動明确處理的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 p_w_upload 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-device ether # Ethernet support

僅有以太網卡時才需要。它包含了通用的以太網協定代碼。

pseudo-device sl 1 # Kernel SLIP

Sl 是對SLIP 提供支援的。這已經完全被PPP 所代替,ppp更易于配置,更适合modem-to-modem

的連接配接,功能 也更強大。s1後面的數值設定系統支援多少個SLIP同時連接配接。

pseudo-device ppp 1 # Kernel PPP

使核心支援PPP 撥接上網。另外有一個tun 則是使用者模式的PPP工具,tun 較有彈性且功能較多。

如果你要使 用這個PPP 驅動程式,請參考核心模式PPP 這一章節。ppp後面的數字設定系統

能支援幾個PPP 同時連接配接。

pseudo-device tun # Packet tunnel.

使用者模式的PPP 軟體需要。tun 後面接的數字設定系統同時能支援幾個PPP 連接配接。參看本書

使用者模式PPP 以 節以獲得更多資訊。

pseudo-device pty # Pseudo-ttys (telnet etc)

pty 是虛拟終端,或仿真的登陸入口 。Ctelnet 或rlogin 連接配接、xterm 以及其它

應用程式如Emacs 會用到pty 。number 設定系統要建立的pty 個數。如果有同時

有超過16個xterm視窗或者 是遠端登陸,那麼你可以适當增加這個數值,最高可達256 個。

pseudo-device md # Memory ``disks''

記憶體磁盤 pseudo.

pseudo-device gif

or

pseudo-device gif 4 # IPv6 and IPv4 tunneling

它執行IPv6 與 IPv4,IPv4 與IPv6, IPv4 與IPv4, IPv6 與IPv6 之間的轉換. 

從FreeBSD 4.4開始,裝置gif裝置使自動繁殖(``auto-cloning'')的,應該

使用第一個例子(沒有指定gif 數值的) 。 早期的FreeBSD需要指定數值。

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

# 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.4.1 大記憶體配置 (PAE:實體記憶體擴充)

大記憶體的機器是特指記憶體數超過4G(被使用者和核心邏輯位址總和所限)的機器。為

解決這個問題,Intel在 Pentium Pro及其之後的CPU中加入了36位實體位址空間尋址能力。

加入了PAE功能的Intel Pentium Pro及其後的cpu允許記憶體最大可配置到64G。FreeBSD

(4。x系列從4。 9RELEASE開始,5.X系列從5.1-RELEASE開始)通過核心配置參數PAE

提供這種容量擴充支援。由于年存儲體系 結構的局限性,多于和少于4g沒多少差别; 

超過4g的那部分記憶體隻是添加到可用記憶體池裡。

要加入PAE支援,隻要在核心配置檔案中加入如下一行即可:

options PAE

注意: FreeBSD 中的PAE支援隻對Intel IA-32 處理器有效。另外,FreeBSD中的PAE

支援還沒有經過廣泛 的測試, 應該和其它stable版的特性一樣看做是beta級别的。

FreeBSD中的PAE支援有以下一些局限:

* 程序沒辦法通路超過4g的記憶體。

* 由于構模組化塊和核心的架構(framework)的不同,KLD不能在使用了PAE的核心中使用。

* 不使用bus_dma接口裝置驅動,在使用了PAE支援的核心上,可能引起data corruption,

并且不被推薦 使用此類驅動。是以,在支援PAE的5。x中,核心将拒絕所有對PAE而言

無法識别的驅動。

* 有些系統參數能依據總的可用記憶體調節系統記憶體資源的使用。 這些微調不需要依據PAE

系統的記憶體大 小來配置設定。舉一個kern.maxvnodes sysctl的例子,它控制了核心最大允許的

vnodes數。 調整它以及其它類似 參數需要慎重考慮,以設定為一個合理的數值。

* 也許應該增大核心虛拟位址空間或者說是減少所有對核心資源的嚴重消耗,以避免KVM不

夠用。核心參 數KVA_PAGES 能用來增加KVA空間的大小.

對于所關心的性能及穩定性的問題,可以檢視tuning的man手冊。pae的man手冊有FreeBSD的

PAE支援最新資訊 。

9.5 Making Device Nodes

注意:5。0或其後續版本的使用者應該略過這一節。因為它們使用devfs來自動的分派裝置節點。

幾乎核心中的每個裝置在/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 出現問題怎麼辦?

在定制一個核心時,可能會出現五類問題。它們是:

配置錯誤:

當你給config 指令傳遞你的核心描述時出錯,你可能在某個地方發生了一個小錯誤。

幸運的是,config會顯示出錯的那一行的行号,你能很快找到出錯地點并用vi

編輯器做修改。例如,如果你 看到:

config: line 17: syntax error

你可以在vi 的指令模式輸入17G 來跳到17 行(也就是出錯的那行)。和比較GENERIC

核心或其它參考資料, 以确定你沒有打字錯誤。

編譯錯誤:

如果編譯指令失敗,通常會在你的核心描述中提示一個錯誤,但config并沒有能力找出

錯誤。另外,檢視一下你的配置資訊,如果你仍然無法解決這個問題,可以把你的

核心配置檔案發到FreeBSD 正常問題郵件清單,

它将很快地被解決。@freebsd.org>

安裝新核心失敗:

如果核心編譯成功,但安裝失敗(make install 或是 make installkernel 指令失敗),

第一件要檢查的事情就是你的系統運作的安全級别是否是 1或更高。核心的安裝需要

移除核心的不可變信号 量,并用新核心的不可變信号量代替。而securelevel 1或

更高時,是不允許任何對系統不可變信号量的改變 ,核心的安裝需要在securelevel 0

或更低時才能完成。

核心無法啟動:

如果你的新核心無法啟動,或無法識别你的硬體,不要擔心!幸運的是,FreeBSD 有一個

很棒的從錯誤核心恢複的機制。簡單的說就是,從FreeBSD 的啟動loader 中,選擇一個

你要使用的核心。在 系統時間從10開始倒計時時,按下除Enter 之外的任何鍵, 輸入

unload然後輸入 boot kernel.old, 或者其 它任何能準确引導的核心的檔案名字.當

配置一個核心時,記得在手頭保留一個能正常啟動的核心是個好主意 。

在用一個好的核心啟動後,你可以檢查一下你的配置檔案,再設法重建立立一個核心。

看看/var/log/messages 檔案會比較有幫助,它記錄了每次成功啟動的所有核心信

息。同樣,dmesg 指令會列出目前啟動中的核心資訊。

注意: 你在編譯核心時,确信手頭保留着一個GENERIC 或其它名字的不會被下次建構

所覆寫的核心。你不 能僅依靠kernel.old, 因為當你安裝一個新核心時,kernel.old 會

被最後一次安裝的核心(也許就是無法正 常工作的)所覆寫。是以,盡快将目前正常工作

的核心移到适當的核心位置,否則ps等指令不會正常工作。 解開編譯安裝核心檔案的正确

指令是:

# chflags noschg /kernel

如果該指令無效,可能是你的系統的安全級别大于0。可在 /etc/rc.conf中把

kern_securelevel設定成 -1, 然後從啟系統. 在新核心成功後,你可以把它再改回去。

另外,如果你要設定核心或其它檔案的通路限制,以使它不能被移動或修改,可以用

下面的指令:

# chflags schg /kernel

在5。x中,核心不和系統不可變信号量安裝在一起。是以這對追查所遇問題來源使無濟

于事的。

核心工作,但ps 根本就不工作:

繼續閱讀