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:s0device\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
Z:\project\hk811\idh.code\frameworks\native\services\sensorservice\SensorDevice.cpp
②分析sensorservice
Z:\project\hk811\idh.code\frameworks\native\services\sensorservice\SensorService.cpp
logcat中搜索nuSensorServicestarting
发现了并没有找到HAL层的.so文件!
检查Z:\project\hk811\idh.code\vendor\sprd\open-source\libs\libsensors_sprd\Android.mk
使用adb 查找system/lib下面发现了
一般的硬件的hal层都会放在system/lib/hw下面,修改android.mk
重新编译模块,放到system/lib/hw,问题解决!