这些内核恐慌错误意味着什么?

时间:2013-04-08 21:38:30

标签: linux module linux-kernel arm

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

  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是什么意思听起来像原子调度,但有 在内核模块中没有这样的东西。?

1 个答案:

答案 0 :(得分:12)

括号中的值是ifsrinstruction fault status)寄存器。中止的原因很多,这些都是一个特定的原因。内核中有一些表处理特定的错误原因,而另一些表有一个处理程序,它执行printk并中止任务或者panic()内核。见:arm/mm/fault.c。除非您正在开发故障处理程序,否则该值可能没有价值。虽然它可以让我们知道故障是什么,但最好只是获取PC并查看该地址的代码(我认为已经打印过了?)。

这些故障可能发生在任何地方;在用户任务,内核任务或interrupt处理程序等中。由于您的interrupt处理程序已崩溃,Linux决定停止所有操作,而不是继续进行操作。否则,你可能会破坏磁盘(甚至更多)等等。

注意:每个fault status register都有一个 abort.S 文件,该文件与特定的ARM CPU不同。例如,请参阅abort-ev7.S v7_early_abort。这是一个processor table,它在启动时匹配。

  1. 未处理的错误 - 尝试读取未映射的内存(通过MMU)。
  2. 内核恐慌 - 在被视为无法恢复的代码中发生未处理的错误