QEMU virtio/virtconsole 设备解释

Dim*_*nNe 5 kvm qemu

让我们举个例子(我花了几个小时才让它工作):

qemu-system-x86_64 ... \
-kernel $HOME/devel/vmlinuz-5.11.0-22-generic            \
-drive ...                                               \
-append 'earlyprintk=hvc0 console=hvc0 root=/dev/sda rw' \ (0)
-device virtio-serial-pci,id=virtio-serial0              \ (1)
-chardev stdio,id=charconsole0                           \ (2)
-device virtconsole,chardev=charconsole0,id=console0       (3)
Run Code Online (Sandbox Code Playgroud)

这些选项有什么作用?我的理解是

  • (2) 告诉 qemu 创建 tty/console 的主机端点并将其“绑定”到 qemu 的 stdio。
  • (3) 告诉 qemu 哪些设备应该暴露给 guest 虚拟机,并且还指定charconsole0应该用作另一端,这实际上是 qemu 的 stdio。
    • 但什么是virtconsole
    • virtconsolevirtserialport或 和有什么不一样virtio-serial-pci
  • (1) 有什么作用?它的名字:从何而来virtio-serial-pci
  • 我如何知道virtconsole来宾中的设备将使用该名称进行标识hvc0(以便我可以在 (0) 中指定它)?

sts*_*uad 1

virtconsole 实际上只是一个专门的 virtio-serial 链接。每个 -device 指定一个新设备,因此在您的示例中您有两个 virtio-serial 设备。virtio-serial-pci 设备的行为与 virtio-serial 完全相同,只是它位于 PCI 总线而不是 MMIO 总线上。