I insmod
ARM平台上的内核模块,我得到一个内核恐慌导致这三个错误被打印到屏幕上
Unhandled fault: external abort on non-linefetch (0x008)
Unhandled fault: imprecise external abort (0xc06)
Kernel panic - not syncing: Fatal exception in interrupt
3
是什么意思听起来像原子调度,但有
在内核模块中没有这样的东西。?答案 0 :(得分:12)
括号中的值是ifsr
(instruction 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,它在启动时匹配。