我来帮你分析这个问题。从日志看,系统识别到了 OV5647 的 60fps 配置,但 pipeline 初始化失败了。
先搜索一下社区中相关的解决方案:
问题定位
从你的日志和设备树信息来看,问题已经很明确了:
核心结论
OV5647 能被识别(Found sensor name:ov5647-640x480-60fps on mipi rx csi 0),但 ISP/VSE 流水线初始化失败(hbn_vnode_set_attr failed, ret(-10)),这是典型的设备树缺少 cam_mclk(摄像头主时钟)配置问题。
关键证据
从你的设备树输出来看:
vcon@0、vcon@2有gpio_oth、lpwm_chn、pinctrl-0配置
但没有看到任何 mclk或clock相关的摄像头时钟配置
CSI 节点有时钟配置(csi@3d070000/clocks),但这是 CSI Host 自身的时钟,不是给传感器的 mclk
对比社区已解决的案例(topic/35411),正常工作的设备树应该有类似:
/proc/device-tree/soc/cam/vcon@0/cam_mclk = <...>
解决方案
方案 A:联系官方获取 dtbo 补丁(推荐)
这个问题不是你能通过软件配置解决的,需要官方提供设备树覆盖补丁。请:
-
准备以下信息:
# 1. 系统版本 uname -a cat /etc/issue # 2. 板卡型号(查看 PCB 丝印或购买记录) # RDK X5 V1.0 还是 V2.0? # 3. 摄像头购买渠道 # 是否官方配件列表中的 OV5647?购买链接? # 4. 完整 dmesg 日志 dmesg | grep -E "csi|mipi|mclk|vin|isp|vse|ov5647" > ~/dmesg_full.log -
在社区发帖或联系官方支持:
- 参考帖子:RDK X5 摄像头成像失败 - csi host 设备树缺 cam_mclk
- 说明你的情况:微雪 OV5647,识别成功但报
-10错误 - 附上上面的设备树输出和 dmesg 日志
-
官方会提供 dtbo 补丁,使用方法类似:
# 假设官方提供 ov5647_mclk.dtbo sudo cp ov5647_mclk.dtbo /boot/overlays/ echo "dtoverlay=ov5647_mclk" | sudo tee -a /boot/firmware/config.txt sudo reboot
方案 B:临时验证 30fps 模式
先确认硬件连接是否正常,排除 60fps 带宽问题:
cd /app/cdev_demo/vio2display
sudo ./vio2display -w 1280 -h 960 2>&1 | grep -E "Found|ERROR|Frame|fps"
- 如果 30fps 能工作 → 说明是 60fps 模式的时钟/带宽配置问题
- 如果 30fps 也报
-10→ 确认是 mclk 缺失问题
方案 C:尝试其他 MIPI 接口
如果你的板子有多个 MIPI 接口,可以尝试换到 mipi_host1 或 mipi_host2:
从你的日志看,摄像头当前在 csi 0(mipi_host0),但设备树显示 vcon@0 和 vcon@2 都有 pinctrl 配置。可以尝试:
# 修改 vio2display 源码或使用参数指定 pipe
# 通常需要修改 srcampy.Camera().open_cam(pipe_id, ...)
补充说明
-
为什么 I2C 能读到但 mclk 缺失?
- RDK X5 的 MIPI CSI 不走标准 V4L2 路径,I2C 探测成功只说明物理连接正常
cam_mclk是专门给传感器提供工作时钟的,缺失会导致 ISP/VSE 无法初始化
-
OV5647 60fps 的特殊性
- 640x480@60fps 需要更高的 MIPI 带宽和时钟频率
- 如果 mclk 配置不正确,高帧率模式会优先失败
-
社区已有先例
- topic/35411:imx219 报相同错误,官方提供 dtbo 补丁解决
- topic/35527:RDK X5 的 MIPI CSI 配置特殊性说明
下一步行动
- 先测试 30fps 模式,确认是否只是 60fps 有问题
- 在社区原帖或新帖中补充信息,联系官方获取 dtbo 补丁
- 不要自行修改设备树,RDK X5 的设备树编译需要专门的工具和签名
这个问题不是你的操作问题,是板级 BSP 配置缺失,需要官方支持。