大部分的 NetBSD 使用者,不論早晚都將會編譯一個個人化的核心。 這帶給你許多好處:
你可以縮減核心的大小,而因此增加記憶體空間(例如, 從 2.5 MB 到 1.2 MB)。在 1.5 版的 NetBSD 編譯一個 個人化核心可以從 4.7 MB 縮減為 1.9 MB。
你可以增進效能。
你可以轉換系統。
你可以解決硬體週邊偵測/衝突的問題。
你可以設定一些選項(例如,鍵盤配置,BIOS 時鐘, ...)
你可以更加了解系統。
你可以從和得到安裝系統的地方,得到核心原始碼(例如, ftp://ftp.netbsd.org.) 記得要下載和你執行的系統相同版本的原始碼。 |
安裝程式 Sysinst 並不會將核心原始碼 複製到硬碟上,因此它們必須被手動地安裝。核心原始碼檔案位於 source/sets 目錄且命名為 syssrc.tgz。
# gzip -dc syssrc.tgz | (cd / ; tar xvf -)
請耐心等待:這個作業會花費數分鐘,因為這個壓縮檔包含成千個檔案。 原始碼會位於 /usr/src/sys;會有一個 鍊結 sys 指向這個目錄。所以底下的作業會有 相同的效果:
# cd /usr/src/sys
# cd /sys
在完成解壓縮之後,你可以移除不需要的架構所在目錄,以保留 硬碟空間。cd 至 /sys/arch 並且刪除你不需要的目錄。在 i386 平台為例,你可以只保留 i386 目錄。對其他的平台而言,可能需要保留不只一個目錄。
在原始碼完成安裝以後,你便可以建立個人化核心:這並沒有 你想像中的困難。事實上,建立新的核心只需四到五個步驟, 將會在以下的段落中做描述。
在編譯核心以前,義大利使用者應該考慮修改預先定義的鍵盤配置 來使用義大利式的鍵盤,這已經定義在原始碼的檔案 /sys/dev/pckbc/wskbdmap_mfii.c 中了。 在預先定義的鍵盤配置中,一些對程式設計者有用的字元被遺失了 (例如,左箭頭和右箭頭等)這是一個可選擇的配置:
static const keysym_t pckbd_keydesc_it[] = {
...
KC(8), KS_7, KS_slash, KS_braceleft,
KC(9), KS_8, KS_parenleft, KS_bracketleft,
KC(10), KS_9, KS_parenright, KS_bracketright,
KC(11), KS_0, KS_equal, KS_braceright,
KC(12), KS_apostrophe, KS_question, KS_grave,
KC(13), KS_igrave, KS_asciicircum, KS_asciitilde,
KC(26), KS_egrave, KS_eacute, KS_bracketleft, KS_braceleft,
KC(27), KS_plus, KS_asterisk, KS_bracketright,KS_braceright,
...
預先的配置定義了這些對照表:
| Keys | Character |
|---|---|
| Alt Gr + 7 | { |
| Alt Gr + 8 | [ |
| Alt Gr + 9 | ] |
| Alt Gr + 0 | } |
| Alt Gr + ' | ` |
| Alt Gr + ì | ~ |
| Alt Gr + é | [ |
| Alt Gr + + | ] |
| Shift + Alt Gr + è | { |
| Shift + Alt Gr + + | } |
終端機驅動程式: 從版本 1.4 開始,NetBSD使用了 wscons, 跨平台的終端機驅動程式來處理螢幕,鍵盤和滑鼠。 先前的版本則使用 pccons 或 pcvt。詳細說明請看 Chapter 12。
Note: 這裡描述的目錄是以 i386 為例的。其他平台的使用者必須 至換成適當的目錄(通常是 arch 底下 的子目錄)。
核心設定檔定義了被核心支援的裝置種類,數目和特性,就如同 有數個核心設定選項一樣。核心設定檔位於 /sys/arch/i386/conf 目錄。最簡單 的建立方法是複製一個現有的並編輯它:在大部分的平台上, 通常最好的選擇是 GENERIC 設定檔。在此設定檔中,有許多的 註解來描述選項;更詳盡的說明在 options(4) 線上手冊中。
# cd /sys/arch/i386/conf/
# cp GENERIC MYKERNEL
# vi MYKERNEL
核心名稱: 基於歷史,核心設定檔的名稱都是大寫。
修改核心設定檔,基本上包含三個作業:
包含/不包含在核心中支援的硬體裝置(例如,如果不需要, SCSI 支援可以移除)
打開/關閉在核心中支援的特徵(例如,打開 NFS client 支援, 打開 Linux 模擬功能, ...)
更改核心參數。
凡是行開頭具有 "#" 符號的便是被標記的;被標記的 行表示被關閉支援,要打開支援則要移除標記字元。最好使用 標記行來關閉支援而不要刪除該行;我們以後便可以利用解除 標記來打開它們。
dmesg 指令的輸出可以被用來決定哪一行 應該被關閉。每一行的型態為:
<XXX> at <YYY>
XXX 和 YYY 兩者都必須設定在核心設定檔中。在建立最小化設定時, 你可能需要做一些試驗,在不具有 SCSI 和 PCMCIA 的桌上型電腦, 可以將核心的大小減半。
你應該也檢查不需要的選項是否被關閉。每一個選項都有簡短的 註解描述它們,對了解該選項是很有幫助的。需多選項在 options(4) 中都有更詳盡的敘述。你應該設定正確的選項來支援 各種鍵盤配置和區域性的時間。例如,在義大利:
options RTC_OFFSET=-60
...
options PCKBD_LAYOUT="KB_IT"
adjustkernel Perl script 可以在 被找到。 http://www.feyrer.de/Misc/adjustkernel, 分析了 dmesg 的輸出並自動地產生 最小化的核心設定檔。你需要在系統上安裝 Perl 來執行。 要安裝新的軟體請參考 Chapter 8。 如果你現在要安裝 Perl,下載預先編譯好的 package perl-5.00404.tgz 並執行以下指令:
# pkg_add perl-5.00404.tgz
現在 Perl 被安裝及設定好了,可以開始使用:真是非常簡單...
你現在可以執行 script:
# cd /sys/arch/i386/conf
# perl adjustkernel GENERIC > MYKERNEL
我已經試過這個 script 而且它的效果非常好,減少了我許多 手動的編輯工作。要注意的是這個 script 只設定了有效的裝置: 你仍然必須手動地增加其他的選項(例如,Linux 模擬,...)
當你完成核心設定檔的修改以後(我們將稱它為 MYKERNEL),你可以鍵入以下指令:
# config MYKERNEL
如果 MYKERNEL 沒有錯誤,則 config 程式將會建立必要的檔案 來編譯核心,否則,我們必須修正錯誤並再一次地執行 config 程式。
用以下指令來產生 Dependencies 和編譯核心:
# cd ../compile/MYKERNEL
# make depend
# make
編譯會因為發生錯誤而停止;會有種種的原因但是大多數發生 的錯誤是核心設定檔沒有通過 config 的 檢驗。有時候錯誤的原因是因為硬體問題(大多因為 RAM): 編譯的工作比其他的應用程式的執行更加耗費硬體資源。另一個 典型的錯誤是:選項 B 被打開但是所需要的另一個選項 A 沒有打開。
完成編譯需花費幾分鐘到幾小時,視硬體而定。 請看以下的範例:
make 指令最後會在編譯目錄中產生 netbsd 檔案:在儲存原先的核心後,這個檔案應該被複製到根目錄底下。
# mv /netbsd /netbsd.old
# mv netbsd /
個人化的設定可以縮減核心的大小。在以下的例子中, netbsd.old 是原先安裝的核心而 netbsd 是新的核心。
-rwxr-xr-x 1 root wheel 1342567 Nov 13 16:47 /netbsd
-rwxr-xr-x 1 root wheel 3111739 Sep 27 01:20 /netbsd.old
在重開機後將會使用新核心:
# reboot
當重開機後,可能會發生心核心並不如預期般的運作或 甚至不能開機。別擔心:如果這個情況發生,只要利用之前保留的 核心來重開機並移除新的(最好重開機在"單一使用者" 模式)
將機器重開機
在開機提示倒數 5 秒之內按下空白鍵
boot:
鍵入
> boot netbsd.old -s
現在使用以下指令來還原舊版的核心:
fsck /
mount /
mv netbsd.old netbsd
exit