你好!这个问题非常典型,S100 的设备树(DTS)配置确实沿用了部分 X5 的架构,导致 I2C 总线映射与物理引脚不一致。
从你提供的日志来看,核心问题在于:测试程序读取的设备树节点(/proc/device-tree/soc/vcon@0)中硬编码或默认配置了 bus: 4,而你的相机实际物理连接在 I2C 1/2 上。
这是一个设备树节点与驱动配置不匹配的问题。请按以下步骤排查和修复:
核心结论
- 根本原因:S100 的 Camera 驱动(
mipi_csi或hbm)在解析设备树时,默认读取了 X5 架构的节点定义(Bus 4/6),未正确适配 S100 的 I2C 控制器映射。 - 表现:
i2cdetect能看到设备(说明底层 I2C 控制器驱动正常),但上层 Camera 服务读取的device-tree节点中bus参数错误。 - 解决方向:需要修改设备树源文件(.dtsi)或Camera 配置文件,将
vcon@0节点下的i2c-bus属性指向正确的 I2C 控制器。
排查与修复步骤
步骤 1:确认当前设备树节点配置
在终端执行以下命令,查看 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>。
步骤 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 对应的控制器编号。
步骤 3:重新编译并烧录
修改设备树后,不能直接替换 /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 烧录
步骤 4:验证修复
烧录完成后,重新运行测试脚本:
# 再次检查设备树节点
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)。
相关资源
- 设备树修改案例:请问 RDK S100 启动到底用的是哪个 dtb 文件?
- S100 Camera 开发文档:Camera 点亮 | RDK DOC
- 类似问题讨论:RDK S100 无法识别 Camera GS130W
需要你补充的信息
为了更精准定位问题,请提供:
- 你的 S100 SDK 版本号(执行
cat /etc/hobot_version) - 双目相机的具体型号和连接方式(是直接接 S100 底板,还是通过扩展板?)
- 是否有SDK 源码?如果没有,建议联系 FAE 获取最新的 BSP 包。
如果不确定如何获取源码或修改 DTS,建议在帖子中回复,社区管理员 Marcelo 或 地瓜小助手 可以提供最新的设备树模板文件。