微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > Android L版本上指南针apk读取不到sensor数据的原因分析

Android L版本上指南针apk读取不到sensor数据的原因分析

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
在android L版本上对于msensor来说,常见的不良现象有下面两种:
(1)msensor无数据;
(2)指南针apk读取不到sensor数据.
下面给出这两种现象的可能的主要原因分析。
[SOLUTION]
原因一:gsensor工作不正常
  (1)check 方法:通过sensor 相关apk查看是否能读取到gsensor数据,数据是否正常;
原因二:msensor 驱动加载失败
  (1)check方法:通过adb 命令访问文件夹 /sys/bus/platform/drivers/msensor ,看其中是否有节点存在,并且有数据能够cat到;
                                  ex:adb shell cat  /sys/bus/platform/drivers/msensor/daemon
原因三:selinux权限的原因导致msensor daemon启动失败
  (1)check方法:
                a)在adb 中通过ps命令查看daemon 进程是否在运行
                b)在开机的UART log和mtklog中搜索selinux的log,关键字“avc:  denied” ;
                      ex:  w<12>[   28.713710].(1)[1:init]avc:  denied  { set } for property=ctl.akmd09911 scontext=u:r:msensord:s0 tcontext=ubject_r:ctl_default_prop:s0 tclass=property_service
  (2)selinux权限问题的解决方法:
                请参考:
                [FAQ11484] [SELinux] 如何设置确认selinux 模式
                [FAQ11486] [SELinux Policy] 如何设置SELinux 策略规则 ? 在Kernel Log 中出现"avc: denied" 要如何处理?
                [FAQ11483] 如何快速Debug SELinux Policy 问题
                [FAQ11297] 【SELinux】如何添加SELinux策略规则?
              ex:上面的log对应的solution为:
                a)在alps/device/mediatek/common/sepolicy/property.te文件中增加语句:
                    type ctl_akmd09911_prop, property_type;
                b)在alps/device/mediatek/common/sepolicy/property_contexts文件中增加语句:
                    ctl.akmd09911 u:object_r:ctl_akmd09911_prop:s0
                c)在alps/device/mediatek/common/sepolicy/msensord.te 文件中增加语句:
                    allow msensord ctl_akmd09911_prop:property_service set;
原因四:msensor daemon是32bit,但kernel是64bit,导致daemon启动失败或者无法读取数据
  (1)check 方法:
                a)查看daemon是不是32bit
                     在ubuntu中通过命令: file out/target/product/$(proj)/system/bin/$(daemon_name) 查看daemon是否是32bit
                    ex:


                b)查看kernel是不是64bit
                     在ubuntu中通过命令: file out/target/product/$(proj)/root/init 查看kernel是否是64bit
                    ex:


  (2)解决方法:
               请参考:
                 [FAQ13298] Android L版本中实现32bit userspace程序能通过ioctl()系统调用与64bit的kernel driver通信的方法
原因五:硬件device上没有gyro sensor,但是系统中配置了gyro sensor
  (1)check方法:
              a)检查系统是否配置了gyro sensor:
                    通过sensorList等apk去查看系统是否支持gyro sensor
              b)检查device是否有gyro sensor
                    通过adb 命令访问文件夹 /sys/bus/platform/drivers/gyroscope,看其中是否有节点存在,并且有数据能够cat到;
                       ex:adb shell cat /sys/bus/platform/drivers/gyroscope/chipinfo
  (2)解决方法:
             a)保证让 alps/vendor/mediatek/proprietary/hardware/sensor/hwmsen_chip_info.c文件中gyrosensor的信息被宏包起来:
                                                


              b) 根据实际的硬件是否支持gyrosensor的情况在文件:
                   alps/device/mediatek/$(proj)/ProjectConfig.mk中正确配置宏:CUSTOM_KERNEL_GYROSCOPE;
                     ex: CUSTOM_KERNEL_GYROSCOPE = yes           #support gyrosensor
                           CUSTOM_KERNEL_GYROSCOPE =                 #not support gyrosensor
原因六:project支持gyrosensor,msensor也有数据,但是msensor的数据是错误的
  (1)check方法:
             通过sensor相关的apk查看msensor的数据平方和是否在(100~10000)之间,若数据和不在这个范围内,则msensor数据是错误的。
  (2)解决方法:
             通过画“8”字校准后再测试
备注:
  文档中的
     $(proj):表示所用的project
     $(daemon_name):表示msensor的daemon 名字            

挺好的,我顶

这个FAQ上有的

今天我在MT6735 android5.1 版本上调试A+M,现在发现driver层,重力,磁力都有数据,但是orientation没有数据,用sensorlist.apk 测试,重力,磁力也都有数据,就是orientation没有数据,导致指南针apk不工作。这个估计是什么原因呀?

请问你现在解决了吗?我也是遇到同样的问题

回复,解决了,原来是因为原先有设计硬件陀螺仪,但主板没有贴,而软件上却开启了陀螺仪的宏,导致Msensor的数据异常,去掉陀螺仪的宏就好了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top