我想在 KVM+Qemu 设置中的来宾和主机之间交换“复杂”数据(分层结构)。
我的想法是使用 virtio 串行驱动程序来做到这一点。来宾应用程序将使用正常的 I/O 函数,例如 open(2)、close(2)、read(2) 和 write(2) 将“缓冲区”(=我要发送的结构)发送到 virtio串行后端。后端驱动程序将在 Qemu 内部运行并通过此处描述的 in-qemu 主机 API 接收指向结构的指针:http ://www.linux-kvm.org/page/Virtio-serial_API
我现在的问题可能相对微不足道,但我在 Google 上四处寻找,却一无所获:如何“连接到 qemu”以便可以使用 virtio 串行主机 API?
我知道我必须提供一个 init 函数void my_init(void) { virtio_serial_port_qdev_register(&myinfo); }
,并使用 .qemu 向 qemu 注册它device_init(&my_init)
。但是,我不明白如何将我的模块与 qemu 链接?我是否必须将我的源文件添加到 qemu 代码库和 makefile 并重新编译 qemu?或者我可以单独编译它并使用一些神奇的 qemu 命令行选项来加载它吗?还是完全不同的东西?
(注意:我知道我可以选择序列化我的数据,将其发送到主机上的套接字,然后在那里反序列化,但我想避免序列化开销。如果有办法使用共享内存区域代替带有开箱即用的 virtIO 串行设备的套接字,这也可能是一个选项)。
谢谢大家的帮助!克里斯托夫