我是 QEMU 的新手,正在尝试使用它chardev
。我遇到了名为 的选项-chardev pty,id=id
。因此,我尝试使用 创建 VM-chardev pty,id=pty0
并收到消息。
char device redirected to /dev/pts/9 (label pty0)
因此我尝试向它发送一些数据:
root@super-pc:~# cat /dev/pts/9
并没有看到任何输出。
这个 chardev 的用例是什么?
答案1
这是一个老问题,但对于那些通过谷歌找到方法的人来说:
单独设置 chardev 并不是特别有用,但如果将它与串行设备关联起来……
-chardev pty,id=char0 -serial chardev=char0
...那么您已经设置了一个虚拟串行端口,将虚拟机中的串行设备连接到主机上相应的 pty 设备。
例如,如果我像这样启动 Linux 虚拟机:
qemu-system-x86_64 -enable-kvm -smp 1 -m 1024 \
-drive if=virtio,format=qcow2,file=fedora.cow \
-netdev user,id=net0 \
-device virtio-net-pci,netdev=net0 \
-serial mon:stdio \
-chardev pty,id=char0 \
-serial chardev:char0
然后在虚拟机内部,/dev/ttyS0
是串行控制台,并/dev/ttyS1
连接到-chardev pty
选项创建的 PTY 设备。假设在启动虚拟机时我看到:
char device redirected to /dev/pts/9 (label char0)
然后在主机上我可以将串行通信程序连接到/dev/pts/9
:
$ picocom /dev/pts/9
在虚拟机中,如果我运行:
echo hello world > /dev/ttyS1
我将在输出中picocom
:
hello world
/dev/ttyS1
如果我在虚拟机内部启动一个 shell :
bash < /dev/ttyS1 > /dev/ttyS1 2> /dev/ttyS1
然后我就可以/dev/pts/9
通过主机与该 shell 进行交互。