如何为高通MSM8909 Android 8.x配置MPU6050传感器HAL支持?
MSM8909 Android 8.x 启用MPU6050传感器问题排查方案
问题背景
搭载MSM8909芯片组的高通开发板,Android 8.x Oreo系统:
- 内核已启用
drivers/input/misc/mpu6050.c驱动,可检测到传感器input设备:[ 62.096904] input: MPU6050-accel as /devices/soc/78b7000.i2c/i2c-3/3-0068/input/input2 [ 62.101460] input: gyroscope as /devices/soc/78b7000.i2c/i2c-3/3-0068/input/input3 - 手动启用传感器后,
getevent可识别到对应input设备,但Android应用无法列出传感器 - 修改
device/qcom/msm8909w/sensors/hals.conf无效,且修改hardware/qcom/sensors/Accelerometer.cpp未触发编译错误,lshal无法找到传感器HIDL服务
排查与解决步骤
1. 确认传感器HAL模块是否被编译部署
修改hardware/qcom/sensors/Accelerometer.cpp未触发编译错误,说明当前编译目标未包含高通传感器HAL模块。需检查编译配置:
- 打开
device/qcom/msm8909w/msm8909w.mk(或对应BoardConfig.mk),确认是否存在如下编译配置:PRODUCT_PACKAGES += sensors.msm8909 - 若没有,添加该配置后重新编译系统,确保高通传感器HAL被编译并打包到镜像中。
2. 配置HIDL服务注册(Android 8.x 必需)
Android 8.x采用HIDL架构,传感器HAL需注册为HIDL服务才能被系统识别:
- 检查
device/qcom/msm8909w/manifest.xml,确认是否包含传感器服务注册项:<hal format="hidl"> <name>android.hardware.sensors</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISensors</name> <instance>default</instance> </interface> <fqname>@1.0::ISensors/default</fqname> </hal> - 若缺失,添加上述配置,确保系统启动时加载对应的传感器HAL服务。
3. 配置传感器与Input设备的映射
高通传感器HAL需明确映射input设备到系统传感器类型,需修改传感器配置文件:
- 打开
device/qcom/msm8909w/sensors/sensor_def_qcomdev.h(或同目录下的类似配置文件),添加MPU6050的加速度计和陀螺仪配置:// 加速度计配置 { .name = "MPU6050-accel", .vendor = "InvenSense", .version = 1, .type = SENSOR_TYPE_ACCELEROMETER, .maxRange = 16.0f, .resolution = 0.000061f, .power = 0.005f, .minDelay = 10000, .fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .flags = SENSOR_FLAG_CONTINUOUS_MODE, .reserved = {0, 0, 0}, }, // 陀螺仪配置 { .name = "gyroscope", .vendor = "InvenSense", .version = 1, .type = SENSOR_TYPE_GYROSCOPE, .maxRange = 2000.0f, .resolution = 0.00763f, .power = 0.006f, .minDelay = 10000, .fifoReservedEventCount = 0, .fifoMaxEventCount = 0, .flags = SENSOR_FLAG_CONTINUOUS_MODE, .reserved = {0, 0, 0}, }, - 配置参数需匹配MPU6050的实际规格,保存后重新编译系统。
4. 检查权限与SELinux规则
- 验证input设备权限:执行命令查看权限,确保
input组可读写:
若权限不足,可修改ls -l /dev/input/event2 /dev/input/event3ueventd.rc添加权限规则:/dev/input/event2 0660 root input /dev/input/event3 0660 root input - 检查SELinux日志,查看是否有传感器HAL访问input设备的拒绝记录:
若存在deny日志,需在SEPolicy中添加允许规则,例如在dmesg | grep avc:device/qcom/sepolicy/common/sensors.te中添加:allow sensors input_device:chr_file rw_file_perms;
5. 验证传感器服务状态
- 系统启动后,查看传感器进程是否运行:
ps | grep sensors - 查看logcat中的传感器启动日志,确认HAL是否成功加载:
logcat | grep -i sensors - 再次执行
lshal命令,确认HIDL服务已注册:lshal | grep sensors
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

