QEMU pipe设备分析
1. QEMU pipe介绍
Qemu-pipe是一个通用的虚拟设备,完成guest OS和emulator的通信功能。它为通信提供了四种服务:
- Tcp
- Unix
- Opengles
- Qemud
Qemud也提供了一些子服务
- "gsm" service
- "gps" service
- "hw-control" / "control" service
- "sensors" service
传输数据格式如下:
- pipe:<name>
- pipe:<name>:<arguments>
Qemud service信息:
- pipe:qemud:<arguments>
数据流向分析:
QEMU pipe和goldfish pipe关系如下图
2. goldfish pipe初始化
文件:external\qemu\android-qemu2-glue\qemu-setup.cpp
main_impl qemu_android_emulation_early_setup qemu_android_pipe_init goldfish_pipe_set_service_ops //goldfishpipe对androidpipe service的调用 android_pipe_set_hw_funcs //androidpipe service对goldfishpipe的调用 android_pipe_set_hw_virtio_funcs android::AndroidPipe::initThreading //启动androidpipe服务, //设置定时器调用performDeviceOperation
qemud初始化
qemu侧
main_impl qemu_android_emulation_early_setup android_qemu2_qemud_init android_qemud_get_serial_line android_qemud_init _android_qemud_serial_init //老式接口,为适应guest操作 _android_qemud_pipe_init //androidpipe中添加qemud服务,和qemud service的调用函数
guest侧
文件:drivers\platform\goldfish\goldfish_pipe.c
module_platform_driver(goldfish_pipe_driver)
goldfish_pipe_probe
devm_ioremap
goldfish_pipe_device_v2_init
init_miscdevice
最终会在guest中产生一个设备:
虚拟机内部,通过读写该设备与emulator通信;qemu侧注册了对应的事件,发送给对应的主机侧设备或模拟设备。
使用goldfish_pipe通信的进程信息如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了