歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核重編譯常見故障及其解決方法

  內核重編譯對很多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/hdc5map=/boot/mapprompttimeout=50image=/boot/vmlinuz-2.2.2-1label=Linuxroot=/dev/hdc5inirtd=/boot/initrd-2.2.2-1.imgread-onlyother=/dev/hda1label=dostable=/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。 內核重編譯對很多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/hdc5map=/boot/mapprompttimeout=50image=/boot/vmlinuz-2.2.2-1label=Linuxroot=/dev/hdc5inirtd=/boot/initrd-2.2.2-1.imgread-onlyother=/dev/hda1label=dostable=/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。




Copyright © Linux教程網 All Rights Reserved