我正在尝试使用kvm作为pipe理程序在主机和其中一个访客虚拟机之间build立通信通道。 为此,我使用了virtio-serial 。
要创build虚拟机,我发出了以下命令:
qemu-system-x86_64 \ -m 2048 -name ubuntu \ -hda ubuntu_image \ -device virtio-serial \ -chardev socket,path=/tmp/foo,server,nowait,id=foo \ -device virtconsole,name=jobsfoo,chardev=foo,name=org.ubuntu.foo \
然后为了沟通,在客人,我使用:
socat /dev/hvc0 -
并在主机上:
socat /tmp/foo -
我明白了/tmp/foo是一个socket和/dev/hvc0一个字符设备。
为什么有通信的对称接口:主机上的套接字和客户机上的字符设备?
在客户机上有一个字符设备,因为Unix和类Unix操作系统将串行端口作为访客设备,而且只要Unix已经存在,你就明确地要求客户机中有一个虚拟串行端口。
你在主机上有一个套接字,因为你明确地要求一个套接字。 大概你想要从主机上的某些程序到理解串行端口的客户机上的某个程序的双向通信。 这个套接字的另一端当然是由运行虚拟机的qemu进程来处理的。 你也可以将它连接到一个pty来模拟一个串行控制台,或者一个纯文件来logging从端口出来的所有东西。