android上层应用apk到G-sensor driver的大致流程:
Android HAL层,即硬件抽象层,是Google响应厂家“希望不公开源码”的要求推出的新概念
1,源代码和目标位置
源代码: /hardware/libhardware目录,该目录的目录结构如下:
/hardware/libhardware/hardware.c编译成libhardware.so,目标位置为/system/lib目录
/hardware/libhardware/include/hardware目录下包含如下头文件:
hardware.h 通用硬件模块头文件
copybit.h copybit模块头文件
gralloc.h gralloc模块头文件
lights.h 背光模块头文件
overlay.h overlay模块头文件
qemud.h qemud模块头文件
sensors.h 传感器模块头文件
/hardware/libhardware/modules目录下定义了很多硬件模块
这些硬件模块都编译成xxx.xxx.so,目标位置为/system/lib/hw目录
2,Android对于Sensor的API定义在 hardware/libhardware/include/hardware/sensor.h中, 要求在sensor.so提供以下8个API函数
[控制方面]
int (*open_data_source)(struct sensors_control_device_t *dev);
int (*activate)(struct sensors_control_device_t *dev, int handle, int enabled);
int (*set_delay)(struct sensors_control_device_t *dev, int32_t ms);
int (*wake)(struct sensors_control_device_t *dev);
[数据方面]
int (*data_open)(struct sensors_data_device_t *dev, int fd);
int (*data_close)(struct sensors_data_device_t *dev);
int (*poll)(struct sensors_data_device_t *dev, sensors_data_t* data);
[模块方面]
int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const** list);
在Java层Sensor的状态控制由SensorService来负责,它的java代码和JNI代码分别位于:
frameworks/base/services/java/com/android/server/SensorService.java
frameworks/base/services/jni/com_android_server_SensorService.cpp
在Java层Sensor的数据控制由SensorManager来负责,它的java代码和JNI代码分别位于:
frameworks/base/core/java/android/hardware/SensorManager.java
frameworks/base/core/jni/android_hardware_SensorManager.cpp
android framework中与sensor通信的是sensorService.java和sensorManager.java。
sensorService.java的具体通信是通过JNI调用sensorService.cpp中的方法实现的。
sensorManager.java的具体通信是通过JNI调用sensorManager.cpp中的方法实现的。
sensorService.cpp和sensorManger.cpp通过hardware.c与sensor.so通信。其中sensorService.cpp实现对sensor的状态控制,sensorManger.cpp实现对sensor的数据控制。
sensor.so通过ioctl控制sensor driver的状态,通过打开sensor driver对应的设备文件读取G-sensor采集的数据。
android SDK提供了4个类来于sensor通信,分别为 sensor,sensorEvent,sensorEventListener,sensorManager.其中 sensorEventListener用来在sensorManager中注册需要监听的sensor类型。
sensorManager.java提供registrater(),unregistrater()接口供sensorEventListener使用。
sensorManager.java不断轮询从sensor.so中取数据。取到数据后送给负责监听此类型sensor的 sensorEventListener.java。sensorEventListener.java通过在sensorManager.java中注册可以监听特定类型的sensor传来的数据。
系统启动时执行systemProcess,会启动sensorService.java,在sensorService.java的构造函数中调用JNI方法_sensor_control_init()。
sensorService.cpp中相应的方法android_int()会被执行。该函数会调用hardware.c中的方法hw_get_module()此函数又通过调用load()函数在system/lib/hw下查找sensor.so
查找时会根据harware.c中定义好的sensor.*.so的扩展名的顺序查找,找到第一个匹配的时候即停止,并将该sensor.so中定义好的一个全局变量HAL_MODULE_INFO_SYM带回。该变量包含的一个
重要信息是它的一个成员结构变量中包含的一个函数指针open,该指针所指函数会对一个device结构变量赋值,从而带出sensorService.cpp 和sensorManager.cpp与sensor通信所需要的全部信息。
device结构变量有两种变体分别供sensorService.cpp和sensorManaer.cpp使用。其中主要是一些函数指针指向与sensor通信的函数。
sensorService.cpp和sensorManager.cpp在得到HAL_MODULE_INFO_SYM结构后都会调用 sensors.h的inline函数open()通过HAL_MODULE_INFO_SYM的open函数指针将所需的device信息取回。
系统在启动activityManager.java时,它会启动sensorManager.java,它也会调用hardware.c中的方法hw_get_module()带回HAL_MODULE_INFO_SYM。
分享到:
相关推荐
在 Android 上层应用 APK 中,使用 G-sensor driver 需要提供以下 8 个 API 函数: 1. open_data_source() 2. activate() 3. set_delay() 4. wake() 5. data_open() 6. data_close() 7. data_read() 8. data_write...
非常详细的sensor流程整理总结,图文结合。值得从事android hal层开发的人一看。 从这个图来看Sensor的架构还是非常的清淅, 黄色部分表示硬件,它要挂在I2C总线上 红色部分表示驱动,把驱动注册到Kernel的Input ...
Gsensor的调试涉及到从硬件驱动层、硬件抽象层(HAL)到应用层(APK)的多个层面,下面将详细阐述Gsensor的调试方法。 ### Gsensor原理和驱动层调试 Gsensor的原理是测量重力加速度在三个空间轴(x、y、z轴)上的...
本文将详细阐述Android系统的这一核心功能,即如何从Apk(应用程序)通过JNI(Java Native Interface)到HAL(Hardware Abstraction Layer)再到DRV(驱动程序),实现上层应用对硬件资源的有效控制。 首先,我们从...
在移动设备领域,传感器驱动是不可或缺的一部分,它连接硬件传感器与上层应用,确保设备能够准确感知并处理环境变化。本资料主要聚焦于MTK(MediaTek)平台的传感器调试,特别是针对MTK 6575型号中的M-sensor。本...
在Android系统中,上层应用源码是理解整个操作系统如何与用户交互的关键部分。这些源码包含了各种原生应用,如电话、短信、联系人、设置等,它们都是Android生态系统的重要组成部分。Android作为开源项目(AOSP),...
2. HAL接口实现:定义和实现Android规定的HAL接口,使上层的Sensor Service能够调用。 3. Sensor Service配置:在Android系统服务配置文件中注册新的传感器,确保Sensor Service能够发现并管理它们。 4. 应用层适配...
这些函数和结构体的定义为上层应用提供了标准化的访问途径,使得开发者能够轻松地控制摄像头的参数,如分辨率、帧率、色彩空间等。 在FIMC-IS驱动的开发过程中,理解和调试这两个文件至关重要。通过对fimc-is-...
在Android系统中,g_sensor是用于检测设备移动和旋转的关键组件,它提供了关于设备三轴加速度的信息,如X、Y、Z轴的重力加速度。这些数据在游戏、屏幕自动旋转、健康应用等多个场景中至关重要。 移植g_sensor代码...
在Android系统中,上层应用源码是理解整个操作系统如何与用户交互的关键。这份资源包含了相机、日历、蓝牙、计算器、浏览器以及音乐播放器等多个核心应用的源代码,为开发者提供了一个深入学习和定制Android系统的...
Android平台的体系结构包括了操作系统、中间件和应用层,涵盖了从底层硬件驱动到上层用户界面的所有组件。 在Android应用程序开发中,了解Android生命周期至关重要。Android应用中的四大组件——活动(Activity)、...
在Android操作系统中,上层应用程序是指那些用户可以直接与之交互的应用,例如计算器、日历、蓝牙和浏览器等。这些应用程序的源代码对于开发者来说是极其宝贵的资源,因为它们揭示了Android系统如何实现各种功能,...
3. 事件处理:当传感器数据发生变化时,驱动会触发相应的事件,供上层应用处理。 4. 错误处理:处理设备通信或数据解析时可能出现的问题。 5. 协议栈支持:实现HID协议,确保与设备的有效通信。 通过阅读和理解...
Android蓝牙 上层(java-framework)层打开使能流程图,将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发走向,代码流程更加形象生动,能够很快的熟悉Android 蓝牙源码,利于后面问题...
【Gsensor-修改和移植1】这篇文章主要介绍了在Android系统中如何进行Gsensor(加速度传感器)的设备树配置、驱动移植以及模块调试的过程。以下是详细的解析: 1. **设备树简要介绍**: 设备树是嵌入式系统中用于描述...
综上所述,"android-sensor"涉及到的知识点主要包括Android传感器框架、传感器类型、数据处理、数据融合、权限管理、性能优化以及实际编程实践等。理解和掌握这些内容是开发与传感器相关Android应用的基础。
在Android系统中,传感器系统架构的设计是至关重要的,因为它负责收集和处理来自各种传感器的数据,如重力感应器(G-sensor)。以下是关于这个话题的详细解析: 1. **体系结构** Android传感器系统架构主要由四个...
在Android操作系统中,上层应用源码是构成用户界面和交互体验的核心部分。这些源码主要由Google开发,包括了各种系统自带的应用程序,如电话、短信、设置、相机、浏览器等。深入理解这些源码对于开发者来说至关重要...