android Qemu GPS 模块简明分析
2024-08-23 22:36:11
Android 的 gps module 是 gps.default.so 在system/lib/hw/ 文件夹上, 一般提供gps功能的手机应该实现这个module和真实gps硬件交互
Qemu中gps就是要构造一个gps.default.so, 但这个so并不和真的硬件打交道,仅仅是个模拟接口,其代码在sdk/emulator/gps/gps_qemu.c中
Qemu 容器外部实现了一个gps设备,但这个设备和 Android 交互仅仅能通过管道,所以gps_qemu.c的功能就是同管道打交道。并提供Android须要的gps functions, 例如以下:
static const GpsInterface qemuGpsInterface = {
sizeof(GpsInterface),
qemu_gps_init,
qemu_gps_start,
qemu_gps_stop,
qemu_gps_cleanup,
qemu_gps_inject_time,
qemu_gps_inject_location,
qemu_gps_delete_aiding_data,
qemu_gps_set_position_mode,
qemu_gps_get_extension,
};
Qemu外部GPS通过 QEMU_CHANNEL_NAME 管道给
gps module 发送数据, 格式 NMEA, 所以 gps module 有几个函数负责 parse这些数据的
GPS模块有个要求,就是必须用它的 callback 来创建线程(gps_state_thread)。
而将在的位置信息回调仅仅能在此线程中(gps_state_thread),这是由于framework
须要一个vm可见的java thread, gps_state_thread 会被attach 到 vm 上了,从来回调 java 层函数
state->thread = callbacks->create_thread_cb( "gps_state_thread", gps_state_thread, state );
所以当QEMU_CHANNEL_NAME的位置信息过来不能直接调用callback, 而要在 gps_state_thread 发送到 android framework
因此 gps.default.so 调用 epoll 函数监听文件fd, 实如今 gps_state_thread 中把 location 信息送回
最新文章
- ABP源码分析二十二:Navigation
- Ajax基础(小猫)
- [ASP.NET MVC 小牛之路]02 - C#知识点提要
- iOS与JS交互实战篇(ObjC版)
- HTML 链接
- MEAN实践——LAMP的新时代替代方案(下)
- ComboTree使用
- Android fragment 回调函数改进
- android 如何解决模块之间的通讯的耦合问题
- JSON.parse这个是啥?
- 新唐M0特点分析
- 简单字符串匹配 Brute
- 安卓请求服务器js文件下载到本地,版本号就下载
- dmraid 用法
- Windows Server 2012 R2服务器部署Tomcat JDK、安装Mysql以及将Java项目部署到CVM
- 免登陆下载jdk
- Linux上mount 挂载windows共享文件权限问题
- C# 代码设置DataGrid列属性
- Leha and another game about graph CodeForces - 840B (dfs)
- “全栈2019”Java多线程第十八章:同步代码块双重判断详解