背景
有很多关于使用 QEMU 模拟特定架构系统(“平台”)的文档。
例如,x86、ARM 或 RISCV 系统。
第一步是配置 QEMU target-list,例如./configure --target-list=riscv32-softmmu https://wiki.qemu.org/Documentation/Platforms/RISCV.
也可以在目标列表中提供多个目标,但显然这会为每个指定的平台构建独立的模拟。
然而,我的目标是模拟一个系统mixed目标:一台 x86 机器,还通过 PCI 托管 RISCV 嵌入式处理器。
显然我需要实现一个 QEMU PCI 设备,它将在 x86 平台上托管 RISCV 设备,并且
我有一个好主意如何实施通用 PCI 设备 https://github.com/qemu/qemu/blob/master/hw/misc/edu.c。
但是,我不确定最好的方法在同一个 QEMU 仿真中同时仿真 x86 和 RISCV.
一种方法是运行两个 QEMU 实例(作为两个独立的进程)并使用某种 IPC 在 x86 和 RISCV 模拟之间进行通信。
另一种可能的(?)方法是将 RISCV QEMU 构建为可加载库并从 x86 QEMU 加载它。
也许甚至有可能拥有一个同时模拟 x86 和 RISCV 的 QEMU 应用程序?
另一种方法是不使用 QEMU 来模拟 RISCV 设备。我可以实现一个完全封装 RISCV 模拟的 QEMU PCI 设备,例如tiny-emu https://bellard.org/tinyemu/,但我宁愿对 x86 和 RISCV 使用 QEMU。
我的问题是:
- 是否有混合目标 QEMU 项目的一些指南或示例?
我搜索了示例,但只找到了使用 QEMU 作为单平台模拟的参考,首先您选择要运行的平台。
- 在 QEMU 中模拟混合平台的最佳方法是什么?将 QEMU 进程与 IPC 分开?或者有没有一种方法可以配置 QEMU 以模拟混合平台?
Related
https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg01969.html https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg01969.html
QEMU 不支持在同一个 QEMU 进程中运行多个目标架构。 (理论上,这是我们希望能够做到的事情,但这需要对 QEMU 的核心部分进行大量重新设计,这些部分假设目标架构在编译时已知。到目前为止,没有人认为它足够重要,可以将所需的大量开发工作。)
因此,如果您想这样做,您需要以某种方式将主要架构的 QEMU 进程与其他一些用于辅助架构(QEMU 或其他)的进程缝合在一起。这已经完成了(例如 Xilinx 有一个基于 QEMU 的树外系统,可以使用多个 QEMU 进程执行此类操作),但我不知道有任何简单的现成框架或设置可以做到这一点。我怀疑弄清楚时间/时钟如何在两个模拟之间相互作用是棘手的方面之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)