Answers:
内核恐慌与BSOD相同,并且是不可挽救的IIRC。但是,较小的故障是OOPS,它表示内核中有一些错误。
panic
n秒后重新启动内核的参数。在这种情况下,您可以指示GRUB切换到后备内核emergency sync
刷新缓冲区(如果可能的话)。
Linux内核恐慌是子例程调用,当内核逻辑确定存在使正常逻辑无法继续执行或不负责任的条件时,内核将执行该例程。
在以下情况下,内核可以调用紧急情况:
在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.c
和arch/powerpc/kernel/head_fsl_booke.S
。
可以将内核紧急情况和oops条件都配置为调用一个kmsg_dump
例程,您可以使用该例程将崩溃调试信息保存到RAM或闪存中,除非oops在中断上下文中发生,在这种情况下,“ kmsg_dump”例程只能用于保存到RAM,而不是MTD。保存到RAM时,您有责任a)确保在kexec引导或紧急重启引导期间不覆盖使用的RAM区域,以及b)从kexec内核或引导加载程序逻辑中获取内存区域。