如何使用QEMU模拟混合平台?

问题描述 投票:0回答:4

后葫芦

有很多关于使用 QEMU 来模拟特定架构系统(“平台”)的文档。
例如,x86、ARM 或 RISCV 系统。
第一步是配置 QEMU target-list,例如

./configure --target-list=riscv32-softmmu

也可以在目标列表中提供多个目标,但显然这会为每个指定的平台构建独立的模拟。

然而,我的目标是模拟具有混合目标的系统:一台 x86 机器,还通过 PCI 承载 RISCV 嵌入式处理器。

显然我需要实现一个 QEMU PCI 设备,它将在 x86 平台上托管 RISCV 设备,并且 我有一个好主意如何实现通用 PCI 设备。 但是,我不确定在同一个 QEMU 模拟中同时模拟 x86 和 RISCV 的最佳方法。 一种方法是运行两个 QEMU 实例(作为两个独立的进程)并使用某种 IPC 在 x86 和 RISCV 模拟之间进行通信。

另一种可能的(?)方法是将 RISCV QEMU 构建为可加载库并从 x86 QEMU 加载它。

也许甚至有可能拥有一个同时模拟 x86 和 RISCV 的 QEMU 应用程序?
另一种方法是不使用 QEMU 来模拟 RISCV 设备。我可以实现一个完全封装 RISCV 模拟的 QEMU PCI 设备,例如
tiny-emu
,但我宁愿将 QEMU 用于 x86 和 RISCV。 我的问题是:

有混合目标 QEMU 项目的一些指南或示例吗?
    我搜索了示例,但只找到了使用 QEMU 作为单平台模拟的参考,首先您选择要运行的平台。

  • 在 QEMU 中模拟混合平台的最佳方法是什么?将 QEMU 进程与 IPC 分开?或者有没有办法配置 QEMU 来模拟混合平台?
相关

https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg01969.html

cross-platform qemu
4个回答
3
投票

因此,如果您想这样做,您需要以某种方式将主要架构的 QEMU 进程与其他一些用于辅助架构(QEMU 或其他)的进程缝合在一起。这已经完成了(例如,Xilinx 有一个基于 QEMU 的树外系统,可以使用多个 QEMU 进程执行此类操作),但我不知道有任何简单的现成框架或设置可以做到这一点。我怀疑弄清楚时间/时钟如何在两个模拟之间相互作用是棘手的方面之一。


1
投票

其“时钟”不太准确,但足以用于虚拟您的硬件

另一个选项是

https://wiki.qemu.org/Features/MultiProcessQEMU

但是你需要对这个实验代码进行一些修改


1
投票


0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.