Android2.3 Gsensor分析..sensor service 從android 2.2 到2.3改變很大

由於sensor service 從android 2.2 到2.3改變很大
從java service 轉為native service, 網路上找到這篇code trace, 可作研究基礎


Android2.3 Gsensor分析

以下是我的追蹤code關於開機部分:

frameworks\base\cmds\system_server\library\System_init.cpp
1: 系統開機會執行system_init()來開啟許多services
而我要追蹤的sensorService從2.2到2.3已從java service轉成native service
因此可以看到, 多了一行 SensorService::instantiate();

frameworks\base\services\sensorservice\SensorService.cpp
2. 執行SensorService::instantiate()後, 進入SensorService::onFirstRef()

frameworks\base\services\sensorservice\SensorDevice.cpp
3,更改呼叫SensorDevice方式
走SensorDevice& dev(SensorDevice::getInstance()); 再進入SensorDevice::SensorDevice()

hardware\libhardware\hardware.c
4, 如何找到正確的HAL之.so檔
hw_get_module() 會帶著hardware module的ID進入HAL層找對應的.so檔

hardware\libhardware\hardware.c
5, 如何載入該模組
接著執行status = load(id, path, module); 就是要載入該模組


以下是我的追蹤code關於開啟SensorsTest.apk部分:

frameworks\base\core\java\android\hardware\SensorManager.java
1-1, 上層Aplication會往下層要資料, 首先看一下上層JAVA部分sensors_module_init()

frameworks\base\core\java\android\hardware\SensorManager.java
1-2, 上層Aplication會往下層要資料, 首先看一下上層JAVA部分sensors_data_poll()

frameworks\base\core\jni\android_hardware_SensorManager.cpp
2, 執行sensors_module_init(), 進入JNI 的部分, 先看一下對應表(native<->java)
注意一下: sensors_module_init, sensors_data_poll 這兩個比較重要

frameworks\base\core\jni\android_hardware_SensorManager.cpp
3-1. 進入JNI裡面定義的sensors_module_init()

3-2. 進入JNI裡面定義的sensors_data_poll()


以下為HAL與Kernel之間IOCTL

HAL: vendor\3rdparty\invensense\libsensors\LightSensor.cpp

Kernel: kernel\drivers\misc\Al3000a.c

2 thoughts on “Android2.3 Gsensor分析..sensor service 從android 2.2 到2.3改變很大

發表迴響

Copy Protected by Chetan's WP-Copyprotect.