2013-04-08 249 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