Доступ к ECAM на устройстве QEMU AArch64 virt - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь реализовать обнаружение устройства P CIE на голом железе на устройстве QEMU AArch64 virt. Я знаю, что область ECAM отображается на адрес памяти 0x3f000000, и я ожидаю увидеть там эту таблицу .

Но когда я выполняю чтение 4 байтов (подпись MCFG) с адреса 0x3f000000 , У меня синхронное исключение.

Что я делаю не так? Есть ли что-то, что мне нужно выполнить перед доступом к области отображения памяти P CIE?

QEMU_CMD = qemu-system-aarch64 \
    -machine virt \
    -m 1024M \
    -cpu cortex-a53 \
    -serial stdio \
    -device virtio-gpu-pci \
    -vnc :0 \
    -netdev user,id=n1 -device virtio-net-pci,netdev=n1

1 Ответ

1 голос
/ 29 мая 2020

Вы смотрите не по адресу. Плата virt помещает ECAM по адресу 0x3f00_0000 только в том случае, если она не использует физическое адресное пространство выше 4 ГБ (что не является значением по умолчанию; QEMU избегает использования highmem только в том случае, если пользователь передал -machine highmem = off).

Вы можете проверить это, попросив QEMU сбросить dtb вместо запуска гостя, добавив «-machine dumpdtb = / tmp / dump.dtb» в командную строку, а затем разобрав dtb с помощью «dt c -I dtb» -O dts /tmp/dump.dtb | less "и просмотрев dtb для контроллера pci.

В более общем смысле, гостевой компьютер, работающий на плате QEMU" virt ", не должен жестко кодировать адреса устройств, но всегда следует читать dtb, который QEMU генерирует и передает гостю, чтобы определить, где в адресном пространстве размещены устройства. Если бы ваш код делал это, он бы не столкнулся с этой ошибкой.

...