回复 jsgaoyang:确认当前设备树并配置双摄像头
您提供的设备树列表非常有用!现在需要确认当前系统使用的是哪个设备树,然后针对性配置。
Step 1: 确认当前使用的设备树
# 查看当前启动使用的设备树
cat /proc/device-tree/compatible | head -5
# 或查看内核启动参数
cat /proc/cmdline | grep -i device
# 查看当前设备树文件名
ls -la /boot/hobot/*.dtb | grep -v backup
通常 RDK X5 默认使用:
x5-rdk.dtb或x5-rdk-v1p0.dtb(RDK 版本)x5-evb-lp4-v2p0.dtb(评估板最新版本)
Step 2: 查看当前 MIPI 摄像头配置
# 查看设备树中 MIPI CSI 配置
cat /proc/device-tree/soc/cam/* 2>/dev/null | head -200
# 或查看 csi 节点
find /proc/device-tree -name "*csi*" -o -name "*mipi*" 2>/dev/null
# 查看 I2C 总线与 MIPI 的映射关系
cat /proc/device-tree/soc/*/i2c*/compatible 2>/dev/null
关键信息:
- 每个 CSI 接口对应的
i2c-bus编号 - 摄像头节点的
reg值(I2C 地址) status是否为"okay"
Step 3: 优先使用官方配置工具(避免手动改设备树)
手动修改设备树有风险,建议先尝试官方工具:
# 1. 查看是否有摄像头配置工具
ls /opt/horizon/bin/*cam* 2>/dev/null
ls /usr/bin/*cam* 2>/dev/null
# 2. 查看 run_tuning.sh 帮助(SC132GS 专用)
bash /opt/horizon/bin/run_tuning.sh --help 2>/dev/null
# 3. 尝试配置双摄像头
# 根据论坛已有案例,这个命令可能配置双路
bash /opt/horizon/bin/run_tuning.sh --run 30 -r 1
# 4. 重启生效
sudo reboot
Step 4: 使用官方 ROS2 包(自动处理设备树)
这是最推荐的方式,无需手动修改设备树:
# 1. 克隆官方仓库
cd ~
git clone https://github.com/D-Robotics/hobot_mipi_cam
cd hobot_mipi_cam
# 2. 查看双目启动文件
ls launch/*dual*
# 3. 查看启动文件内容
cat launch/mipi_cam_dual_channel.launch.py
# 4. 启动双目(根据实际接口调整 channel)
ros2 launch hobot_mipi_cam mipi_cam_dual_channel.launch.py \
left_channel:=0 \
right_channel:=1
参考帖子:X5 调用双目 MIPI 摄像头同时获取图像时第二个摄像头报错误码 -43
Step 5: 手动修改设备树(仅当上述方法无效时)
如果必须手动修改,请按以下步骤:
5.1 备份当前设备树
# 假设当前使用 x5-rdk.dtb
sudo cp /boot/hobot/x5-rdk.dtb /boot/hobot/x5-rdk.dtb.backup
5.2 反编译设备树
# 安装工具
sudo apt install device-tree-compiler
# 反编译
dtc -I dtb -O dts -o x5-rdk.dts /boot/hobot/x5-rdk.dtb
5.3 编辑设备树
nano x5-rdk.dts
查找并修改 MIPI CSI 配置,确保两个接口使用不同的 I2C 总线:
&csi0 {
status = "okay";
i2c-bus = <&i2c6>; // ← 确保与 csi1 不同
camera@30 {
compatible = "sc132gs"; // 或您的摄像头型号
reg = <0x30>;
status = "okay";
};
};
&csi1 {
status = "okay";
i2c-bus = <&i2c7>; // ← 确保与 csi0 不同
camera@30 {
compatible = "sc132gs";
reg = <0x30>;
status = "okay";
};
};
5.4 重新编译并替换
# 编译
dtc -I dts -O dtb -o x5-rdk-new.dtb x5-rdk.dts
# 替换(谨慎!)
sudo cp x5-rdk-new.dtb /boot/hobot/x5-rdk.dtb
# 重启
sudo reboot
关键诊断:为什么两个摄像头都映射到 i2c7?
这是异常现象!请执行以下命令并将输出贴到论坛:
# 1. 查看所有 I2C 总线
i2cdetect -l
# 2. 检测每个 I2C 总线上的设备
for bus in 0 1 2 3 4 5 6 7 8 9; do
echo "=== I2C Bus $bus ==="
i2cdetect -y $bus 2>/dev/null | grep -v "UU"
done
# 3. 查看当前设备树中 MIPI 配置
cat /proc/device-tree/soc/cam/* 2>/dev/null | head -200
# 4. 查看内核日志中的摄像头初始化
dmesg | grep -i "mipi\|csi\|camera\|i2c" | tail -50
# 5. 确认当前使用的设备树
cat /proc/cmdline | grep -i device
建议下一步行动
| 优先级 | 操作 | 说明 |
|---|---|---|
| 执行上述诊断命令 | 确认 I2C 总线映射异常原因 | |
尝试官方 ROS2 包 hobot_mipi_cam |
自动处理设备树配置 | |
使用 run_tuning.sh 工具 |
SC132GS 专用配置工具 | |
| 手动修改设备树 | 仅当前述方法无效时使用 |
参考资源
| 资源 | 链接 |
|---|---|
| 官方 MIPI 摄像头文档 | RDK DOC |
| 官方 ROS2 摄像头包 | hobot_mipi_cam GitHub |
| 社区讨论(SC132GS 双目) | 论坛帖子 |
| 社区讨论(双摄像头错误码 -43) | 论坛帖子 |
请先执行诊断命令并将输出贴回论坛,特别是:
i2cdetect -l输出dmesg | grep -i mipi输出- 当前使用的设备树文件名
- 摄像头型号和连接位置(CSI0/CSI1/CSI2)
这样可以更快定位是硬件连接问题还是设备树配置问题!