android Qemu GPS 模块简明分析

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 信息送回
时间: 2024-08-25 01:38:44

android Qemu GPS 模块简明分析的相关文章

Android 修改imei、gps等信息分析

之前有朋友希望能修改Android的gps信息,也就是说让其他应用获取gps信息时,取到修改后的信息.一开始听上去感觉挺不靠谱的,后来网上查了下资料,发现还是有人搞定的,主要都是通过古河发布的注入代码,将自己的内容注入到对应应用的内存.在这里,注入的过程就不叙述了,主要说下为什么能修改内容,用获取gps信息来举例. 首先Android中获取gps信息的话主要通过这种方式: 关键代码出现了,主要通过getSystemService()方法来获取句柄,中间省略一系列复杂的查找步骤,,,我们最终找到一

树莓派连接GPS模块

一月份的时候觉得好玩买了树莓派,但是太懒没怎么研究,但最近当初买树莓派时的那个梦想又萦绕心头,决定抽空完成一下当年的计划~ GPS模块是其中很重要的一环,于是在某宝上搜索,找了一家相对便宜也很轻巧的GPS模块,而且这个模块和天线是合体的,非常省空间. 几天后快递来啦,今天有空来鼓捣一下 o(^▽^)o 先来看看这个模块,这是天线的一面 这是组装好之后的效果 我给树莓派安装的是 Raspbian,基于Debian:像 Pidora 的话应该大同小异吧,以下操作均为 Raspbian. 下面来简述一

SEAndroid安全机制对Android属性访问的保护分析

Android系统通过属性暴露设备和运行时信息,并且可以通过设置属性来控制系统行为.因此,属性也像文件一样,是一种需要保护的资源.在启用SEAndroid之前,敏感属性只能被预先设定的进程进行设置.启用SEAndroid之后,敏感属性会进一步被SEAndroid安全策略保护.这样就可以更有效地保护系统属性了.在本文中,我们就详细分析SEAndroid安全机制对Android属性设置保护提供的支持. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在分析SE

GPS模块编程之NMEA0183协议

NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.现在已经成为GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议. 下图是我调试用的GPS芯片,是深圳一家公司生产的.基本上接上天线,供电引脚电压正常的话,就可以通过串口读取GPS数据了.所以GPS编程最主要的是解析数据,要解析数据就得了解协议格式. 下面一组数据

Android平台GPS系统的应用开发

第一部分.前述: Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现.Google的目标是让移动通信不依赖于设备,甚至是平台.出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引力的移动服务,并推广这些产品. 随着城市化的进展和家用轿车的普及.原本根遥远的全球卫星定位系统(Global Position System.6Ps)的

Android电源管理-休眠简要分析

工作需要,需要对这一块深入学习.故在此做一点分析记录,存疑解惑. 一.开篇 1.Linux 描述的电源状态 - On(on)                                                 S0 -  Working - Standby (standby)                              S1 -  CPU and RAM are powered but not executed - Suspend to RAM(mem)        

android设置gps自动开启

1.第一种方法 private void toggleGPS() { Intent gpsIntent = new Intent(); gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); gpsIntent.addCategory("android.intent.category.ALTERNATIV

迅为IMX6开发板支持4G全网通模块GPS模块

IMX6开发板特点 处理器:IMX6开发板支持4G全网通模块GPS模块. 核心板配置:2GB DDR3内存  16GB EMMC 存储,扩展引脚多达320个:运行温度-20 ℃到+80 ℃之间. 核心板连接器:经过大批量检验的核心板连接方式,更优的排列更放心的连接性能. 丰富接口:支持全网通4G模块.GPS模块.WIFI蓝牙.SATA 接口.CAN 总线 千兆以太网.重力加速度计.CAMERA接口等. 设计技术:八层PCB沉金设计,紧凑精致!完美解决电磁兼容,达到成本与性能的完美统一,更加技高一

A53八核RP6818开发板不带GPS模块如何让串口3正常使用

Q:用的荣品A53八核6818开发板,想问下串口3出厂的时候初始化了么? A:GPS用了 . Q:没带WiFi/蓝牙4.0/GPS模块的板子,可以直接用串口3吗? A:把GPS的库不要编译进去 . Q:能具体点说下吗?不太会 . RP6818板子,用了串口3,怎么能正常使用. 我现在用系统自带的串口测试软件,串口不好使,其它口都好使. 主要问题需要解决是 没有GPS模块的板子让串口3能正常使用. A:串口3现在不能正常使用吗? Q:串口3不好使,李工说不把什么库编译进去就能正常使用,我不会弄.