APK无法识别gsensor问题剖析

APK无法识别gsensor问题的原因有很多,这里只是提供一条思路,解决现有项目遇到的问题。


1、确保驱动层可以工作。

2、打印LOGCAT数据,分析sensorservice流程


1、移植流程:

步骤:
移植gsensor驱动,mc3413,大概步骤如下:

1、移植kernel驱动文件;

2、修改HAL层文件

vendor\sprd\open-source\libs\libsensors_sprd\Acc_Mc3xxx.cpp

3、修改device\sprd\scx35l\sp9820w_6c10\BoardConfig.mk 


USE_SPRD_SENSOR_LIB := true
BOARD_HAVE_ACC := Mc3xxx
BOARD_ACC_INSTALL := 6

4、修改权限:

device\sprd\scx35l\common\sepolicy\file_contexts增加:/dev/mc3xxx u:object_r:sensors_device:s0
device\sprd\scx35l\common\rootdir\root\ueventd.sc8830.rc 增加:/dev/mc3xxx  0660   system  system

现象:


现在kernel部分已经可以工作,通过getevent -rl 可以获取gsensor数据:

add device 1: /dev/input/event0
  name:     "sci-keypad"
add device 2: /dev/input/event4
  name:     "headset-keyboard"
add device 3: /dev/input/event3
  name:     "mc3xxx_accelerometer"
add device 4: /dev/input/event1
  name:     "HALL"
add device 5: /dev/input/event2
  name:     "sprd-gpio-keys"

/dev/input/event3: EV_ABS       ABS_X               fffffff7
/dev/input/event3: EV_ABS       ABS_Y               fffffff4
/dev/input/event3: EV_ABS       ABS_Z               000003e1
/dev/input/event3: EV_SYN       SYN_REPORT          00000000

使用sensor test apk测试加速度传感器无法识别。也尝试了几种其他的手机传感器APK无法识别。

 

 

2、分析与解决

 

①抓取HALL层的log

使用展讯工程模式*#83781#*#*,进入log设置,选择slog,抓取log。

或者直接使用adb 抓取logcat

Z:\project\hk811\idh.code\vendor\sprd\open-source\libs\libsensors_sprd\Acc_Mc3xxx.cpp

里面的log并没有搜到!!

 

继续搜索

Z:\project\hk811\idh.code\vendor\sprd\open-source\libs\libsensors_sprd\sensors.cpp

APK无法识别gsensor问题剖析

APK无法识别gsensor问题剖析

Z:\project\hk811\idh.code\frameworks\native\services\sensorservice\SensorDevice.cpp

APK无法识别gsensor问题剖析

 

②分析sensorservice

Z:\project\hk811\idh.code\frameworks\native\services\sensorservice\SensorService.cpp

APK无法识别gsensor问题剖析

logcat中搜索nuSensorServicestarting

 APK无法识别gsensor问题剖析

发现了并没有找到HAL层的.so文件!

APK无法识别gsensor问题剖析

检查Z:\project\hk811\idh.code\vendor\sprd\open-source\libs\libsensors_sprd\Android.mk

 APK无法识别gsensor问题剖析

使用adb 查找system/lib下面发现了

APK无法识别gsensor问题剖析

 

一般的硬件的hal层都会放在system/lib/hw下面,修改android.mk

APK无法识别gsensor问题剖析

重新编译模块,放到system/lib/hw,问题解决!