这些用于 stdout 重定向的 qemu 参数如何工作?

这些用于 stdout 重定向的 qemu 参数如何工作?

我使用以下参数来启动 QEMU,以便来自来宾的输出将被重定向到主机控制台:

-chardev stdio,id=virtiocon0
-device virtio-serial
-device virtconsole,chardev=virtiocon0

我有以下问题:

  1. 这些标志分别代表什么意思?
  2. 来宾端和主机端都创建了哪些类型的设备?
  3. 我应该在哪里寻找主机端的设备(我实际上想从中读取)?

答案1

从联机帮助页:

-chardev 后端,id=id [,mux=on|off] [,选项]

后端是以下之一:null、socket、udp、msmouse、vc、ringbuf、file、pipe、console、serial、pty、stdio、braille、tty、parallel、parport、spicevmc。香料港。具体的后端将决定适用的选项。

所有设备都必须有一个 ID,它可以是长度不超过 127 个字符的任何字符串。它用于在其他命令行指令中唯一标识该设备。

特别是关于 stdio 后端:

-chardev stdio ,id=id [,s​​ignal=on|off]

连接到 QEMU 进程的标准输入和标准输出。

所以这个将 chardevvirtiocon0与 qemu 进程的标准输入/输出连接起来。

另外两个是:

-device driver[,prop[=value][,...]]
添加设备驱动程序。 prop=value 设置驱动程序属性。有效属性取决于驱动程序。

第一个驱动程序virtio-serial只是在主机和访客之间创建通信通道。这对于下一个司机来说是必要的。

最后一个,virtconsole在 guest 虚拟机上创建一个控制台设备,附加到之前创建的 chardev,该设备附加到 qemu 的 stdio/out。

然后,访客可以像任何其他 tty 一样使用此控制台设备(例如,调用getty它等)。

在 guest 虚拟机上创建的设备将取决于内核及其编译方式,在 Linux 中通常是 /dev/hvc0。

在这种情况下,主机上没有创建任何设备,它只是使用标准输入和标准输出。在 stdin 上读取它并在 stdout 上写入它。

您还可以将 stdin 和 stdout 重定向到其他内容,或使用不同的chardev后端。尝试套接字或管道。

相关内容