什么是“内核恐慌”?


19

当您的计算机出现“内核崩溃”是什么意思?

它等于Windows BsoD吗?

另外,当发生内核恐慌时,用户可以使用哪些方法,技巧和窍门


3
内核恐慌比BSOD更好,因为它的名称表示用户在发生恐慌时应采取的措施。
amphetamachine

蓝色的窗口也提供了一些信息,但是在大多数情况下并没有太大帮助。
ott--

Answers:


16

内核恐慌与BSOD相同,并且是不可挽救的IIRC。但是,较小的故障是OOPS,它表示内核中有一些错误。

  1. 您可以使用kexec在紧急情况下切换到新内核(您可以威胁它作为快速重启)-可能会得到有意义的系统转储以调试问题
  2. 您可以使用panicn秒后重新启动内核的参数。在这种情况下,您可以指示GRUB切换到后备内核
  3. 使用Magic SysRQ键打印堆栈跟踪等。

6
BSOD更正确的是带有真正错误消息屏幕的KP。
xenoterracide

SysRq最引人注目的魔术是emergency sync刷新缓冲区(如果可能的话)。
ott--

6

Linux内核恐慌是子例程调用,当内核逻辑确定存在使正常逻辑无法继续执行或不负责任的条件时,内核将执行该例程。

在以下情况下,内核可以调用紧急情况:

  1. 它检测内核代码或堆栈中的软件错误
  2. 当存在运行时条件(例如内存不足,无可终止进程)时
  3. 特权模式执行期间的CPU异常导致oops条件

在3.X内核中,大约有950种不同的情况发生了紧急情况。panic子例程首先将内核堆栈转储和CPU寄存器输出到控制台。然后,如果已配置崩溃的kexec内核,它将引导kexec内核。否则,紧急程序会破坏所有自旋锁并执行紧急重启。

oops是从CPU异常处理程序调用的子例程,用于在特权(即内核)模式下执行时发生的CPU异常。异常可能是由于内核代码错误,硬件故障或导致特定异常的外部条件导致的。异常处理程序将打印带有CPU寄存器和模块列表的内核日志。与紧急调用不同,内核逻辑本身从不在CPU异常处理程序的上下文外部调用oop。

如果为kexec配置了内核,则oops将导致kexec内核被引导。否则,如果在执行中断处理程序时发生异常,则oops导致内核紧急调用。否则,如果将内核配置为“紧急情况”,则这些情况将导致紧急情况调用。否则,内核将退出异常处理程序并恢复执行。当内核退出异常处理程序并恢复执行时,怀疑内核的完整性。

CPU异常处理程序是特定于体系结构的。它们通常在arch / * / kernel / traps.c中实现,并在设置中断表的特定于体系结构的内核入口代码中进行设置。请参阅示例arch/powerpc/kernel/traps.carch/powerpc/kernel/head_fsl_booke.S

可以将内核紧急情况和oops条件都配置为调用一个kmsg_dump例程,您可以使用该例程将崩溃调试信息保存到RAM或闪存中,除非oops在中断上下文中发生,在这种情况下,“ kmsg_dump”例程只能用于保存到RAM,而不是MTD。保存到RAM时,您有责任a)确保在kexec引导或紧急重启引导期间不覆盖使用的RAM区域,以及b)从kexec内核或引导加载程序逻辑中获取内存区域。


5

这是意外的程序流行为(在这种情况下,内核是程序)。万一紧急程序停止工作。它等于Windows BsoD。KP表示内核或模块有问题。如果它是稳定的内核,请查看驱动程序。如果没什么特别的,并且所有驱动程序都通用,则可能是硬件问题。


或内核去野餐..
uray

即使在稳定的内核中,也始终存在一些错误。
ott--
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.