7.6. 疑難排解

在你建立自定的核心時你可能會遇到四種類型的錯誤,分別是:

config 執行失敗

如果 config 指令執行時出現錯誤,通常是你 寫錯某個關鍵字或參數名稱。幸運的是,config 會 告訴你哪一行出錯,所以你能用 vi 快速解決這類 問題。例如你看到:

    config: line 17: syntax error

你可以在 vi 的指令模式下輸入 17G,然後找出第十七行的問題。你可以參考 GENERIC 或是其他資料以確定你打對關鍵字。

make 執行失敗

如果 make 執行失敗,通常是你的核心設定檔 有 config 無法發現的錯誤。一樣的,從頭到尾檢 視你的設定檔以找出錯誤,如果你找了很久還是沒辦法找出錯誤,把你的 核心設定檔還有你遇到的錯誤訊息一同寄給 FreeBSD general questions mailing list ,他們會盡快 幫你找出問題。

新核心開機失敗

如果你的新核心無法正常開機,或是不能辨認出你的硬體裝置,別擔 心!FreeBSD 有一套相當完善的回復機制可以解決這個問題。只要在開機 命令列輸入你想啟用的核心名稱(例如 kernel.old ),而不是按 Enter(Return) 鍵跳過。在系統內保留一個以 知可以正常開機的核心,以備不時之需,是一個不錯的想法。

在用正常的核心開機後,你可以檢查你的核心設定檔,並嘗試再次建 立該核心。/var/log/messages 紀錄每次成功開 機時,核心產生的訊息。此外,dmesg(8) 則會列出當次開機的核心 訊息

Note: 如果你在編譯核心時遇到問題,確定你在系統內有保留一個 GENERIC 核心,或是其他你知道可正常開機, 而且不會在你建立新核心時被覆蓋過去的核心。不要以為有 kernel.old 就夠了,因為每次建立新核心時, kernel.old 會被前一次建立的 kernel 給覆寫 過去,而這個核心有可能是有問題的。另外,如果你用舊的、可用的核 心來開機,記得把目前的開機核心覆寫到 kernel,不然部分程式如 ps(1) 將無法 正常執行。接下來的指令介紹如何解除核心的存取限制(以便把舊的核 心覆寫回去):

    # chflags noschg /kernel

另外,如果你要"鎖定"核心或是其他檔案的存取限 制,使它們不會被修改或移除,則可輸入以下指令:

    # chflags schg /kernel
核心運作良好,但是 ps 指令卻無法執行?

如果你安裝不同版本的核心到系統上,例如在 3.X 版系統上裝了一 個 4.X 版的核心,那麼很多用來查看系統狀態的指令,如 ps(1)vmstat(8),可能會不能使用。你必須重新編譯 libkvm 函式庫與這些公用程式。切記不要隨意從 其他系統拷貝不同版本的核心來使用,不然你可能會遇到此類問題。