与在 Qemu 中运行的 Windows 客户操作系统进行通信

与在 Qemu 中运行的 Windows 客户操作系统进行通信

使用无头 Ubuntu 14.04 服务器,我在 Qemu 中运行 Windows 7 客户机,我将 GPU 传递给它(以提高性能)。我正在编写一个应用程序,其中一部分将在 Linux 中运行,另一部分将在 Windows 客户机中运行,我需要两者之间的通信。研究这个问题让我相信我最好的选择是使用 Virtio-serial 驱动程序,这样我就可以简单地在两者之间进行通信,就好像它们有串行连接一样;这听起来很棒,但我无论如何也想不出如何让它工作。我找到了一些资源,详细介绍了必要的 Qemu 命令行选项,例如这里,但我没有找到任何关于如何从宾客似乎大多数做这种事情的人都是用 Linux 客户操作系统来做的,我相信这大大简化了事情。

网络通信可能不是一个选项,因为我们很可能也会将 NIC 传递到客户操作系统(再次强调,性能对于客户操作系统至关重要)。即使不是,对于应用程序之间的简单通信来说,这似乎是一个不必要的繁重选项。

我还考虑过创建一个 SMB 共享,并在那里存储一个可以从多个主机连接的数据库,然后在主机和客户机上运行 mysql。但这似乎也远非理想……有没有人有这方面的经验,或者我可能遗漏了一个明显的建议?

编辑:

我想要包含我的 qemu shell 脚本:

sudo qemu-system-x86_64 -enable-kvm -M q35 -m 3072 -cpu host -smp 4 
-bios /usr/share/qemu/bios.bin -vga none -nographic -serial mon:stdio 
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 
-device vfio-pci,host=00:01.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on 
-device vfio-pci,host=00:01.1,bus=root.1,addr=00.1 
-device virtio-scsi-pci,id=scsi 
-drive file=/utils/WES7.img,id=disk,format=raw,if=none -device ide-hd,drive=disk 
-drive file=/home/mvsuser/virtio-win-0.1-100.iso,id=virtiocd,if=none -device ide-cd,bus=ide.1,drive=virtiocd 
-usb -usbdevice host:046d:C52B 
-net bridge -net nic,model=virtio 
-chardev socket,path=/tmp/port0,server,nowait,id=port0-char 
-device virtio-serial 
-device virtserialport,id=port1,name=vioserial,chardev=port0-char 

答案1

您引用的页面包括一条链接添加到 Windows 客户机(以及 Linux 客户机)使用的 API。我相信这就是您正在寻找的。

此外,QEMU Guest Agent 源代码具有一个工作示例qemu 客户代理如何在 Windows 中使用 virtio-serial。

相关内容