. 6 October 1995. 這個略大的章節(jié)會討論如何自訂你的 FreeBSD kernel,。 這個章節(jié)適合初學(xué)者以及經(jīng)驗(yàn)豐富的管理者,。 5.1. 為何要自訂 kernel ? 5.2. 建立以及安裝一個自訂的 kernel 5.3. kernel 設(shè)定檔 5.3.1. 一定要有的關(guān)鍵字 5.3.2. 一般的參數(shù) 5.3.3. 檔案系統(tǒng)的參數(shù) 5.3.4. 基本控制卡以及介面卡 5.3.5. SCSI 裝置支援 5.3.6. Console,,滑鼠,及 X Server 支援 5.3.7. Serial 跟 Parallel Ports 5.3.8. 網(wǎng)路 5.3.9. 音效卡 5.3.10. 虛擬裝置 (Pseudo-devices) 5.3.11. 搖桿,、PC 喇叭及其他雜七雜八的 5.4. 建立 device nodes 5.5. 發(fā)生問題的解決方法 _________________________________________________________________ 5.1. 為何要自訂 kernel ? 建立一個自訂的 kernel 是每個 UNIX 系統(tǒng)管理者所必須學(xué)習(xí)的重要課題,。 這個過程雖然耗時,但是將會對你的 FreeBSD 系統(tǒng)帶來許多好處,。 一個自訂的 kernel,,只會包含支援你硬體的驅(qū)動程式, 而一個 GENERIC kernel 卻包含大多數(shù)的硬體驅(qū)動程式以便在各種機(jī)器上執(zhí)行,。 自訂的 kernel 將包含下列優(yōu)點(diǎn): * 開機(jī)時只需要花較少的時間,,因?yàn)?nbsp;kernel 不需花額外的時間去偵測 你沒有的硬體是否存在。 * 自訂的 kernel 通常占較少的記憶體,,這是很重要的,。 因?yàn)?nbsp;kernel 本身是一個常駐在記憶體中的程式,那些沒有用到的 程式碼 (如 GENERIC kernel) 將會占去你其他程式執(zhí)行時的記憶體空間,。 因此,,在一個記憶體較小的機(jī)器上,建立一個自訂的 kernel 將是相當(dāng)重要的,。 * 最後,,有你可以調(diào)整許多的 kernel 參數(shù)來符合你的需求, 以及奶J其他 (如音效卡的驅(qū)動程式) ,,這些是 GENERIC kernel 所沒有的,。 _________________________________________________________________ 5.2. 建立以及安裝一個自訂的 kernel 首先,我們先瀏覽一下編譯 kernel 的目錄,。 所有的 kernel 原始程式都是放在 /usr/src/sys 以下的 (而通常我們會將 /sys 連結(jié) (link) 到 /usr/src/sys),。 Kernel 原始程式有許多不同的目錄,比方說 /sys/i386/conf,, 你將會把你的 kernel 設(shè)定檔放在此目錄下; 還有例如 /sys/compile,, 你將會在此編譯你的 kernel。 注意: 如果你的系統(tǒng)中 沒有 /usr/src/sys,, 表示你尚未安裝 kernel 原始程式,,請參照系統(tǒng)安裝過程來安裝 kernel 原始程式。 接下來,,進(jìn)入 /sys/i386/conf 并且拷貝 GENERIC 檔 成為你想要的檔名,。例如: # cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL 傳統(tǒng)上這個檔名都是用大寫字母,如果你有許多的 FreeBSD 機(jī)器,, 用大寫的 hostname 來命名是區(qū)分不同機(jī)器設(shè)定的好方法,。 注意: 你必須以 root 的身份執(zhí)行所有的命令,否則你會得到 "permission denied" 的錯誤。 現(xiàn)在,,以你最習(xí)慣的編輯器編輯 MYKERNEL (如果你不知道用什麼好,, 你可以試試 vi,雖然要解釋如何使用它太過雜,, 但是至少大部份的 書 都會提到它,。 你必須修改或新增此檔案中的設(shè)定以符合你系統(tǒng)的需求。 如果你曾經(jīng)在 SunOS 或是其他的 BSD 系統(tǒng)上建立過 kernel,, 那麼你將會對這個 kernel 設(shè)定檔的內(nèi)容十分熟悉,。 如果你較熟悉其他的作業(yè)系統(tǒng) (如 DOS),你可能會看不懂 kernel 設(shè)定檔,,麻煩你仔細(xì)閱讀 kernel 設(shè)定檔 ,。 注意: 如果你是從較舊版本的 FreeBSD 升級上來的, 你可能必須一更新 config(8),。如果你是從 FreeBSD 原始程式升級的,, 你可以在 /usr/src/usr.sbin/config 中找到 config 的原始程式。 當(dāng)你完成建立或修改 kernel 設(shè)定檔時,,執(zhí)行以下命令來編譯你的 kernel: # /usr/sbin/config MYKERNEL # cd /compile/MYKERNEL # make depend # make # make install :make depend; make; make install 可用 make depend all install 來替代 新編譯好的 kernel 將會被安裝到根目錄去 (名為 /kernel),, 舊的 kernel 將會被更名為 /kernel.old。 現(xiàn)在,,關(guān)閉 (shutdown) 你的系統(tǒng)并重新開機(jī) (reboot),。 如果重新開機(jī)後出了什麼問題,請閱讀本文最後的 發(fā)生問題的解決方法 ,。 請記得閱讀 以免你的 kernel 無法開機(jī) ,。 注意: 如果你增s的硬體 (如音效卡), 你必須建立一些 device nodes 到你的 /dev 下,。 _________________________________________________________________ 5.3. kernel 設(shè)定檔 這個檔案的內(nèi)容相當(dāng)?shù)暮唵?。每一行都包含了一個關(guān)鍵字以及它的參數(shù)。 任何以 # 開頭的行都被視為解而忽略,。 接下來會介紹 GENERIC (一般設(shè)定檔) 中所含有的關(guān)鍵字,。 另一個設(shè)定檔 LINT 中包含絕大多數(shù)的詳細(xì)關(guān)鍵字,LINT 中并有詳細(xì)說明,, 如果你有任何的疑問可以參考 LINT。 傳統(tǒng)上 kernel 設(shè)定檔中的關(guān)鍵字會以 -D 的方式由 CFLAGS 傳遞給編譯器,,但是這樣做所有的檔案都有可能被影響,。 現(xiàn)在我們有了新的方法。config 這個程式會將那些關(guān)鍵字分門別類的放到 opt_foo.h,,這樣只有相關(guān)的原始程式才會參考到這些設(shè)定檔,。 5.3.1. 一定要有的關(guān)鍵字 5.3.2. 一般的參數(shù) 5.3.3. 檔案系統(tǒng)的參數(shù) 5.3.4. 基本控制卡以及介面卡 5.3.5. SCSI 裝置支援 5.3.6. Console,滑鼠,及 X Server 支援 5.3.7. Serial 跟 Parallel Ports 5.3.8. 網(wǎng)路 5.3.9. 音效卡 5.3.10. 虛擬裝置 (Pseudo-devices) 5.3.11. 搖桿,、PC 喇叭及其他雜七雜八的 _________________________________________________________________ 5.3.1. 一定要有的關(guān)鍵字 以下是你的 kernel 設(shè)定檔中一定要有的關(guān)鍵字,。 machine ``i386'' 第一個關(guān)鍵字是 machine,因?yàn)?nbsp;FreeBSD 現(xiàn)在只能在 386 以上的 PC 執(zhí)行,,理所當(dāng)然參數(shù)是 i386,。 注意: 任何包含數(shù)字的關(guān)鍵字都必須用引號匡起來 (如 "i386"), 否則 config 可能會誤以為你的意思是數(shù)字 386 (三百八十六),。 cpu ``cpu_type'' 第二個關(guān)鍵字是 cpu, 這些是指你的 kernel 即將支援的 CPU 種類,。 它的參數(shù) cpu_type 有: + I386_CPU + I486_CPU + I586_CPU + I686_CPU 設(shè)定檔中可以有一行以上的 cpu "cpu_type" 以支援各種的 CPU, 就像 GENERIC 檔案一樣,。如果你的硬體是固定的,,只要包含你用的 CPU 種類就好了。 如果你使用 Intel Pentium,,那你只要有 cpu "I586_CPU" 就好了,。 ident machine_name 接下來是 ident, 這是用來區(qū)別不同 kernel 用的。 你可以使用 GENERIC 這個字或是其他你喜歡的字 (如 MYKERNEL),。 你可以在開機(jī)的時候看到這個字,。 你可以替試驗(yàn)性的 kernel 取不同的名字藉以區(qū)別其它的 kernel。 要注意的是,,這個字將會以 CFLAGS 的方式傳給 C 編譯器,, 請勿使用到特殊的關(guān)鍵字如 DEBUG,以免發(fā)生不可預(yù)期的事,。 如果你不知道要用那個字,,你可以用 GENERIC 這個字。 maxusers number 這個數(shù)字將會決定你的 kernel 中一些資料結(jié)構(gòu)的大小,。 例如你的系統(tǒng)中可以同時載入的程序 (process) 數(shù)目等於 20 + 16 * maxusers,。 對於一個使用者的環(huán)境來說,設(shè)定 maxusers = 4 大概可以符合一般需求,。 然而,,如果你得到 "proc table full" 的錯誤訊息, 你必須增?maxuser 的值,。如果你想執(zhí)行 X-Windows,,你可能需要 maxuser = 16A更大的值是必須的。 注意: 這個數(shù)字并 不是 代表你的系統(tǒng) 可以同時上線的人數(shù),,它只是決定你的 kernel 中一些資料結(jié)構(gòu)的大小,。 真正影響上線人數(shù)的是 pseudo-device pty 16 。 config kernel_name root on root_device 這行指定 kernel 的名稱及位置,。傳統(tǒng)上來說,,kernel 的命名為 vmunix,, 但是 FreeBSD 稱它為 kernel。你一定要用 kernel 當(dāng)作 kernel_name,,因?yàn)樵S多程式都會去參考 /kernel 這個檔案,。 這行的第二個參數(shù) root_device 指定你的 root partition 跟 kernel 放在哪顆硬碟上。 一般來說,,用 SCSI 硬碟的系統(tǒng)使用 sd0,,用 IDE 硬碟的使用 wd0。 _________________________________________________________________ 5.3.2. 一般的參數(shù) 這些參數(shù)提供檔案系統(tǒng)及其它的功能支援,。 options MATH_EMULATE 這個參數(shù)讓 kernel 用軟體的方式模擬浮點(diǎn)運(yùn)算,,如果你的 CPU 不含浮點(diǎn)運(yùn)算器 (或沒有 387),你就必須打開此參數(shù),。 注意: FreeBSD 所提供的一般浮點(diǎn)模擬器并沒有十分準(zhǔn)確,, 如果你沒有浮點(diǎn)運(yùn)算器卻又需要最好的準(zhǔn)確度,你可以是用 GPL_MATH_EMULATE 來使用較優(yōu)秀的 GNU 浮點(diǎn)模擬,。 因?yàn)?nbsp;GNU 版權(quán)的關(guān),,因此不以它來當(dāng)作內(nèi)定的模擬器。 options ``COMPAT_43'' 提供 4.3BSD 的相容模式,,有些程式需要這個參數(shù),,所以請一定要打開。 options BOUNCE_BUFFERS ISA 以及以 ISA 相容模式運(yùn)作的 EISA 介面卡只能對 16MB 以下的記憶體做 DMA(Direct Memory Access),。這個參數(shù)用緩區(qū)的方式使得這些介面卡 可以 DMA 存取 16MB 以上的記憶體,。 通常使用 ISA SCSI 卡又有超過 16MB 的人才需要此參數(shù), 打開此參數(shù)會使得系統(tǒng)稍微慢一點(diǎn),。 options UCONSOLE 允許使用者?ampcirc;取 console,,對 X Windows 是很有用的。 舉例來說,,你可以用 xterm -C來?ampcirc;取傳到 console 上的 talk ,、write 以及 system log 的訊息。 options SYSVSHM 這個參數(shù)提供 System V 共享記憶體 (shared memory) 的支援,。 最常使用 SYSVSHM 的是 X Windows 的 XSHM 功能 (如使用 xanim,, Linux DOOM 等),因?yàn)樗梢蕴岣邎?zhí)行速度,。如果你使用 X Windows 或是電子告欄 (BBS),,你一定要打開此參數(shù)。 options SYSVSEM 提供 System V semaphores 的支援,,雖然不常用到,,但是它只占一點(diǎn)點(diǎn) kernel 的空間。 options SYSVMSG 提供 System V messages 的支援,,雖然不常用到,,但是它只占一點(diǎn)點(diǎn) kernel 的空間。 注意: ipcs(1) 這個命令會列出正在使用以上三種 SYSV 的功能 的程序 (process),。 _________________________________________________________________ 5.3.3. 檔案系統(tǒng)的參數(shù) 這些參數(shù)提供各種檔案系統(tǒng)的支援,,你一定要包含一種以上的檔案系統(tǒng) 以便開機(jī)所需。 如果你是從硬碟開機(jī),,你必須包含 FFS; 如果你用 diskless 開機(jī) (網(wǎng)路開機(jī)),,你必須包含 NFS。 此外,,你還可以將常用到的檔案系統(tǒng)包含進(jìn)去 (如 MSDOS),。 但是你可以將這些非開機(jī)必備的檔案系統(tǒng)拿掉,F(xiàn)reeBSD 會利用動態(tài)載入模組 (Loadable Kernel Module) 在你用到檔案系統(tǒng)時,,自動將檔案系統(tǒng)模組從 /lkm 載入使用,。 options FFS 最基本的檔案系統(tǒng)支援,如果你是從硬碟開機(jī)的,,你一定需要它,。 options NFS 網(wǎng)路檔案系統(tǒng)(Network Filesystem?ampcirc;,除非你想要經(jīng)由網(wǎng)路存取 (mount)其他工作站的檔案,,否則你不需要它,。 options MSDOSFS MS-DOS 檔案系統(tǒng)。除非你每次開機(jī)都要使用 MSDOS 檔案系統(tǒng),, 不然你可以將他拿掉,,系統(tǒng)會在你使用到 MSDOS 檔案系統(tǒng)時, 自動用 LKM 將 MSDOS 檔案系統(tǒng)支援載入,。 除此之外,,你也可以使用 mtools來存取 DOS 的軟碟, 這并不需要有 MSDOS 檔案系統(tǒng)的支援,。 options ``CD9660'' ISO 9660 是 CD-ROM 的檔案系統(tǒng),,如果你只是偶爾用到 CD-ROM, 你可以將它拿掉,,系統(tǒng)會在使用到 CD-ROM 時自動以 LKM 載入,。 此外,用 CD-ROM 聽 Audio CD 不需要 CD9660 的支援,。 options PROCFS Process 檔案系統(tǒng),。這是一個對映記憶體中執(zhí)行程序的虛擬檔案系統(tǒng), 許多系統(tǒng)工具如 ps 需要 PROCFS,。 options MFS 記憶體映對檔案系統(tǒng) (Memory-mapped Filesystem),。 這基本上是一個為了達(dá)到快速暫存用的 RAM disk, 當(dāng)你有許多 swap 空間的時候是很有用的,。 一個掛上 (mount) MFS 的好地方是 /tmp,, 因?yàn)樵S多程式會利用 /tmp 建立暫時檔案,。 以下是將 MFS 掛上 /tmp 的方法: 在 /etc/fstab 中奶J以下這行并重新開機(jī)或鍵入 mount /tmp。 /dev/wd1s2b /tmp mfs rw 0 0 注意: 將 /dev/wd1s2b 替換成你的 swap partition,, 你的 swap partition 在 /etc/fstab 中看起來是這樣的: /dev/wd1s2b none swap sw 0 0 注意: 再來,,MFS 無法以 LKM 載入, 一定要將它連結(jié)在 kernel 中,。 options QUOTA 奶J quota 的支援,,可以藉以限制使用者能用的硬碟空間。 請參閱 quota(1) 的說明 (man quota),。 _________________________________________________________________ 5.3.4. 基本控制卡以及介面卡 這些章節(jié)討論 FreeBSD 的硬碟,、磁帶機(jī)、CD-ROM 的支援,。 對於 SCSI 卡 跟 網(wǎng)路卡 我們將在另一章節(jié)討論,。 controller isa0 所有的 PC 都應(yīng)該奶J ISA 的支援。如果你的系統(tǒng)是 IBM PS/2 (Micro Channel Architecture),,很抱歉現(xiàn)在 FreeBSD 并不支援,。 controller pci0 奶J PCI (含 PCI Plug) 的支援。 controller fdc0 軟碟控制卡: fd0 是 ``A:'' 磁碟,,fd1 是 ``B:'' 磁碟,。 ft0 是接在軟碟控制卡上的 QIC-80 磁帶機(jī)。 注意: QIC-80 磁帶機(jī)需要 ft(8) 程式的支援,。 controller wdc0 這是主要 (primary) IDE 控制卡的支援,。 wd0 跟 wd1 是第一臺 (primary) 跟第二臺 (slave) 硬碟。 wdc1 是次要 (secondary) IDE 控制卡,, 提供第三臺及第四臺硬碟 (或者是 IDE ATAPI CD-ROM) 的支援,。 controller wcd0 提供 IDE ATAPI CD-ROM 的支援,需要 wdc0 或 wdc1 的支援,。此外,,你還需要 options ATAPI, ATAPI_STATIC 的參數(shù)。 device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr npx0 是 FreeBSD 浮點(diǎn)運(yùn)算的呼叫介面,,不管你有沒有 浮點(diǎn)運(yùn)算器,,這個參數(shù)都是 必要 的。 device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr Wangtek 跟 Archive QIC-02/QIC-36 磁帶機(jī)的支援,。 專屬介面 CD-ROM 的支援 以下這些是所謂的 專屬介面 CD-ROM,。 他們使用專屬的控制卡或是音效卡,他們 不是 IDE 或 SCSI 的 CD-ROM,。他們大多數(shù)是單倍速或雙倍速的老機(jī)種,。 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 (Creative Labs for SoundBlaster). _________________________________________________________________ 5.3.5. SCSI 裝置支援 這個章節(jié)討論許多種 FreeBSD 支援的 SCSI 控制卡及周邊裝置。 SCSI 控制卡 以下這幾行提供 SCSI 控制卡的支援,,只需要奶J你所需要的: controller bt0 at isa? port ``IO_BT0'' bio irq ? vector btintr 大多數(shù)的 Buslogic 控制卡 controller uha0 at isa? port ``IO_UHA0'' bio irq ? drq 5 vector uhaintr UltraStor 14F 跟 34F controller ahc0 Adaptec 274x/284x/294x/394x 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 or Trantor T130 的 ProAudioSpectrum controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr Seagate ST01/02 8 bit 控制卡 (速度慢!) controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr Western Digital WD7000 控制卡 controller ncr0 NCR 53C81x/82x/87x PCI SCSI 控制卡 options ``SCSI_DELAY=15'' 這個參數(shù)使得 kernel 在開機(jī)時會先等待 15 秒,, 再偵測 SCSI 周邊裝置,,有些速度慢的周邊 (如 CD-ROM) 需要較長的初始時間。 controller scbus0 如果你有任何的 SCSI 裝置,,你就需要這個參數(shù),。 device sd0 支援 SCSI 硬碟。 device st0 支援 SCSI 磁帶機(jī),。 device cd0 支援 SCSI CD-ROM。 請注意這個 0 并不是說只支援一臺或是 SCSI-ID 0,, 無論有多少裝置都被支援的,。 如果你想要指定 SCSI ID 或是 LUN,請參閱 LINT 中相關(guān)的說明,。 _________________________________________________________________ 5.3.6. Console,,滑鼠,及 X Server 支援 你一定要在以下兩種顯示驅(qū)動程式中選一種,。 大多數(shù)的程式經(jīng)由終端函式庫 (如 termcap)控制顯示,, 不管你選哪一種都應(yīng)該能執(zhí)行。 device sc0 at isa? port ``IO_KBD' tty irq 1 vector scintr sc0 是內(nèi)定的顯示驅(qū)動程式,,它是模擬 SCO console 的,。 使用的時候,將你的環(huán)境變數(shù) TERM 設(shè)定成 "scoansi" 或 "cons25",。 device vt0 at isa? port ``IO_KBD'' tty irq 1 vector pcrint 這是 VT200 相容的顯示驅(qū)動程式,,通常是用來給那些不能用 sc0 的機(jī)器用的。使用的時候?qū)⒛愕沫h(huán)境變數(shù)設(shè)成 "vt100" 或 "vt200",。 options ``PCVT_FREEBSD=210'' 設(shè)定 vt0 程式在 FreeBSD 2.1.0 以上的系統(tǒng)執(zhí)行,。 options XSERVER 奶J XFree86 的 X Windows 所需的支援。 device mse0 at isa? port 0x23c tty irq 5 vector ms 支援 Logitech bus mouse 或 ATI InPort bus mouse card. 注意: 如果你使用 serial mouse (插在 COM1 上),,你并不需要這項(xiàng)參數(shù),。 device psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 vector psmintr 使用 PS/2 mouse. _________________________________________________________________ 5.3.7. Serial 跟 Parallel Ports 幾乎所有的機(jī)器都有這東西,如 印表機(jī) 或是 Modem 撥接 等等,。 device sio0 at isa? port ``IO_COM1'' tty irq 4 vector siointr sio0 到 sio3 是四個 seiral ports (即 COM1 到 COM4),。 如果你的 COM4 有內(nèi)接 Modem,而 COM2 有接 serial 裝置,, 你必須將 Modem 的 IRQ 改成 2 (IRQ 2 就是 IRQ 9),。 如果你有 multiport serial 卡,請閱讀 sio(4)的資料,。 有些顯示卡 (如某些 S3 的卡) 使用 0x*2e8 的 IO Address,, 而有些便宜的 serial 卡沒有完全支援 16-bit IO Address, 這些會互相突而使得 COM4 失效,。 每個 serial port 都需要有一個獨(dú)立的 IRQ (除了 Multiport 卡),, 所以內(nèi)定給 COM3 跟 COM4 的 IRQ 是不能使用的,。 device lpt0 at isa? port? tty irq 7 vector lptintr lpt0 到 lpt2 是三個印表機(jī)的 port, 大多數(shù)人只有一臺印表機(jī),,你可以將沒有用到的移除,。 _________________________________________________________________ 5.3.8. 網(wǎng)路 FreeBSD,跟一般 UNIX 一樣,,非常重視網(wǎng)路,。 因此,就算你沒有網(wǎng)路卡,,也請注意那些撥接服務(wù)支援,。 options INET 網(wǎng)路的支援。就算你不需要網(wǎng)路,,你還是需要此參數(shù),, 許多程式至少需要 loopback 網(wǎng)路 (即,連接自己的電腦),, 所以這是必要的,。 Ethernet 網(wǎng)路卡 以下是網(wǎng)路卡的支援,如果你沒有網(wǎng)路卡,,你可以跳過,。 device de0 Digital Equipment DC21040 PCI Ethernet 網(wǎng)路卡 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; Novell NE1000 跟 NE2000; 3Com 3C503 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 網(wǎng)路卡 device fea0 at isa? net irq ? vector feaintr DEC DEFEA EISA FDDI 網(wǎng)路卡 device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr AT&T StarLAN 10 and EN100; 3Com 3C507; unknown NI5210 device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768 vector ixintr 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 cards (Isolan, Novell NE2100, NE32-VL, PCnet-PCI) device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr IBM/National Semiconductor PCMCIA Ethernet 網(wǎng)路卡 device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr 3Com PCMCIA Etherlink III 注意: 你必須更改某些網(wǎng)路卡 (如 NE2000) 的 port 或 IRQ,因?yàn)檫@些卡的 port/IRQ 并沒有一定的標(biāo)準(zhǔn),。 pseudo-device loop loop 是 TCP/IP 的通用 loopback 裝置,。 如果你 telnet 或 ftp localhost,他們將會經(jīng)由 loopback 連接,。這是必須的,。 pseudo-device ether 當(dāng)你有網(wǎng)路卡的時候你才需要 ether。 pseudo-device sl number sl 提供 SLIP (Serial Line Internet Protocol) 的支援,。SLIP一經(jīng)幾乎被 PPP 所取代,,因?yàn)?nbsp;PPP 功能較強(qiáng)。其參數(shù) number 代表同時 SLIP 連接數(shù)目的個數(shù),。 關(guān)於 SLIP 的更多資料,,請參閱 SLIP Client 或 SLIP Server 。 pseudo-device ppp number ppp 提供 kernel-mode PPP (Point-to-Point Protocol) 的支援,。另外還有一種 user-mode PPP (tun) 提供連線時更多的彈性,,以及自動連接的功能。 如果你依然想用 kernel-mode PPP,,請閱讀 kernel-mode PPP ,。 如同 sl 一樣,其參數(shù) number 代表同時連接 PPP 的數(shù)目。 pseudo-device tun number tun 提供 user-mode PPP 的支援,。 這個模式的 PPP 相當(dāng)容易設(shè)定,,而且連線速度快。 而且他還包含更多的新功能,,如欲連線時自動撥號連線,, 停滯一段時間後自動斷線。其參數(shù) number 代表同時連接 PPP 的數(shù)目,。 請閱讀 user-mode PPP 以獲得更多的資訊,。 pseudo-device bpfilter number Berkeley 封包過濾器 (packet filter)。 提供網(wǎng)路監(jiān)聽的功能,,這些網(wǎng)路上的資料可經(jīng)由 tcpdump(1) 處理顯示,,以增進(jìn)網(wǎng)路安全的目的。 其參數(shù) number 代表同時提供網(wǎng)路介面監(jiān)聽數(shù)目的多少,。 除非你想要使用網(wǎng)路監(jiān)聽的功能,否則你不需此功能,。 有少數(shù)網(wǎng)路卡不支援此功能,。 _________________________________________________________________ 5.3.9. 音效卡 內(nèi)附的 GENERIC kernel 并不包含音效卡的支援, 你必須參考 LINT 這個設(shè)定檔來奶J音效卡的支援 (只有 LINT 尼t(yī)所有音效卡的設(shè)定),。 controller snd0 標(biāo)準(zhǔn)音效呼叫介面,,所有的音效卡 (除了 pca 外) 都需要此參數(shù)。 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 digital audio. 注意: 如果你的 SoundBlaster 使用不同的 IRQ (如 5),, 你必須將設(shè)定中的 irq 7 改成 irq 5,, 并且移除 conflicts,此外,,你還需要奶Joptions ``SBC_IRQ=5'' 的設(shè)定,。 此外,你還需要奶J以下幾行: device sbxvi0 at isa? drq 5 SoundBlaster 16 digital 16-bit audio. 注意: 如果你的 SB16 使用不同的 16-bit DMA channel (如 6 或 7),,將 drq 5 改成 drq 6 或 drq 7,,并奶Joptions "SB16_DMA=6" 的設(shè)定。 device sbmidi0 at isa? port 0x330 SoundBlaster 16 MIDI 介面,。如果你有 SB16,, 你一定要奶J此參數(shù),?ampthinsp;則你的 kernel 將無法完成編譯,。 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-synthesis 音效卡,,如果你有 AdLib、SoundBlaster 跟 ProAudioSpectrum,,你需要此參數(shù),。 此外,你可以用 playmidi 來播放 MIDI 音效 (在 ports 收集里),。 device mpu0 at isa? port 0x330 irq 6 drq 0 獨(dú)立的 Roland MPU-401 音效卡,。 device uart0 at isa? port 0x330 irq 5 vector ``m6850intr'' 獨(dú)立的 6850 UART MIDI 介面,。 device pca0 at isa? port ``IO_TIMER1'' tty 利用 PC 喇叭模擬數(shù)位音效,此音效的效果很差,, 而且要花不少 CPU 時間,,你應(yīng)該要知道這點(diǎn)。 在你沒有音效卡時才考慮此功能,。 注意: 你還可以閱讀 /usr/src/sys/i386/isa/sound/sound.doc,。 此外,你還必須建立相關(guān)的 device nodes 給音效卡使用,。 _________________________________________________________________ 5.3.10. 虛擬裝置 (Pseudo-devices) 虛擬裝置提供一些特殊的支援,,但它們并不是真正的硬體介面。 有一部份的 網(wǎng)路相關(guān)的 虛擬裝置并不在下列說明中,。 pseudo-device gzip gzip 讓你可以執(zhí)行被 gzip 壓縮的 FreeBSD 程式,,由於 /stand 中的程式都是被壓縮過的, 因此奶J此功能是個好主意,。 pseudo-device log log 提供系統(tǒng)記錄 (system log) 的功能,, 這是必須的。 pseudo-device pty number pty 代表 ``虛擬終端機(jī) (pseudo-terminal)'' 或上線人數(shù)的多少,。 許多程式如 telnet,、rlogin、xtermx 和 emacs 等都會使用它,。GENERIC kernel 內(nèi)定只有 16 的 ttys,, 你可能會想要將它提高到 32 或 64 以上。 pseudo-device snp number 監(jiān)看裝置 (Snoop device),。提供你監(jiān)看其他 tty 的資訊 (使用 watch(8) 命令),,這牽涉到系統(tǒng)安全以及 使用者隱私權(quán)的問題,是可有可無的功能,。 pseudo-device vn Vnode 驅(qū)動程式,。允許將一個檔案利用 vnconfig(8) 當(dāng)成一個 partition 來使用。通常拿來建立 floppy disk image 或充當(dāng) swap 裝置 (如跟 MS Windows 共享 swap file),,是可有可無的功能,。 _________________________________________________________________ 5.3.11. 搖桿、PC 喇叭及其他雜七雜八的 本章及討論 FreeBSD 支援的其他雜七雜八的裝置,, 這些都是 GENERIC kernel 所沒有的功能,。 你可能會想?yún)⒄?nbsp;LINT 設(shè)定檔的內(nèi)容。 device joy0 at isa? port ``IO_GAME'' PC 搖桿的支援,。 pseudo-device speaker 支援 IBM BASIC 格式的 PC 喇叭音效,。 有些有趣的程式 (如 /usr/sbin/splrtest、/usr/games/piano) 會使用到它。 有關(guān) PC 喇叭的的數(shù)位音效請參閱 pca0 ,。 _________________________________________________________________ 5.4. 建立 device nodes 幾乎所有 kernel 支援的裝置,,都有一個在 /dev 下的 ``node'' 來相對應(yīng)。這些 nodes 看起來像是一般的檔案,, 但是實(shí)際上應(yīng)用程式可以透過這些 nodes 來存取 kernel 的資料,。 你可以用 shell script /dev/MAKEDEV 來幫助你建立 nodes。 雖然在安裝過程中已經(jīng)幫你建立一些必備的 nodes,, 是你一定會想再新增你所需要的 nodes,,尤其是增s功能或安裝新硬體的時候。 假A想新增一臺 IDE CD-ROM,,你必須在 kernel 設(shè)定檔中奶J相關(guān)的釧w,,如G controller wcd0 這表示你必須看看在 /dev 下有沒有 wcd0 的 nodes。 比方說是 wcd0c,、rwcd0c 等等,。 假設(shè)沒有這些 nodes,你必須建立它們: # cd /dev; sh MAKEDEV wcd0 當(dāng)這個 script 執(zhí)行完畢時,,你應(yīng)該會看到 wcd0c 或 rwcd0c 等 nodes,。 又例如新增音效卡的 nodes: # cd /dev; sh MAKEDEV snd0 這樣將會建立音效卡所需的 nodes。 _________________________________________________________________ 5.5. 發(fā)生問題的解決方法 再建立自訂 kernel 時,,有四種問題可能發(fā)生: Config 發(fā)生錯誤 如果 config 抱怨這個錯誤時,,你的 kernel 設(shè)定檔可能有錯誤,, config 會指出哪些行錯了,,請重新檢查那些行。 比方說你看到: config: line 17: syntax error 表示你的 kernel 設(shè)定檔的 17 行有錯誤,,請用編輯器修正,。 Make 失敗 如果執(zhí)行 make 時發(fā)生錯誤,有可能是你的 kernel 設(shè)定檔有錯誤,, 但是 config 程式并沒有檢查出來,,請?jiān)贆z查 kernel 設(shè)定檔是否有錯誤, 或是缺少該有的參數(shù),。 如果在編譯過程中發(fā)生 "compiler internal error" 或 "signal 11" 等等,, 可能你的硬體設(shè)備不是很穩(wěn)定。 Kernel 無法開機(jī) 如果你的新 kernel 無法開機(jī),,或是無法偵測到你新左熊w體裝置,, 你可以在開機(jī)時,鍵入其他 kernel 的名稱 (如 boot: /kernel.old),, 如果連其他 kernel 都無法開機(jī),,你可以試試 kernel.GENERIC。 在用舊的 kernel 開機(jī)後,檢查你的 kernel 釧w檔是否有誤,, 修改後再重新編譯一個新的 kernel,。 你可以參考 /var/log/messages 中的開機(jī)記錄,或是執(zhí)行 dmesg(8),。 注意: 在 FreeBSD 中有另一種 file flag 來保護(hù)重要檔案,, 如果你無法移動或刪除 /kernel,你可以執(zhí)行: # chflags noschg /kernel 如果你想保護(hù) /kernel 避免人為疏失破壞它,,請執(zhí)行: # chflags schg /kernel Kernel 可以開機(jī),,但 ps 或是 w 發(fā)生錯誤 如果你更新 kernel 原始程式 (如從 2.1.0-RELEASE 升級到 2.2-CURRENT),你必須一更新 (或重新編譯) 一些重要的檔案,, 如 ps(1),、vmstat(8)或是libkvm。 |
|