主页 > 人工智能  > 

Yocto+树莓派摄像头驱动完整指南

Yocto+树莓派摄像头驱动完整指南
—— 从驱动配置、Yocto 构建,到 OpenCV 实战

在树莓派上运行摄像头,在官方的 Raspberry Pi OS 可能很简单,但在 Yocto 项目中,需要手动配置驱动、设备树、软件依赖 才能确保摄像头正常工作。本篇文章从 BSP 驱动配置、Yocto 关键配置、OpenCV 实战 讲解如何 让树莓派摄像头在 Yocto 镜像中正常运行,并最终在 屏幕上实时显示画面。


1️⃣ Yocto 关键知识点

在 Yocto 项目中,摄像头的支持依赖:

📌 关键点

BSP(Board Support Package)配置

设备树(Device Tree)确保摄像头硬件被正确注册config.txt 配置 GPU、摄像头固件

内核(Kernel)驱动

bcm2835-v4l2 模块:用于支持 V4L2 摄像头设备libcamera:现代化的摄像头用户空间 APIv4l-utils:V4L2 设备管理工具

镜像构建(Yocto Bitbake)

IMAGE_INSTALL 确保安装 libcamera、ffmpeg、opencvIMAGE_FEATURES 使系统支持 GUI 显示systemd 启动脚本 让摄像头 开机自动运行

用户空间(User Space)

ffmpeg 录制视频v4l2-ctl 进行摄像头测试OpenCV 进行实时图像处理
2️⃣ 驱动配置:设备树 & 内核 📌 2.1 设备树(Device Tree)配置

树莓派的摄像头使用 MIPI CSI-2 接口,在设备树中需要正确注册。

修改 Yocto BSP config.txt,确保系统启用摄像头:

# 让系统自动检测摄像头 camera_auto_detect=1 # 启用 VC4-KMS 显示驱动,支持 `libcamera` dtoverlay=vc4-kms-v3d # 启用摄像头固件支持 start_x=1 # GPU 预留 128MB 内存(摄像头和 GUI 需要) gpu_mem=128

🔹 关键点

camera_auto_detect=1 让树莓派 自动检测摄像头dtoverlay=vc4-kms-v3d 让 libcamera 和 ffmpeg 可以正确访问摄像头start_x=1 让 GPU 能够处理 ISP(图像信号处理)
📌 2.2 加载摄像头驱动

在 Yocto 里,摄像头驱动需要手动加载:

modprobe bcm2835_v4l2

确保 bcm2835_v4l2 被自动加载:

echo "bcm2835_v4l2" >> /etc/modules

🔹 驱动解释

bcm2835-v4l2 是 树莓派的 V4L2(Video4Linux)驱动让 /dev/video0 设备正确生成libcamera 需要 vc4-kms-v3d 和 bcm2835-v4l2 才能正常工作
3️⃣ Yocto 镜像配置

为了让 Yocto 镜像包含摄像头所需的软件,修改 rpi-test-image.bb:

# 继承 rpi-test-image include recipes-core/images/rpi-test-image.bb # 添加 SSH 服务器,方便远程调试 IMAGE_INSTALL:append = " openssh openssh-sftp-server" # 启用 X11 图形界面支持 IMAGE_FEATURES += "x11-base x11-sato splash" # 安装摄像头相关软件 IMAGE_INSTALL += " libcamera libcamera-apps v4l-utils" # 安装 ffmpeg 和 OpenCV IMAGE_INSTALL += " ffmpeg opencv opencv-apps python3-opencv"

🔹 关键点

libcamera 用于摄像头 APIv4l-utils 让 v4l2-ctl 可以测试摄像头opencv 用于 Python 处理摄像头画面ffmpeg 让摄像头 支持录制视频
4️⃣ 编译 Yocto 镜像

完成配置后,运行:

bitbake core-image-sato

然后刷写到 SD 卡:

dd if=tmp/deploy/images/raspberrypi4-64/core-image-sato-raspberrypi4-64.wic of=/dev/sdX bs=4M status=progress
5️⃣ 摄像头驱动调试 📌 5.1 确保 /dev/video0 存在 ls /dev/video*

如果 /dev/video0 不存在,手动加载驱动:

modprobe bcm2835_v4l2 📌 5.2 使用 v4l2-ctl 测试摄像头 v4l2-ctl --list-devices

如果摄像头已检测到,运行:

v4l2-ctl --stream-mmap --stream-count=100 -d /dev/video0
6️⃣ 实战:运行 OpenCV 进行摄像头实时显示

运行以下 Python 代码:

import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break cv2.imshow("摄像头", frame) if cv2.waitKey(1) & 0xFF == ord('q'): # 按 'q' 退出 break cap.release() cv2.destroyAllWindows()

🎥 成功运行后,摄像头画面会在屏幕上实时显示!


7️⃣ 其他摄像头应用 📸 7.1 使用 ffmpeg 拍照 ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -vframes 1 snapshot.jpg 🎥 7.2 录制视频 ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -t 10 output.mp4 📡 7.3 实时推流 ffmpeg -f v4l2 -i /dev/video0 -f mpegts udp://192.168.1.100:1234

在 VLC 中打开:

udp://@192.168.1.100:1234
8️⃣ 结果展示

最终,摄像头成功运行,并在屏幕上实时显示:


🎯 结论

本篇文章完整讲解了 如何在 Yocto 项目中配置树莓派摄像头:

BSP 设备树配置内核驱动 bcm2835-v4l2 加载Yocto 镜像构建v4l2-ctl & ffmpeg 测试OpenCV 实战流媒体推送 ✅ 关键命令总结 任务命令检查 /dev/video0ls /dev/video*测试 v4l2-ctlv4l2-ctl --list-devices拍照ffmpeg -f v4l2 -i /dev/video0 -vframes 1 snapshot.jpg录制视频ffmpeg -f v4l2 -i /dev/video0 -t 10 output.mp4实时显示(OpenCV)python3 script.py

🎯 如果你对 Yocto BSP、摄像头调试有任何问题,欢迎交流!🚀

标签:

Yocto+树莓派摄像头驱动完整指南由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Yocto+树莓派摄像头驱动完整指南