Linux核心重編譯常見故障及其解決方法(轉)

ba發表於2007-08-12
Linux核心重編譯常見故障及其解決方法(轉)[@more@]核心重編譯對很多Linux愛好者來說是一個不小的挑戰。筆者認為,很多Linux使用者對核心通常有一種誤解,他們認為普通使用者是不能調整核心的。其實,就實際情況而言,這種認識是不全面的。應該說,核心重編譯是具有一定深度和複雜性的,同時也是易失敗的配置工作。

如果大家留意那些比較權威的Linux參考工具書的話,就會發現很多原版書籍都把核心重編譯作為一個很重要的章節進行介紹。本文將要向讀者介紹的並不是如何去一步步的對Linux核心進行重編譯,而是收集整理了幾個在Linux核心重編譯中最常見的故障及其解決方法,如果您在編譯核心過程中遇到了類似的故障,那麼本文將會對您有所幫助。

Linux核心重編譯常見故障介紹

在介紹Linux核心重編譯常見故障前,假設我們已經按照參考工具書上的步驟對Linux核心進行了相應的配置。

Linux核心重編譯通常包括了許多步驟。如果“幸運”的話,Linux核心重編譯是可以一次性編譯成功的。如果在編譯完成後,啟動計算機或者核心的時候系統有錯誤資訊的提示,那麼最有可能出現的是以下5個:1.核心不能啟動;2.異常I/O錯誤;3.核心反映緩慢;4.核心不能正確編譯;5.系統重複啟動。

故障分析及其解決方法

核心不能啟動

當我們重新建立Linux核心時,主要是選擇使用者需要或不需要在系統中使用的裝置及服務。從2.0版核心開始,Linux引入了一個全新的設計特徵到核心中並提供了折中方案:元件可以動態的、隨時的調入和調出核心。例如我們在修改/etc/lilo.conf之後都要重新啟動系統,如果你的核心不能啟動,並且在螢幕上看到了下面的資訊:

Warning: unable to open an initial console Kernel panic: no init found. Try passing init= option to kernel


這個錯誤最大的可能就是我們沒有正確的給/etc/lilo.conf 中的“root=”提供引數。例如,在一個Linux系統中有root=dev/hdc5這樣的配置方式,那麼這是錯誤的,正確的應該是root=/dev/hdc5,不要小看只是多了一個 “/”,這是給root提供的重要引數。沒有“/”則Linux核心無法確認root到底該從哪裡啟動。很多朋友往往忽略了這個小細節而造成核心引導失敗。下面給出/etc/lilo.conf的一個正確的配置清單,僅供參考。

/etc/lilo.conf示例
―――――――――――
boot=/dev/hdc5
map=/boot/map
prompt
timeout=50
image=/boot/vmlinuz-2.2.2-1
label=Linux
root=/dev/hdc5
inirtd=/boot/initrd-2.2.2-1.img
read-only

other=/dev/hda1
label=dos
table=/dev/hda

異常I/O錯誤

如果您重新建立了一個Linux核心,並且能正確啟動,但在使用新核心過程中,系統經常出現崩潰、當機等異常現象。那麼很可能是I/O出現了問題。I/O異常除了使得系統頻繁出現莫名其妙的故障之外,更重要的是會使Linux核心降級,導致整個系統系能嚴重下降。

究其異常I/O錯誤的原因,是使用者在編譯Linux核心結束的時候沒有執行“make dep clean”這一步驟。一般來說,我們在儲存Kernel configuration選項中的“menuconfig”或“xconfig”時並不包含“make dep clean”這個步驟。因此,這裡建議使用者在儲存配置後的Kernel configuration選項時注意確認是否已經進行了“make dep clean”這一步。

核心反映緩慢

目前很多計算機都採用了高速的CPU和大容量記憶體。可有時候在建立新核心後系統顯得比沒有配置核心之前的反映速度慢得多。出現這個情況,很可能是使用者在修改Kernel configuration options的時候,在“menuconfig”或者“xconfig”選擇了過多的選項。這樣不僅使得計算機在編譯新核心的時候要花費更多的時間,也使得系統在工作的時候佔用了太多的記憶體。由於很多記憶體都是被無用的選項所佔用,這就導致了系統執行的緩慢。解決方法很簡單,儘量選擇我們需要的選項,那些無用的,太過於複雜的選項就無需去修改了,有時候使用預設的引數效果會顯得更好。

核心不能編譯

當使用者輸入“make bzImage modules”並按下輸入鍵的時候,出現了核心不能編譯或者其他的奇怪現象。此時最好的方法就是重新啟動系統,然後使用“rpm -e”命令移除Kernel configuration tools這個核心配置工具。接著再重新安裝這個工具(請使用“rpm -I”或“rpm -Uvh”命令來安裝),如果能正確安裝,那麼問題就簡單多了,此時再重新配置核心和再編譯應該就能成功。如果還是不能編譯核心,請檢查硬體裝置是不是有問題。

系統重複啟動

出現這種情況,十有八九是因為在對核心做完修改之後忘記使用LILO來註冊新的映象到啟動載入程式。LILO需要核心的扇區位置,因此即使是複製映象也會將其遷移到新的扇區中,這將使得LILO儲存的老指標掛在一個深淵上。

為了解決這個問題,請從軟碟機啟動並執行LILO命令,或使用挽救磁碟啟動並安裝啟動分割槽到“/mnt”,同時使用如下命令:lilo -r /mnt。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-950664/,如需轉載,請註明出處,否則將追究法律責任。

相關文章