首先對 kernel 相關目錄作快速介紹。
這裡所提到的所有目錄都在 /usr/src/sys
內,
也可以用 /sys
這個 symbolic link 來連到這。
這裡的許多子目錄分別擺放 kernel 的各組成部分,但對打造 kernel
影響最重要的目錄是
arch/conf
,
這裡是可以針對需求來修改自訂 kernel 相關設定。
此外,還有在編譯 kernel 過程中會暫時擺放的 compile
目錄。
剛講到的 arch
可以是右列架構之一:
i386
、alpha
、
amd64
、ia64
、
powerpc
、sparc64
、
pc98
(在日本較流行的另一種 PC 硬體架構)。
在各特定硬體架構目錄的東西,只搭配相對應的硬體架構而已。
而其餘的原始碼則是與硬體架構無關,可以在所有 FreeBSD 可裝的平台上共用。
整體目錄架構都是有邏輯可循,像是各項有支援的硬體設備、檔案系統,
以及相關選項通常都會擺在它們自己的子目錄內。
本章所用到的例子,都是你使用 i386 架構的機器。 請依實際情況,對相關目錄作調整即可。
若您系統上 沒裝
/usr/src/sys
目錄,
也就是說沒裝 kernel source code 的話,那麼最簡單安裝方式就是以
root
權限來執行 sysinstall
,
接著請選 ,然後選
接著為
再選
最後選
。 若不喜歡用
sysinstall 而且手邊有
“正式的” FreeBSD 光碟可以用的話,
那麼也可以用以下指令來安裝:
#
mount /cdrom
#
mkdir -p /usr/src/sys
#
ln -s /usr/src/sys /sys
#
cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
#
cat /cdrom/src/sbase.[a-d]* | tar -xzvf -
接下來,切換到
arch/conf
目錄,
複製 GENERIC
設定檔為你想稱呼的新 kernel 名稱。
例如:
#
cd /usr/src/sys/i386/conf
#
cp GENERIC MYKERNEL
通常,命名方式都是大寫。如果你負責維護許多不同硬體架構的 FreeBSD
機器的話,那麼照該機器名稱(hostname)來命名會是比較明智。
上面例子中之所以命名為 MYKERNEL
就是因為這緣故。
建議不要把改過的 kernel 設定檔直接放在
/usr/src
。 因為若編譯遇到其他問題時,
直接砍掉 /usr/src
再重練,
可能會是比較乾脆的選擇之一。
一旦真的砍了之後,你可能幾秒之後才會醒悟到:
你同時也砍掉自己改的 kernel 設定檔。
此外,也不要直接修改 GENERIC
,因為下次你
更新 source tree時,
它會被新版覆蓋,而相關修改也將隨之而逝。
你也可考慮把 kernel 設定檔改放到其他地方,然後再到
i386
目錄內建個指向它的 symbolic link。
舉例:
#
cd /usr/src/sys/i386/conf
#
mkdir /root/kernels
#
cp GENERIC /root/kernels/MYKERNEL
#
ln -s /root/kernels/MYKERNEL
現在,就開始用自己喜歡的編輯器來修改 MYKERNEL
。
若才剛裝好 FreeBSD 而已,唯一可用的編輯器很可能是
vi 了,由於它的用法很多種,礙於篇幅將不詳細介紹,
你可在 參考書目 內找到相關書籍。
不過,FreeBSD 也提供另一個更好用的編輯器,它叫做
ee,對新手而言,這可能是蠻好的選擇。
你可以任意修改檔案內的相關註解以說明相關設定為何,
或者其他想改的 GENERIC
設定內容。
若你有在 SunOS™ 或者其他種 BSD 作業系統下進行編譯 kernel 的經驗,
那麼應該已經很熟悉本篇所介紹的大部分步驟。
換句話說,若您之前用的是 DOS 這類作業系統,那麼
GENERIC
設定檔的內容就可能比較難懂些,沒關係,
我們將在下面的 kernel 設定
會循序漸進地介紹。
若有從 FreeBSD 計劃去 更新你的 source tree 的話,
則切記在進行任何升級之前,務必要察看
/usr/src/UPDATING
。
這檔會介紹在更新過程中的重大議題或要注意的事項。
由於 /usr/src/UPDATING
是對應於你機器上目前的
FreeBSD source code 版本,因此會提供比本手冊更新的內容。
現在開始來編譯 kernel 吧。
請切換至 /usr/src
目錄:
#
cd /usr/src
編譯 kernel:
#
make buildkernel KERNCONF=MYKERNEL
安裝新 kernel:
#
make installkernel KERNCONF=MYKERNEL
要有完整的 FreeBSD source tree 才能編譯 kernel。
預設情況下,在編譯自訂 kernel 時,全部的
kernel modules 也會一起重編。 若要快速升級 kernel,
或是只想重編所需的 kernel module,那麼在編譯 kernel 前要先改一下
/etc/make.conf
,比如:
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs
上面該設定值為所希望重編的 kernel module 列表。
WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs
而上面這設定值則為不要編入的 kernel module 列表。 若想更瞭解其他 kernel 編譯的相關變數,請參閱 make.conf(5) 說明。
新的 kernel 會複製到 /boot/kernel
目錄內的
/boot/kernel/kernel
,而舊的則移至
/boot/kernel.old/kernel
。
現在呢,先關機,然後就會以新 kernel 重開機
若有問題的話,本章後面會介紹一些疑難雜症來協助你。
若新 kernel 無法開機的話,請參閱 這裡 以恢復系統運作。
至於開機過程的其他相關檔案、設定,比如 loader(8)
及其設定,則放在 /boot
。
Third party 或自訂的 kernel modules 則會放在
/boot/kernel
,不過,
應注意要保持 kernel module 與 kernel 是否有同步,
這點很重要,否則會導致不穩或出問題。
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。