【问题标题】:How to share virtual GPIO data between guest and host system in qemu 7.1.0如何在 qemu 7.1.0 中的来宾系统和主机系统之间共享虚拟 GPIO 数据
【发布时间】:2022-11-01 19:29:15
【问题描述】:

我想在 qemu 7.1.0 版中创建一个虚拟树莓派机器。然后我想在虚拟树莓派客户系统和我的主机系统之间共享数据。查看 qemu 文档,我思考Inter-VM Shared Memory Device 是我想要的。

我已经按照here 的说明进行操作,因此以下命令允许我正确启动树莓派虚拟机:

qemu-system-aarch64 -M raspi3b -display none -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" -dtb ./dtbs/bcm2710-rpi-3-b-plus.dtb -sd raspios.qcow -kernel kernel8.img -m 1G -smp 4 -serial mon:stdio -usb -device usb-mouse -device usb-kbd -device usb-net,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

到目前为止,一切都很好。现在,当我将以下标志添加到上面的命令中以包含 Ivshmem 设备时,如下所示:

-object memory-backend-file,size=1M,share=on,mem-path=/dev/shm/ivshmem,id=hostmem -device ivshmem-plain,memdev=hostme

我收到以下错误:

-device ivshmem-plain,memdev=hostmem: No 'PCI' bus found for device 'ivshmem-plain'

显然arm设备没有PCI总线。但是根据this article,有人确实在基于 ARM 的设备上成功使用了 ivshmem 设备多才多艺的pb系统。顺便说一句,那篇文章看起来与我在我的系统上尝试做的完全一样,但它似乎也很旧,如果我尝试逐字遵循命令,我会左右遇到问题和错误。

是否可以使用 ivshmem inter-vm 共享内存设备在我的主机 x86_64 系统和来宾树莓派 3b 嵌入式板之间设置共享内存区域?

如果可能,那么我怀疑这只是找到正确标志的问题。

我对嵌入式系统非常陌生,并且 qemu 文档密集且庞大,我不确定这是否是正确的方向。

我正在尝试连接这两个系统,因为我希望我的主机系统上的程序能够向虚拟树莓派的 gpio 引脚发送输入和接收输出。任何帮助和/或其他方法将不胜感激。

【问题讨论】:

    标签: linux virtualization qemu gpio robotics


    【解决方案1】:

    是否有 PCI 总线并不取决于客户 CPU 架构(arm、x86 等),而是取决于客户机器类型。有些 Arm 板有 PCI 总线,有些则没有。理论上,您可以拥有一台没有 PCI 总线的 x86 机器。具体来说,“versatilepb”机器恰好有一条 PCI 总线。这是因为我们正在对真实硬件进行建模,而真实硬件的特定位具有 PCI 插槽,您可以将 PCI 设备插入其中。

    树莓派真实硬件没有PCI总线,所以QEMU的模型也没有PCI。结果是您无法在该板类型上使用 ivshmem 设备。

    不过,我不确定 ivshmem 设备是否会帮助您使用模拟的 GPIO 引脚做任何事情。 QEMU 的 GPIO 模型目前不包括对将这些引脚连接到任何东西的能力进行建模——我们只是对 GPIO 控制器硬件进行建模,这样来宾就不会感到困惑,但它就像没有任何东西插入这些引脚一样。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多