2013-04-08 3 views
9

I 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 mean Это звучит как планирование в то время как атомарное, но есть нет такой вещи в модуле ядра.?

ответ

12

Значения, указанные в скобках, являются ifsr (instruction fault status) регистре. Существует множество причин прерываний, и это дает определенную причину. В ядре есть несколько таблиц, которые обрабатывают конкретные причины сбоя, а другие имеют обработчик, который делает printk и прерывает задачу, или может panic() ядро. См.: arm/mm/fault.c. Значение, вероятно, не является ценным, если вы не разрабатываете обработчик ошибок. Хотя это может дать представление о том, в чем проблема, лучше просто получить PC и посмотреть код по этому адресу (который, как я думаю, уже был напечатан?).

Эти неисправности могут возникать в любом месте; в задаче пользователя, задаче ядра или обработчике interrupt и т. д. Так как ваш обработчик interrupt разбился, Linux решает остановить все и не беспокоить. В противном случае, вы могли бы разлагает диски (даже больше) и т.д.

Примечание: Каждый fault status register имеет abort.S файл, который отличается для конкретного процессора ARM. Например, см. abort-ev7.Sv7_early_abort. Это помещается в processor table, который сопоставляется при загрузке.

  1. Необработанной вина - пытаюсь прочитать память, которая не отображается (через MMU).
  2. Kernel panic - a необработанная неисправность произошло в коде, считающемся невосстановимым.
+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 могут указывать на ошибку «hardware» в сравнении с * un-mapped * page; это зависит от процессора (т. е. ARMV5, ARMV8 и т. д.). –

+0

Возможно, вы правильно настроили отображение устройств. Общим случаем является то, что часы для периферийных устройств не включены и устройство не отвечает на запрос шины; особенно сообщения * external abort *, возможно, из-за отсутствия 'clk_prepare_enable()'. –