gpt4 book ai didi

linux - 如何使用 virtio 串口设备的 in-qemu API

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:01 34 4
gpt4 key购买 nike

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

我的想法是使用 virtio 串行驱动程序来实现。 guest 应用程序将使用正常的 I/O 函数,例如打开(2)、关闭(2)、读取(2)和写入(2)将“缓冲区”(=我要发送的结构)发送到 virtio串行后端。后端驱动程序将在 Qemu 内部运行,并通过此处描述的 in-qemu 主机 API 接收指向结构的指针:http://www.linux-kvm.org/page/Virtio-serial_API

我现在的问题可能相对微不足道,但我在 Google 上四处张望却找不到任何东西:如何“连接到 qemu”以便我可以使用 virtio 串行主机 API?

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

(注意:我知道我可以选择序列化我的数据,将它发送到主机上的套接字,然后在那里反序列化它,但我想避免序列化开销。如果有一种方法可以使用共享内存区域而不是带有开箱即用的 virtIO 串行设备的套接字,这也是一个选项。

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

最佳答案

你可以使用

启动虚拟机

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,name=org.fedoraproject.console.foo

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

socat/tmp/hvc0( guest )

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

关于linux - 如何使用 virtio 串口设备的 in-qemu API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296283/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com