#u-boot #armv8 #cortex-a
Вопрос:
Версия U-загрузки:U-Загрузка 2017.09 Модель: Rockchip RK3568 Оценочная плата Arch : ARMv8-a
Очень странный жучок.Я также встречаюсь в другой коллегии. Так что, я думаю, это программная ошибка.
Я пытаюсь загрузить свой мини-образ системы(с именем:kernel.bin) в {load_addr} с помощью инструкции «tftp» в uboot. И используйте «go», чтобы перейти к {load_addr}.
kernel.bin реализует некоторые очень простые функции:
- компоновщик.lds:разделите несколько сегментов.
- start.S: предварительно запустите, измените уровень исключений с EL2 на EL1 и перейдите в мир C.
- main.c: используйте UART для печати сообщения.
И странные проблемы заключаются в:
- Если я не переключусь на EL1, файл kernel.bin можно загрузить через «tftp» и «fatload» и успешно запустить оба.
- НО,если я переключусь на EL1, используйте «fatload», чтобы загрузить и запустить. но при использовании «tftp» для загрузки после выполнения инструкции » go » он выдает «Синхронное прерывание»,esr=0x02000000.
Вот полная информация об отмене:
=> go 10000000
Starting application at 0x10000000 ...
"Synchronous Abort" handler, esr 0x96000040
* Reason: Exception from a Data abort, from current exception level
* PC = ffffffff22c62078
* LR = ffffffff22c62064
* SP = 000000001000ae20
* ESR_EL2 = 0000000096000040
* Reloc Off = 00000000ed39e000
x0 : 0000000030d00800 x1 : fffffffbffff7fbb
x2 : ffffd78bffff9cf1 x3 : 0000000000000000
x4 : 0000000000000000 x5 : 0000000000000030
x6 : 00000000ede5e870 x7 : 000000000000000f
x8 : 0000000000000000 x9 : 0000000000000008
x10: 00000000ffffffd0 x11: 00000000ebdab5f8
x12: 0000000000000004 x13: 0000000000000200
x14: 00000000eb9f82d0 x15: 0000000000000008
x16: 0000000000008070 x17: 0000000000000001
x18: 00000000eb9ffcf8 x19: 00000000ebdf77f8
x20: 0000000000000002 x21: 0000000010000000
x22: 00000000ebdf77f0 x23: 00000000edec156c
x24: 0000000000000002 x25: 0000000000000000
x26: 0000000000000000 x27: 0000000000000000
x28: 00000000ebdf2ac0 x29: 00000000eb9f89c0
Call trace:
PC: [< ffffffff22c62078 >]
LR: [< ffffffff22c62064 >]
Stack:
[< ffffffff22c62078 >]
[< ffffffff12c61fff >]
Copy info from "Call trace..." to a file(eg. dump.txt), and run
command in your U-Boot project: ./scripts/stacktrace.sh dump.txt
Resetting CPU ...
Кстати, я сравнил байты в памяти после загрузки, два способа(tftp и fatload) имеют одинаковые данные. Так почему же возникла эта проблема?
Комментарии:
1. Я в замешательстве: так как вы переключаетесь на EL1 в программе, которую загружаете с помощью tftp или fatload, следующая последовательность всегда должна работать с tftp или fatload: — выключите питание, — включите питание, — дождитесь запроса на загрузку, — загрузите программу с помощью tftp или fatload — запустите свою программу. Не могли бы вы, пожалуйста, предоставить более точное описание точной последовательности, которую вы используете, которая запускает проблему ?
2. Спасибо, Франт. Позвольте мне рассказать вам о процессе отладки. Во-первых, плата инициализируется в EL2, поэтому я хочу перейти на EL1. Но это никогда не удастся, пока я не удалю бит SCTLR_EL2.M/A/I. Они были установлены изначально. И это время, когда инструкция загрузки «tftp» и » go » вызывают синхронное прерывание. Случайно я поместил корзину на SD-карту для загрузки. Он неожиданно печатает правильную информацию. Данные в памяти после загрузки одинаковы в обоих направлениях(tftp и fatload).
3. Если код необходим для оценки проблемы, можно показать соответствующий код.
4.
since you are switching to EL1 in the program you are loading using either tftp or fatload, the sequence hereafter should always work
На самом деле, когда я использую инструкцию загрузки «tftp», переключатель на EL1 не работает. Конкретная производительность-это отсутствие выходной информации в UART. После того, как я очистил бит SCTLR_EL2.M/A/I и загрузил корзину с помощью «fatload», переключатель работает.5. Теперь я рассматриваю влияние u-boot. Потому что я обнаружил, что он включил MMU и создал идентичную карту. Я не очень хорошо разбираюсь в подробной конфигурации U-boot. Я только что использовал установленный Uboot.