2013-04-08 183 views
9

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

回答

12

括号中的值是ifsrinstruction fault status)寄存器。造成堕胎的原因很多,这些原因都有其特定的原因。内核中有一些处理特定故障原因的表,其他处理器有一个处理器,它会执行一个内核,并中止一个任务或可以中断一个任务或可以内核处理。请参阅:arm/mm/fault.c。除非您正在开发故障处理程序,否则该值可能无价值。尽管它可以给出关于错误的信息,但最好是获取PC并查看该地址的代码(我认为它已经打印出来了?)。

这些故障可能发生在任何地方;在一个用户任务中,一个内核任务或者一个处理器,等等。由于你的处理器已经崩溃,Linux决定停止一切,而不是继续。否则,你可能会破坏磁盘(甚至更多)等

注:每个fault status registerabort.S文件,该文件是为特定的ARM CPU不同。例如见abort-ev7.Sv7_early_abort。这是在启动时匹配的processor table

  1. 未处理故障 - 试图读取未映射(通过MMU)的内存。
  2. 内核恐慌 - 一个未处理的错误发生在被认为不可恢复的代码中。
+0

对不起,表格最近被移动到单独的'C'文件。请参阅:[fsr-2level.c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/fsr-2level.c)和[fsr-3level.c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/fsr-3level.c)将'ifsr'映射到函数类型的表。至少在2.6.36中,这些表位于'fault.c'中。我猜想一些FSR代码可能表明一个“硬件”错误与一个* un-mapped *页面相比;这是CPU(即ARMV5,ARMV8等)的依赖。 – 2013-04-09 15:30:10

+0

您可能正确设置了设备映射设置。常见的情况是外设的时钟未启用且设备未响应总线请求;特别是* external abort *类型的消息可能是由于缺少'clk_prepare_enable()'。 – 2013-11-21 18:25:33