是否有人成功地在 QEMU/KVM 中运行客户操作系统,其中客户操作系统可以完全访问主机串行端口,无论是 /dev/ttyS0、COM1 还是主机提供的虚拟串行端口。
似乎 -chardev、-serial 等文档有点令人困惑(至少对我来说)。我印象中,客户操作系统能够看到/使用串行端口,只要在启动客户机时传递了正确的参数。但许多人说“不,串行端口仅用于 QEMU/KVM 中客户操作系统和主机之间的控制台重定向”……这没有道理,因为 QEMU/KVM 似乎是运行需要与 RS232 设备等通信的旧东西的好方法。
此外,如果主机上没有物理串行端口,如何“创建一个”?目前,我正在使用 NetSerial,它实际上创建了一个“COM 端口”(带有一个“调制解调器”)。但 QEMU 似乎也不太喜欢这种构造。
答案1
首先需要为主机串行端口定义一个 chardev 并为其附加一个名称(id 参数),如下所示:
-chardev tty,path=/dev/ttyUSB0,id=hostusbserial
接下来,您必须向虚拟机添加一些串行设备并将其链接到您刚刚创建的 chardev:
-device pci-serial,chardev=hostusbserial
完成。必须在客户机中配置线路速度等,qemu 将获取这些设置并将其应用到主机串行端口。
命令-serial
开关是一种方便的快捷方式,它将创建一个 chardev 并将其链接到默认串行端口(在 x86 上是通常的 ioport 0x3f8 上的 isa-serial 设备,在其他架构上则是其他设备)。