答案1
内核恐慌与 BSOD 相同,并且是不可挽救的 IIRC。然而较小的故障是 OOPS,它表示内核中存在一些错误。
- 您可以使用执行程序在恐慌时切换到新内核(你可以威胁它快速重启) - 可能变得有意义系统转储调试问题
- 您可以使用
panic
n 秒后重新启动内核的参数。在这种情况下,您可以指示 GRUB 切换到后备内核 - 使用魔法 SysRQ 键打印堆栈跟踪等
答案2
Linux 内核恐慌是当内核逻辑确定存在使正常逻辑无法继续执行或不负责任的条件时内核执行的子例程调用。
内核可以在以下情况下调用恐慌:
- 它检测内核代码或堆栈中的软件错误
- 当出现运行时状况(例如内存不足且没有可杀死的进程)时
- 特权模式执行期间的 CPU 异常会导致 oops 条件
在 3.X 内核中,大约有 950 种不同的情况会引发恐慌。恐慌子例程首先将内核堆栈转储和 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) 确保所使用的 RAM 区域在 kexec 引导或紧急重启引导期间不会被覆盖,以及 b) 从 kexec 内核或引导加载程序逻辑获取内存区域。
答案3
这是意外的程序流行为(在本例中内核是程序)。如果出现紧急情况,程序将停止工作。它等于 Windows BsoD。 KP 表示内核或模块有问题。如果它是稳定的内核 - 查看驱动程序。如果没有什么特别的并且所有驱动程序都是通用的,则可能是硬件问题。