Значения, указанные в скобках, являются 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, который сопоставляется при загрузке.
- Необработанной вина - пытаюсь прочитать память, которая не отображается (через MMU).
- Kernel panic - a необработанная неисправность произошло в коде, считающемся невосстановимым.
Извините, таблицы были недавно перенесены в отдельные файлы '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 и т. д.). –
Возможно, вы правильно настроили отображение устройств. Общим случаем является то, что часы для периферийных устройств не включены и устройство не отвечает на запрос шины; особенно сообщения * external abort *, возможно, из-за отсутствия 'clk_prepare_enable()'. –