[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后挂测不再复现,但问题根因未知。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霁之鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值