问题分析
根据你的日志,IMU驱动已加载(bmi08x_i2c_driver),设备节点/sys/bus/iio/devices/iio:device1存在,但sensor_init文件打开失败(ret: -1)。这通常意味着驱动初始化未完成或权限/设备树配置问题。
排查步骤
1. 检查驱动加载状态与内核日志
# 查看驱动加载详情
lsmod | grep bmi
dmesg | grep -i bmi08
# 重点检查是否有初始化失败日志
dmesg | grep -i "iio\|imu\|bmi"
预期:应看到bmi08x driver initialized等成功信息。若出现probe failed或i2c transfer error,需检查硬件连接。
2. 验证设备树配置
# 检查I2C5是否启用
cat /proc/device-tree/hobot/x5-rdk-v1p0.dts | grep -A5 "i2c5"
# 确认IMU节点是否存在
cat /proc/device-tree/hobot/x5-rdk-v1p0.dts | grep -A10 "bmi088"
关键点:确保设备树中I2C5状态为okay,且BMI088节点地址正确(0x68/0x69)。
3. 检查sensor_init权限
# 查看文件权限
ls -l /sys/bus/iio/devices/iio:device1/sensor_init
# 尝试手动写入初始化命令(需root)
echo 1 > /sys/bus/iio/devices/iio:device1/sensor_init
若权限不足:
chmod 666 /sys/bus/iio/devices/iio:device1/sensor_init
4. 确认系统镜像版本
# 检查镜像版本
cat /etc/issue
要求:系统版本需≥3.4.1(你当前为3.5.0,符合要求)。
5. 重新加载驱动
# 卸载驱动
sudo rmmod bmi08x_i2c_driver
# 重新加载
sudo modprobe bmi08x_i2c_driver
# 重启IMU服务
sudo systemctl restart imu_sensor
参考解决方案
社区中类似问题(主题33757)的解决步骤:
- 确保跳帽正确(I2C模式)。
- 断电重启(非软重启)以重置I2C总线。
- 使用官方最新驱动(rdk_imu库)。
下一步建议
- 执行上述步骤1和2,提供
dmesg日志和设备树片段。 - 若问题依旧,尝试更换IMU模块或测试其他I2C设备(如
i2cdetect -y 5)。 - 参考飞书文档确认硬件连接图(RB7Ywu2S6iwsVNkjkx7cXsrQn6c)。
需要进一步协助请提供dmesg | grep -i bmi输出结果。