RDK S100 底层设备树映射出现错误,把BUS 1 和 2 映射到了 SDK X5 的BUS 4和6,如下图所示,我进行双目相机测试:
可以看到我的双目相机就挂载在1和2的下面,I2C信号正常,但是如果运行官方给的测试132GS型号双目相机的程序就会发现I2C总是去BUS4下面寻找地址,无论如何修改测试程序都会去BUS4下面寻找,发现应该是低层设备树映射错了,可能是继续沿用了X5的?
RDK S100 底层设备树映射出现错误,把BUS 1 和 2 映射到了 SDK X5 的BUS 4和6,如下图所示,我进行双目相机测试:
可以看到我的双目相机就挂载在1和2的下面,I2C信号正常,但是如果运行官方给的测试132GS型号双目相机的程序就会发现I2C总是去BUS4下面寻找地址,无论如何修改测试程序都会去BUS4下面寻找,发现应该是低层设备树映射错了,可能是继续沿用了X5的?
你好!这个问题非常典型,S100 的设备树(DTS)配置确实沿用了部分 X5 的架构,导致 I2C 总线映射与物理引脚不一致。
从你提供的日志来看,核心问题在于:测试程序读取的设备树节点(/proc/device-tree/soc/vcon@0)中硬编码或默认配置了 bus: 4,而你的相机实际物理连接在 I2C 1/2 上。
这是一个设备树节点与驱动配置不匹配的问题。请按以下步骤排查和修复:
mipi_csi 或 hbm)在解析设备树时,默认读取了 X5 架构的节点定义(Bus 4/6),未正确适配 S100 的 I2C 控制器映射。i2cdetect 能看到设备(说明底层 I2C 控制器驱动正常),但上层 Camera 服务读取的 device-tree 节点中 bus 参数错误。vcon@0 节点下的 i2c-bus 属性指向正确的 I2C 控制器。在终端执行以下命令,查看 Camera 服务实际读取的设备树节点内容:
# 查看 vcon@0 节点的详细内容
cat /proc/device-tree/soc/vcon@0/i2c-bus
# 或者查看整个 vcon 节点
ls -l /proc/device-tree/soc/vcon@0/
预期结果:你可能会发现这里显示的值是 <4> 或 <6>(对应 X5 的 Bus ID),而不是你实际的 <1> 或 <2>。
S100 的设备树源文件通常位于内核源码的 arch/arm64/boot/dts/hobot/ 目录下。你需要找到定义 Camera 接口的 .dtsi 文件。
查找相关文件(如果你有 SDK 源码):
# 在源码目录搜索 vcon 或 camera 相关节点
grep -r "vcon@0" kernel/arch/arm64/boot/dts/hobot/
grep -r "i2c-bus" kernel/arch/arm64/boot/dts/hobot/
修改节点映射:
找到类似以下的节点定义(通常在 drobot-s100-soc.dtsi 或板级 dts 文件中):
vcon@0 {
compatible = "hobot,vcon";
i2c-bus = <4>; // ❌ 错误:这是 X5 的配置
mipi-rx-phy = <0>;
// ... 其他配置
};
修改为(根据你的实际连接):
vcon@0 {
compatible = "hobot,vcon";
i2c-bus = <1>; // ✅ 正确:修改为实际的 I2C 控制器 ID
mipi-rx-phy = <0>;
};
注意:S100 的 I2C 控制器 ID 可能与 X5 不同,请查阅 S100 硬件参考手册 确认 I2C1/2 对应的控制器编号。
修改设备树后,不能直接替换 /boot 下的 dtb 文件(会导致启动失败,参考 topic/34466),必须重新打包内核镜像:
# 1. 编译内核和设备树
cd sdk/kernel
make clean
make -j$(nproc)
# 2. 打包镜像(具体脚本视 SDK 版本而定)
cd ../system
./mk_image.sh # 或 ./pack_image.sh
# 3. 烧录新镜像到开发板
# 使用 SD 卡烧录或 fastboot 烧录
烧录完成后,重新运行测试脚本:
# 再次检查设备树节点
cat /proc/device-tree/soc/vcon@0/i2c-bus
# 应该显示 <1> 或 <2>
# 运行相机测试
bash run_cam.sh
如果你暂时无法获取 SDK 源码或重新编译,可以尝试以下风险较高的临时方案:
修改测试脚本:
检查 run_cam.sh 或相关配置文件,看是否有硬编码的 bus_id 参数,尝试手动指定:
# 示例(具体参数需查看脚本源码)
./mipi_test --i2c-bus 1 --mipi-port 0
使用设备树覆盖(DTBO):
创建一个 DTBO 文件覆盖 vcon@0 节点,但需确保 U-Boot 支持加载(参考 topic/34466 的步骤 3)。
为了更精准定位问题,请提供:
cat /etc/hobot_version)如果不确定如何获取源码或修改 DTS,建议在帖子中回复,社区管理员 Marcelo 或 地瓜小助手 可以提供最新的设备树模板文件。
4.0.5系统是没问题的,4.0.4有这个问题,已经解决
感谢反馈!这是一个典型的 SDK 版本差异问题。
| 项目 | 详情 |
|---|---|
| 问题现象 | S100 设备树 I2C 总线映射错误(Bus 1/2 被映射到 X5 的 Bus 4/6) |
| 影响版本 | SDK 4.0.4 |
| 修复版本 | SDK 4.0.5 |
| 根本原因 | 4.0.4 版本 Camera 驱动沿用了 X5 的设备树配置,未正确适配 S100 |
优先升级 SDK
# 检查当前版本
cat /etc/hobot_version
# 如果低于 4.0.5,建议升级到最新版本
遇到类似问题先确认版本
相机开发注意事项
hobot_mipi_cam 支持列表中问题已闭环,如有其他开发问题欢迎继续在社区提问!![]()