9.6 出現問題怎么辦?
在定制一個內核時,可能會出現五類問題。它們是:
配置錯誤:
當你給config 命令傳遞你的內核描述時出錯,你可能在某個地方發生了一個小錯誤。幸運的是,config會顯示出錯的那一行的行號,你能很快找到出錯地點并用vi編輯器做修改。例如,如果你 看到:
config: line 17: syntax error
你可以在vi 的命令模式輸入17G 來跳到17 行(也就是出錯的那行)。和比較GENERIC內核或其它參考資料, 以確定你沒有打字錯誤。
編譯錯誤:
如果編譯命令失敗,通常會在你的內核描述中提示一個錯誤,但config并沒有能力找出錯誤。另外,查看一下你的配置信息,如果你仍然無法解決這個問題,可以把你的內核配置文件發到FreeBSD 常規問題郵件列表,它將很快地被解決。
安裝新內核失敗:
如果內核編譯成功,但安裝失敗(make install 或是 make installkernel 命令失敗),******件要檢查的事情就是你的系統運行的安全級別是否是 1或更高。內核的安裝需要移除內核的不可變信號 量,并用新內核的不可變信號量代替。而securelevel 1或更高時,是不允許任何對系統不可變信號量的改變 ,內核的安裝需要在securelevel 0或更低時才能完成。
內核無法啟動:
如果你的新內核無法啟動,或無法識別你的硬件,不要擔心!幸運的是,FreeBSD 有一個很棒的從錯誤內核恢復的機制。簡單的說就是,從FreeBSD 的啟動loader 中,選擇一個你要使用的內核。在 系統時間從10開始倒計時時,按下除Enter 之外的任何鍵, 輸入unload然后輸入 boot kernel.old, 或者其 它任何能準確引導的內核的文件名字.當配置一個內核時,記得在手頭保留一個能正常啟動的內核是個好主意 。
在用一個好的內核啟動后,你可以檢查一下你的配置文件,再設法重新建立一個內核。看看/var/log/messages 文件會比較有幫助,它記錄了每次成功啟動的所有內核信息。同樣,dmesg 命令會列出當前啟動中的內核信息。
注意: 你在編譯內核時,確信手頭保留著一個GENERIC 或其它名字的不會被下次構建所覆蓋的內核。你不 能僅依靠kernel.old, 因為當你安裝一個新內核時,kernel.old 會被***后一次安裝的內核(也許就是無法正 常工作的)所覆蓋。所以,盡快將當前正常工作的內核移到適當的內核位置,否則ps等命令不會正常工作。 解開編譯安裝內核文件的正確命令是:
# chflags noschg /kernel
如果該命令無效,可能是你的系統的安全級別大于0。可在 /etc/rc.conf中把kern_securelevel設置成 -1, 然后從啟系統. 在新內核成功后,你可以把它再改回去。另外,如果你要設定內核或其它文件的訪問限制,以使它不能被移動或修改,可以用下面的命令:
# chflags schg /kernel
在5。x中,內核不和系統不可變信號量安裝在一起。所以這對追查所遇問題來源使無濟于事的。
內核工作,但ps 根本就不工作:
如果你安裝了一個不同版本的內核到系統,例如,在3.x 系統中安裝了4.x 內核,許多系統內建的命令象ps 和vmstat 會根本不工作。你必須重編譯libkvm 庫以及這些程序。千萬不要隨意從其它系統拷貝不同版本的內核來使用。