Linux Kernel PANIC(二)--Hard Panic/Aieee實例分析

本文信息

CSDN GitHub
Linux Kernel PANIC(二)–Hard Panic/Aieee實例分析 LDD-LinuxDeviceDrivers/study/debug/modules/panic/02-hard_panic

同類博文信息

CSDN GitHub
Linux Kernel PANIC(一)–概述(Hard Panic/Aieee和Soft Panic/Oops) LDD-LinuxDeviceDrivers/study/debug/modules/panic/01-kernel_panic
Linux Kernel PANIC(二)–Hard Panic/Aieee實例分析 LDD-LinuxDeviceDrivers/study/debug/modules/panic/02-hard_panic
Linux Kernel PANIC(三)–Soft Panic/Oops調試及實例分析 LDD-LinuxDeviceDrivers/study/debug/modules/panic/03-soft_panic


知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可, 轉載請註明出處

對於 hard panic 而言, 最大的可能性是驅動模塊的中斷處理(interrupt handler)導致的, 一般是因爲驅動模塊在中斷處理程序中訪問一個空指針(null pointer).

一旦發生這種情況,驅動模塊就無法處理新的中斷請求,最終導致系統崩潰.

關於 Hard Panic 的詳細信息, 請參見Kernel PANIC概述(Hard Panic/Aieee和Soft Panic/Oops)

1 實例1–Kernel panic-not syncing fatal exception


1.1 問題描述


今天就遇到一個客戶機器內核報錯 : “Kernel panic-not syncing fatal exception”

重啓後正常, 幾個小時後出現同樣報錯,系統down了,有時重啓後可恢復有時重啓後仍然報同樣的錯誤。

我先來解釋一下什麼是fatal exception?
“致命異常(fatal exception)表示一種例外情況,這種情況要求導致其發生的程序關閉。通常,異常(exception)可能是任何意想不到的情況(它不僅僅包括程序錯誤)。致命異常簡單地說就是異常不能被妥善處理以至於程序不能繼續運行。
軟件應用程序通過幾個不同的代碼層與操作系統及其他應用程序相聯繫。當異常(exception)在某個代碼層發生時,爲了查找所有異常處理的代碼,各個代碼層都會將這個異常發送給下一層,這樣就能夠處理這種異常。如果在所有層都沒有這種異常處理的代碼,致命異常(fatal exception)錯誤信息就會由操作系統顯示出來。這個信息可能還包含一些關於該致命異常錯誤發生位置的祕密信息(比如在程序存儲範圍中的十六進制的位置)。這些額外的信息對用戶而言沒有什麼價值,但是可以幫助技術支持人員或開發人員調試程序。
當致命異常(fatal exception)發生時,操作系統沒有其他的求助方式只能關閉應用程序,並且在有些情況下是關閉操作系統本身。當使用一種特殊的應用程序時,如果反覆出現致命異常錯誤的話,應將這個問題報告給軟件供應商。 ”
而且此時鍵盤無任何反應,必然使用reset鍵硬重啓。
panic.c源文件有個方法,當panic掛起後,指定超時時間,可以重新啓動機器

1.2 解決方法


vi /etc/sysctl.conf 添加

kernel.panic = 20 #panic error中自動重啓,等待timeout爲20秒
kernel.sysrq=1 #激活Magic SysRq  否則,鍵盤鼠標沒有響應

按住 [ALT]+[SysRq]+[COMMAND], 這裏 SysRqPrint SCR鍵, 而COMMAND` 按以下來解釋!

命令 描述
b 立即重啓
e 發送SIGTERM給init之外的系統進程
o 關機
s sync同步所有的文件系統
u 試圖重新掛載文件系統

2 示例2–Kernel panic-not syncing fatal exception in interrupt


2.1 問題描述


很多網友安裝 Linux 出現 Kernel panic-not syncing fatal exception in interrupt 是由於網卡驅動原因。

2.2 解決方法


BIOS選項 "Onboard Lan" 的選項 "Disabled", 重啓從光驅啓動即可.

等安裝完系統之後, 再進入 BIOS 將 “Onboard Lan” 的選項給 "enable", 下載相應的網卡驅動安裝。

如出現以下報錯 :

init() r8168 … 
          … …
         … :Kernel panic: Fatal exception

r8168 是網卡型號.

BIOS 中禁用網卡, 從光驅啓動安裝系統. 再從網上下載網卡驅動安裝.

#tar  vjxf  r8168-8.014.00.tar.bz2
# make  clean  modules       (as root or with sudo)
      # make  install
      # depmod  -a
      # modprobe  r8168

安裝好系統後 reboot 進入 BIOS 把網卡打開.

另有網友在 Kernel panic 出錯信息中看到 "alc880", 這是個聲卡類型. 嘗試着將聲卡關閉, 重啓系統, 搞定.

3 示例3–Kernel panic-not syncing fatal exception


3.1 問題描述


安裝 linux 系統遇到安裝完成之後, 無法啓動系統出現 Kernel panic-not syncing fatal exception.

3.2 解決方法


很多情況是由於板載聲卡、網卡、或是cpu 超線程功能 (Hyper-Threading) 引起的.

這類問題的解決辦法就是先查看錯誤代碼中的信息, 找到錯誤所指向的硬件, 將其禁用. 系統啓動後, 安裝好相應的驅動, 再啓用該硬件即可.

另外出現 "Kernel Panic — not syncing: attempted to kill init""Kernel Panic — not syncing: attempted to kill idle task"

有時把內存互相換下位置或重新插拔下可以解決問題。

4 參考資料


根據內核Oops 定位代碼工具使用— addr2line 、gdb、objdump

轉載_Linux內核OOPS調試

kernel panic/kernel oops分析

DebuggingKernelOops

kerneloops package in Ubuntu

Understanding a Kernel Oops!

Kernel oops錯誤

Kernel Oops Howto

Kernel Panics

WiKipedia

Oops中的error code解釋

知識共享許可協議

本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章