我是靠谱客的博主 勤奋冥王星,最近开发中收集的这篇文章主要介绍[Android][sensor]sensor全部没有挂载上——可能性一:时序问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在生产版本跑老化时出现sensor项全部失败的问题,重启后概率性恢复。

老化通过framework接口getDefaultSensor获取,如果返回值为null,则该项失败,确认是sensor问题。

通过导出android log,搜索关键字num_sensors发现num_sensors=0,sensor没有挂载上,重启后概率恢复。

出现该情况时,终端输入

dumpsys sensorservice

出现下述打印:

No Sensors on the device
devInitCheck : 0 

通常情况下,当system boot起来时,首先start sensors-hal 然后start sensorservice,在start sensorservice时get_sensors_list。
但是当问题发生时,sensors-hal 没起来(ap log里没有相关init部分),只有sensorservice start,所以 get sensor list 是 0。是时序出现问题了。

进行以下尝试

1. 尝试延长sensorservice启动时间。

修改sensorservice启动时间,参考路径
vendor/qcom/proprietary / sensors-see/sensors-hal/framework/sensor_factory.cpp

static const int MANDATORY_SENSOR_WAIT_TIME_SEC = 20;

压测,失败。

2. 怀疑sensor在hal层未起来,然而hal层无log,需要进行场景复现。

增加hal层初始化的相关log打印,更改老化apk使其在首次测试失败时停止测试。

在场景复现的时候,进行如下操作:

ps -ef |grep sensor 

找到sensor hidl的pid,kill掉后查看log,发现hal层是有相关初始化的,但是kill掉后再dumpsys sensorservice 还是为0。

绕过hal层使能acc以及其他器件,即执行命令

adb shell ssc_drva_test -sensor=accel -duration=20 -sample_rate=100

全部pass,表明adsp侧sensor已经起来了。

3. 将sensor service.rc从1.0改为2.0

修改vendor/xxx/libhardware/sensors/1.0/vendor.xxx.hardware.sensors@1.0-service.rc

    group system wakelock input
    capabilities BLOCK_SUSPEND
    rlimit rtprio 10 10

压测,失败。

4.提高开机时sensor服务启动的优先级

修改vendor/xxx/libhardware/sensors/1.0/vendor.xxx.hardware.sensors@1.0-service.rc

      class main

压测pass。

后续

class main改为class core后会出现另一种sensor挂载不上的情况:刷版本后(同一版本)小概率会挂载不上,重启不会恢复正常,重刷版本会恢复正常。该情况下,persist/sensors/sensors_list.txt里边只有一个resampler,绕过hal层使能acc,即执行命令

adb shell ssc_drva_test -sensor=accel -duration=20 -sample_rate=100

若pass则表明adsp侧sensor已经起来了,修改为class main后挂测不再复现,但问题根因未知。

根因知晓后将更新该篇文章。

最后

以上就是勤奋冥王星为你收集整理的[Android][sensor]sensor全部没有挂载上——可能性一:时序问题的全部内容,希望文章能够帮你解决[Android][sensor]sensor全部没有挂载上——可能性一:时序问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部