什麼是“核心恐慌”?
**當您的電腦出現“核心恐慌”**時,這意味著什麼?
它等同於Windows BsoD嗎?
此外,當核心恐慌發生時,使用者可以使用哪些方法、提示和技巧?
核心恐慌與 BSOD 相同,並且是不可挽救的 IIRC。然而,較小的故障是 OOPS,它表示核心中存在一些錯誤。
- 您可以使用kexec在緊急情況下切換到新核心(您可以將其威脅為快速重啟) - 可能會獲得有意義的系統轉儲以調試問題
- 您可以使用
panic
在 n 秒後重新啟動核心的參數。在這種情況下,您可以指示 GRUB 切換到備用核心- 使用Magic SysRQ 鍵列印堆棧跟踪等。
Linux 核心恐慌是當核心邏輯確定存在使正常邏輯無法繼續執行或不負責任的條件時核心執行的子常式呼叫。
核心可以在以下情況下呼叫恐慌:
- 它檢測核心程式碼或堆棧中的軟體錯誤
- 當存在執行時條件(例如記憶體不足且沒有可終止程序)時
- 特權模式執行期間的 CPU 異常導致 oops 條件
在 3.X 核心中,大約有 950 種不同的情況會呼叫恐慌。panic 子常式首先將核心堆棧轉儲和 CPU 寄存器列印到控制台。然後,如果配置了崩潰 kexec 核心,它會引導 kexec 核心。否則,恐慌常式會破壞所有自旋鎖並執行緊急重啟。
oops 是從 CPU 異常處理程序呼叫的子常式,用於處理在特權(即核心)模式下執行時發生的 CPU 異常。異常可能由於核心程式碼中的錯誤、硬體故障或導致特定異常的外部條件而發生。異常處理程序列印帶有 CPU 寄存器和模組列表的核心日誌。與恐慌呼叫不同,核心邏輯本身永遠不會在 CPU 異常處理程序的上下文之外呼叫 oops。
如果核心為 kexec 配置,則 oops 將導致 kexec 核心被引導。否則,如果在執行中斷處理程序時發生異常,則 oops 會導致核心緊急呼叫。否則,如果核心配置為“panic on oops”,則 oops 將導致緊急呼叫。否則核心退出異常處理程序並恢復執行。當核心退出異常處理程序並恢復執行時,核心的完整性是值得懷疑的。
CPU 異常處理程序是特定於體系結構的。它們通常在 arch/*/kernel/traps.c 中實現,並設置在設置中斷表的特定於體系結構的核心入口程式碼中。例如參見
arch/powerpc/kernel/traps.c
和arch/powerpc/kernel/head_fsl_booke.S
。核心恐慌和 oops 條件都可以配置為呼叫一個
kmsg_dump
常式,您可以使用該常式將崩潰調試資訊保存到 RAM 或快閃記憶體中,除非 oops 發生在中斷上下文中,在這種情況下,“kmsg_dump”常式只能用於保存到 RAM,而不是 MTD。保存到 RAM 時,您有責任 a) 確保在 kexec 引導或緊急重啟引導期間不覆蓋使用的 RAM 區域,以及 b) 從 kexec 核心或引導載入程序邏輯中獲取記憶體區域。