Модель основания ARMv8: переключатели и светодиоды

Я пытаюсь загрузить свое маленькое ядро ​​ARMv7 (которое прекрасно работает с использованием модели qemu vexpress) в ARMv8 Foundation Model v2.1. Модель загружается на уровне EL3 / 64 бита, и мне удалось перейти на уровень EL1 / 32 бита, но я сталкиваюсь с некоторыми проблемами (в двух словах, таймер не тикает, а некоторые kprintf отсутствуют, но это не выпуск здесь).

Для устранения проблемы с UART я хотел использовать светодиодные переключатели, предоставляемые моделью. Я могу легко прочитать их значение из программного обеспечения, но не могу написать новое значение ни одному из них. Ядро вроде зависает. Вот минимальный ассемблерный код, который записывает в регистр коммутаторов:

.global Start
Start: 
    # we are in EL3 / 64 bits mode
    # create the 0x1C010000 + 0x4 address of switches
    mov  x0, #4
    movk x0, #0x1c01, lsl #16
    # value to write
    mov  w1, #0xaa
    # actual writing
    strb w1, [x0]

Кажется, я застрял на strb инструкция. Для записи, если я заменю strb с ldrbЯ могу правильно прочитать и отобразить значение этого регистра (я играл с --switches флаг, чтобы убедиться, что это сработало).

Кто-нибудь знает, что я здесь делаю не так?

РЕДАКТИРОВАТЬ: благодаря предложениям unixsmurf, я теперь знаю, что получил синхронное исключение прерывания данных без изменения уровня, и причина - "Синхронный внешний прерывание". Я не знаю, как проверить дальше, я думаю, я попробую форум ARM.

Лучший,

V.

1 ответ

Решение

Сообщество ARM наконец решило проблему. Полное обсуждение можно найти здесь.

Другие вопросы по тегам