10

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意思这听起来像是原子调度但内核模块中没有这样的事情。?
4

1 回答 1

13

括号中的值是ifsr指令故障状态)寄存器。流产的原因有很多,这些给出了一个具体的原因。内核中有一些表可以处理特定的故障原因,而另一些表则有一个处理程序来执行printk和中止任务,或者panic()内核可以。参见:arm/mm/fault.c。除非您正在开发故障处理程序,否则该值可能没有价值。虽然它可以让您了解故障的原因,但最好只是获取PC并查看该地址的代码(我认为它已经打印了?)。

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

注意:每个故障状态寄存器都有一个abort.S文件,该文件对于特定的 ARM CPU 是不同的。例如参见abort-ev7.S v7_early_abort。这被放入在启动时匹配的处理器表中。

  1. 未处理的错误- 试图读取未映射的内存(通过 MMU)。
  2. 内核恐慌-在被视为不可恢复的代码中发生未处理的错误。
于 2013-04-08T22:42:12.853 回答