7.3. 建立並安裝一個定製的核心

首先,讓我們快速的瀏覽一下 kernel build directiry。所有我們提到的 目錄都在 /usr/src/sys 這個主目錄之下,你也可以透 過 /sys 這個 link 來存取。在這個目錄下,有不少的 子目錄,其中放置了核心各部分的程式碼,不過就本章節來說,最重要的兩個子 目錄是 arch/conf─你將 在這個目錄下編輯你的核心設定檔,以及 compile─你 編譯核心的地方。arch 可以是 i386alpha、或者是 pc98(日本 NEC 設計的 PC9801 系統,可算是 IBM PC 的一個分支)。每個特定架構(arch)的目錄底下只存放跟該系統架構有關的程式 碼;而其他目錄所存放的程式碼則是其他 FreeBSD可能會移植過去的平台可以共 用到的部分。注意一下這個目錄的邏輯結構,所有支援的硬體裝置驅動程式、檔 案系統、參數選項,都放在各自的目錄。

Note: 如果你的系統內 沒有 /usr/src/sys 這個目錄,那表示你沒有安裝好核心的原始程式碼,最簡單的安 裝方式,就是以 root 身分執行 /stand/sysinstall,選擇 Configure,選擇 Distributions ,選擇 src,最後選擇 sys 選項。

接下來,切換到 i386/conf 這個目錄,並且將 GENERIC 複製一份,並給這個檔案一個易於辨認名稱, 這個名稱就是你的核心名稱。例如:

    # cd /usr/src/sys/i386/conf
    # cp GENERIC MYKERNEL

依照慣例,核心名稱最好全用大寫字母。此外,如果你要管理很多部硬體 配備不同的機器,在核心名稱後加上各個主機名稱是個不錯的做法。在接下來 的章節,我們會用 MYKERNEL 來當作範例。

Note: 在做接下來的動作,請確定你是以 root 身分執行,不然你將會看到 permission denied 這個錯誤訊息。

現在,用你最上手的編輯器編輯 MYKERNEL。 如果你才剛裝好你的系統,那麼系統裡面唯一可用的編輯器大概是 vi 了,vi 是個頗複雜的編輯器,在這裡我們不加以贅 述,你可以參考 bibliography 的介紹 。此外,FreeBSD 還提供了一個叫 "ee" 的簡單編輯器,如果你 是新手,ee 是個不錯的選擇。你可以隨心所欲的修改你的核心設定檔最上面的 註解,反映出你做過的設定或修改,以別於 GENERIC

如果你曾經在 SunOS 或是其他 BSD 作業系統下建立過核心,你對這個檔案 的不少內容會有種似曾相似的感覺。如果你才剛從其他作業系統─像是 DOS,轉 移過來,你可能會被 GENERIC 的內容給嚇到,所以請慢 慢並仔細地閱讀 設定檔 這章 節。

Note: 如果你曾經與 FreeBSD project 同步最新的原始碼 sync your source-tree,記得先看看 /usr/src/UPDATING 這個檔的內容,再做任何更新動 的動作。這個檔案裡寫了所有關於升級 FreeBSD 的要點。 /usr/src/UPDATING 必定符合你的 FreeBSD 原始碼的 版本,也就是說裡頭的訊息會比本使用手冊來的正確。

如果你使用 FreeBSD 4.0 之前的版本,而且不想升級到 FreeBSD 4.0 或者 之後的版本,或者你正使用某個 RELEASE 版本的 FreeBSD,而且你的 /usr/src/ 裡頭只有 sys/ 這個 子目錄,那麼在你編輯完核心設定檔之後,輸入以下指令來編譯、安裝你的新核 心。

Note: 如果你想把你的舊版核心更新成新版的,你最好從你抓取核心原始程式碼 的地方順便抓取新版的 config(8) ,相關的原始程式碼會被放置在 /usr/src/usr.sbin,所以在做接下來的動作前,你必 須先下載這些程式碼,編譯,然後安裝到你的系統裡頭。

    # /usr/sbin/config MYKERNEL
    # cd ../../compile/MYKERNEL
    # make depend
    # make
    # make install

如果你剛升級到新的 4.X 或更高的版本(如從 3.X 升級到 4.X,甚至從 舊 4-STABLE 升級到較新的 4-STABLE),確定你看過 built the world,並且執行以下指令:

    # cd /usr/src
    # make buildkernel KERNCONF=MYKERNEL
    # make installkernel KERNCONF=MYKERNEL

Note: 如果你用的是 FreeBSD 4.2 與之前的版本,你必須把 KERCONF= 換成 KERNEL=。2001 年 二月二號之後抓取的 4.2-STABLE 則可以認出 KERNCONF= 這參數。

如果你沒有更新過你的原始碼(你沒執行過 CVSupCTManoncvs),那麼按照 configmake dependmakemake install 的順序來編譯 並安裝新的核心。

Warning如果你在最近一次編譯核心後又更新了原始碼,那麼你 一定要用 make buildkernel 這 指令來編譯你的核心,不然系統會使用舊的程式來建立核心,而這可能導致邊 譯失敗。如果你更新了原始碼,切記不要用 config/make 的步驟來編譯核心!

新的核心將被複製到根目錄,叫做 kernel,而舊的 將被更名成 /kernel.old。現在關閉你的系統並重開機 以便系統能載入新的核心。如果你遇到任何困難,請參考本文件最後的 疑難排解 指示。無論是否能開機 成功,你最好仔細的閱讀 無法開機 這個小節。

Note: 如果你加裝了任何新硬體裝置(像是音效卡),你可能要到 /dev 目錄下增加一些裝置節點,這樣你才能夠使用這些 硬體裝置。