这些内核恐慌错误是什么意思?

我在ARM平台上insmod一个内核模块,我得到一个内核恐慌,导致这三个错误被打印到屏幕上

  1. Unhandled fault: external abort on non-linefetch (0x008)
  2. Unhandled fault: imprecise external abort (0xc06)
  3. Kernel panic - not syncing: Fatal exception in interrupt

    • 括号中的那些值是什么?
    • 3是什么意思这听起来像是在primefaces调度,但在内核模块中没有这样的事情。

括号中的值是ifsr ( 指令故障状态 )寄存器。 导致中止的原因很多,这些导致了特定的原因。 内核中有一些处理特定故障原因的表,其他处理器有一个处理printk并中止任务或可以panic()内核的处理程序。 请参阅: arm / mm / fault.c 。 除非你正在开发一个错误处理程序,否则这个值可能没有价值。 虽然它可以给出一个关于错误的概念,但是最好只是让PC看看那个地址的代码(我认为已经打印出来了)。

这些故障可以发生 在一个用户任务中,一个内核任务或一个interrupt处理程序等。由于你的interrupt处理程序已经崩溃,Linux决定停止一切,而不是继续进行。 否则,你可能会损坏磁盘(甚至更多),等等。

注:每个故障状态寄存器都有一个abort.S文件,对于特定的ARM CPU不同。 例如,请参阅abort-ev7.S v7_early_abort 。 这是放在一个处理器表 ,这是在开机时匹配。

  1. 未处理的故障 – 尝试读取未映射的内存(通过MMU)。
  2. 内核恐慌 – 在被认为是不可恢复的代码中出现未处理的错误