[android][sensor]如何禁用sensor\软摘除器件 以确定问题是否由sensor引起

当设备出现bug时,考虑到有可能是sensor引起,也有可能是其他器件引起的时候(一般是功耗相关的问题),我们需要禁用sensor来查看是否确为sensor引起,若确定是sensor引起的,还需要确定为哪一个sensor器件引起的,这时可以用摘除各个器件来定位问题。

如何禁用sensor

禁用sensor hal层

结果:sensor list 为空,adsp/slpi sensor 仍然会初始化,modem侧的子系统仍然可以获取sensor数据
禁用方法(bat脚本):注册表禁用sensor

adb root
adb wait-for-device
adb remount
adb shell "echo disable_sensors > /persist/sensors/registry/registry/sensors_settings"
adb shell sync
adb reboot

android 9 的禁用指令为:

adb shell "echo disable_sensors > /mnt/vendor/persist/sensors/sensors_settings"

禁用sensor core

该方法也可用于软移除单个sensor器件,去除对应的json文件即可
结果:sensor 驱动 init 失败,adsp/slpi仍运行
禁用方法(bat脚本):删除json文件及其生成的文件

adb root
adb wait-for-device
adb remount
adb shell rm -rf /persist/sensors/registry/registry
adb shell rm -rf /persist/sensors/registry/config
adb shell rm -rf /vendor/etc/sensors/config
adb shell sync
adb reboot

android 9 的删除指令为:

adb shell rm /vendor/etc/sensors/config/*.json
adb shell rm /mnt/vendor/persist/sensors/registry/config/*.json
adb shell rm /mnt/vendor/persist/sensors/registry/registry/*

禁用sensor

结果:sensor相关全部移除
禁用方法:禁用sensor daemon & 删除adsp/slpi固件

ap侧禁用sensor daemon:

LINUX/android/device/qcom/common/rootdir/etc/init.qcom.sensors.sh文件中对以下进行注释:

//start_sensor
删除adsp/slpi固件:
adb root
adb wait-for-device
adb shell mount -o rw,remount /firmware
adb shell rm /firmware/image/slpi*
adb shell sync
adb reboot

android 9 以及部分芯片的删除指令为:

adb shell mount -o rw,remount /vendor/firmware_mnt
adb shell rm -rf /vendor/firmware_mnt/image/slpi

此外,SDM670上需要同时删除audio和SEE中的adsp*固件

禁用sensor线程

结果:不启动sensor线程,但是subsystem子系统依旧运行
禁用方法(bat脚本):禁用sensor 线程
在ssc/utils/osa/hexagon_root_pd/sns_root_pd_init.c中做如下修改:

void sns_root_pd_init(void)
{
#if 0
PD_MON_RESTART restart = PD_MON_RESTART_ALWAYS;
(void)pd_mon_spawn(&restart, SENSOR_IMG_NAME);
+#endif
}

在ssc/utils/osa/hexagon_user_pd/slpi/sns_user_pd_init.c中做如下修改:

sns_rc sns_user_pd_init()
{
+#if 0
if(false == sns_init_done)
{}
+endif
return SNS_RC_FAILED;
}

如何软摘除sensor

去除单个sensor的注册

可以参考上文禁用sensor的部分,去除相关json及其注册表文件即可。

去除单个sensor的编译

在adsp_proc/ssc/chipset/por.py中,去除需要去除的器件

 include_sensor_vendor_libs.extend(['lsm6dso',
                                    'sns_mmc56x3x',
                                    'sns_ltr311'])

不要为了图方便而只是注释掉某个器件,如需编译去除单个器件后调试,请备份后将器件删除而不是注释,否则可能导致所有器件都挂载不上。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android中的Sensor驱动框架是用于管理和处理各种传感器数据的件框架。它的主要功能是提供一种标准化的接口,使应用程序可以轻松地访问和使用各种传感器。 Android中的Sensor驱动框架由以下两个主要组件组成: 1. Sensor HAL(硬件抽象层):这是Android操作系统与各种硬件传感器之间的接口。它定义了一组标准API,使Android可以与各种不同类型的传感器交互。 2. Sensor Manager:这是一个Android系统服务,它提供了一组API,使应用程序可以轻松地获取和使用各种传感器数据。它还负责管理各种传感器的注册和注销,以及传感器数据的传递和处理。 在Android中,可以使用以下几种传感器: 1. 加速度计(Accelerometer):用于测量设备的加速度。 2. 陀螺仪(Gyroscope):用于测量设备的旋转速度和方向。 3. 磁力计(Magnetometer):用于测量设备的磁场。 4. 温度传感器(Temperature Sensor):用于测量设备的温度。 5. 光传感器(Light Sensor):用于测量设备的光线强度。 6. 压力传感器(Pressure Sensor):用于测量环境的气压。 7. 重力传感器(Gravity Sensor):用于测量设备的重力加速度。 8. 线性加速度计(Linear Acceleration Sensor):用于测量设备在三个轴向上的线性加速度。 9. 旋转矢量传感器(Rotation Vector Sensor):用于测量设备的旋转矢量。 以上是Android中常用的传感器类型,每种传感器都有其特定的用途和应用场景。在开发Android应用程序时,可以根据需要选择合适的传感器来获取所需的数据,并使用Sensor驱动框架来管理和处理这些数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霁之鸢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值