首页 文章

如何在virtio串行设备中使用in-qemu API

提问于
浏览
2

我想在KVM Qemu设置中交换来宾和主机之间的“复杂”数据(分层结构) .

我的想法是使用virtio串行驱动程序这样做 . 来宾应用程序将使用普通的I / O函数,如open(2),close(2),read(2)和write(2)将"buffer"(=我要发送的结构)发送到virtio serial back -结束 . 后端驱动程序将在Qemu内部运行,并通过此处描述的in-qemu主机API接收指向结构的指针:http://www.linux-kvm.org/page/Virtio-serial_API

我现在的问题可能相对微不足道,但我一直在寻找谷歌并找不到任何东西:我如何“挂钩到qemu”,以便我可以使用virtio串行主机API?

我知道我必须提供像 void my_init(void) { virtio_serial_port_qdev_register(&myinfo); } 这样的初始化函数,并使用 device_init(&my_init) 将其注册到qemu . 但是,我不明白我如何将模块与qemu链接?我是否必须将我的源文件添加到qemu代码库和makefile并重新编译qemu?或者我可以单独编译它并使用一些神奇的qemu命令行选项来加载它?还是完全不同的东西?

(注意:我知道我可以选择序列化我的数据,将其发送到主机上的套接字,并在那里反序列化,但我想避免序列化开销 . 如果有办法使用共享内存区域代替对于具有开箱即用的virtIO串行设备的套接字,这也可以是一个选项 .

感谢大家的帮助!克里斯托夫

2 回答

  • 1

    在主机端,可以使用“-chardev”选项将串行端口连接到管道或插槽 . 如果指定例如“-chardev socket,path = / tmp / foo.sock,server,nowait,id = foo”,则可以使用“-device virtserialport,chardev = foo”将virtio-serial端口连接到该套接字 . 您不需要修改QEMU(或者我不明白您想要做什么) .

  • 0

    你可以开始使用vm

    qemu-system-x86_64 -m 1024 -name mac -hda~ / Documents / ubuntu -device virtio-serial -chardev socket,path = / tmp / foo,server,nowait,id = foo -device virtconsole,name = jobsfoo,chardev = FOO,姓名= org.fedoraproject.console.foo

    并使用socat / tmp / foo(主机)传输数据

    socat / tmp / hvc0(客人)

    或者您可以在主机上使用套接字程序并在guest虚拟机上使用简单文件i / o

相关问题