我在ARM平台上insmod
一个内核模块,我得到一个内核恐慌,导致这三个错误被打印到屏幕上
Unhandled fault: external abort on non-linefetch (0x008)
Unhandled fault: imprecise external abort (0xc06)
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
。 这是放在一个处理器表 ,这是在开机时匹配。