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通信的进程信息如下:
原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/272104.html