Как я могу использовать QEMU для моделирования смешанных платформ? - PullRequest
0 голосов
/ 03 августа 2020

Backgournd

Существует много документации об использовании QEMU для моделирования системы определенной архитектуры («платформы»). Например, система x86, ARM или RISCV. Первый шаг - настроить QEMU target-list, , например ./configure --target-list=riscv32-softmmu. Также возможно указать несколько целей в списке целей, но очевидно, что это создает независимую симуляцию для каждой указанной платформы.

Моя цель, однако, состоит в том, чтобы смоделировать систему с смешанными целями : машина x86, на которой также размещен встроенный процессор RISCV через PCI.

Очевидно, мне нужно реализовать устройство QEMU PCI, которое будет размещать устройство RISCV на платформе x86, и у меня есть хорошая идея, как реализовать generi c PCI-устройство . Однако я не уверен в лучшем подходе к симуляции x86 и RISCV вместе в одной симуляции QEMU .

Один из подходов - запустить два экземпляра QEMU (как два отдельных процесса ) и использовать какой-то IP C для связи между x86 и симуляцией RISCV. Другой возможный (?) Подход мог бы заключаться в создании RISCV QEMU как загружаемой библиотеки и загрузке ее из x86 QEMU. Возможно, даже возможно иметь одно приложение QEMU, которое имитирует как x86, так и RISCV? Еще один подход - не использовать QEMU для моделирования устройства RISCV. Я мог бы реализовать устройство QEMU PCI, которое полностью инкапсулирует симуляцию RISCV, такую ​​как tiny-emu , но я бы предпочел использовать QEMU как для x86, так и для RISCV.

Мои вопросы:

  • Есть ли какие-нибудь рекомендации или примеры для проекта QEMU со смешанными целями? Я искал примеры, но нашел только ссылки на использование QEMU в качестве моделирования одной платформы, где сначала вы выбираете, какую платформу вы хотите запустить.
  • Каким будет лучший подход для моделирования смешанной платформы в QEMU ? Разделить процессы QEMU с IP C? Или есть способ настроить QEMU таким образом, чтобы он мог имитировать смешанную платформу?

1 Ответ

1 голос
/ 03 августа 2020

QEMU не поддерживает запуск нескольких целевых архитектур в одном процессе QEMU. (Это то, что мы теоретически хотели бы сделать, но это потребует значительной переделки основных частей QEMU, которые предполагают, что целевая архитектура известна во время компиляции. Пока никто не считал достаточно важным поставить в значительных усилиях, необходимых для разработки.) . Это было сделано (например, у Xilinx есть вневременная система на основе QEMU, которая делает такие вещи с несколькими процессами QEMU), но я не знаю каких-либо простых готовых фреймворков или настроек для этого. . Я подозреваю, что выяснение того, как время / часы взаимодействуют между двумя симуляторами, является одним из сложных аспектов.

...