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 cv2cap = cv2.VideoCapture(0)while True:ret, frame = cap.read()if not ret:breakcv2.imshow("摄像头", frame)if cv2.waitKey(1) & 0xFF == ord('q'): # 按 'q' 退出breakcap.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/video0 | ls /dev/video* |
测试 v4l2-ctl | v4l2-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 构建,到 OpenCV 实战 在树莓派上运行摄像头,在官方的 Raspberry Pi OS 可能很简单,但在 Yocto 项目中,需要手动配置驱动、设备树、软件依赖 才能确保摄像头正常工作。本篇文章从 BSP 驱动配置、Yocto 关键…...
swift 开发效率提升工具
安装github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安装swiftformat for xcode brew install swiftformatXcode Swift File代码格式化-SwiftFormat...
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程的演示都将在 Flink CDC CLI 中进行,无需一行 Java/Scala 代码,也无需安装 IDE。 这篇教程将展示如何基于 Flink CDC YAML 快速构建 MySQL 到 Kafka 的 Streaming ELT 作业,包含整库同步、表结构变更同步演示和关键参数介绍。 准备阶段…...
Hue UI展示中文
个人博客地址:Hue UI展示中文 | 一张假钞的真实世界 如果使用开发分支代码如master分支)编译安装,需要自己编译语言文件。例如Hue安装目录为“/opt/hue”,则安装后执行以下命令: $ cd /opt/hue $ make locales 如果…...
(十 一)趣学设计模式 之 组合模式!
目录 一、 啥是组合模式?二、 为什么要用组合模式?三、 组合模式的实现方式四、 组合模式的优缺点五、 组合模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类
文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…...
Python学习第十八天之深度学习之Tensorboard
Tensorboard 1.TensorBoard详解2.安装3.使用4.图像数据格式的一些理解 后续会陆续在词博客上更新Tensorboard相关知识 1.TensorBoard详解 TensorBoard是一个可视化的模块,该模块功能强大,可用于深度学习网络模型训练查看模型结构和训练效果(…...
Redis安装及其AnotherRedisDesktopManagera安装使用
一、Redis安装 1. 下载Redis安装包 通过网盘分享的文件:Redis 链接: https://pan.baidu.com/s/1elAT8mk3EIoYQQ3WoVVoNg?pwd7yrz 提取码: 7yrz 2. 解压Redis安装包 下载完成后,将Redis安装包解压到一个指定的目录,例如:C:\Re…...
C# dll文件的反编译获取源码
目录 前言操作流程结论 前言 上一篇文章介绍了将C# cs类文件加密为dll文件,在此给大家写一篇关于反编译dll文件的文章。 操作流程 首先,我们需要准备一个C#反编译工具,我这里用的是免费的软件JetBrains dotPeek,类似的有很多&am…...
大语言模型学习--LangChain
LangChain基本概念 ReAct学习资料 https://zhuanlan.zhihu.com/p/660951271 LangChain官网地址 Introduction | 🦜️🔗 LangChain LangChain是一个基于语言模型开发应用程序的框架。它可以实现以下应用程序: 数据感知:将语言模型…...
Spark内存迭代计算
一、宽窄依赖 窄依赖:父RDD的一个分区数据全部发往子RDD的一个分区 宽依赖:父RDD的一个分区数据发往子RDD的多个分区,也称为shuffle 二、Spark是如何进行内存计算的?DAG的作用?Stage阶段划分的作用? &a…...
Python之参数星号(*)使用笔记
背景 在学习python时发现方法调用和方法定义会经常发现有带星号的标记,为了弄明白是怎么使用的。特此做个笔记。 一、参数符号对比速查表 符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组…...
一文掌握 Scrapy 框架的详细使用,包括实战案例
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Scrapy 简介2. Scrapy 的核心组件3. 安装 Scrapy4. 创建 Scrapy 项目4.1 创建项目4.2 创建 Spider5. 编写 Spider5.1 定义 Item5.2 编写 Spider 逻辑6. 运行 Scrapy 爬虫6.1 运行爬虫6.2 保存爬取数据7. Scrapy 的高…...
【Mac】git使用再学习
目录 前言 如何使用github建立自己的代码库 第一步:建立本地git与远程github的联系 生成密钥 将密钥加入github 第二步:创建github仓库并clone到本地 第三步:上传文件 常见的git命令 git commit git branch git merge/git rebase …...
【MySQL篇】数据库基础
目录 1,什么是数据库? 2,主流数据库 3,MySQL介绍 1,MySQL架构 2,SQL分类 3,MySQL存储引擎 1,什么是数据库? 数据库(Database,简称DB…...
SpringBoot项目注入 traceId 来追踪整个请求的日志链路
SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排查问题的时候,可以迅速根据 traceId 查找到相关请求的日志,特别是在生产环境的时候,用户可能只提供一个错误截图,我们作为开发…...
【Block总结】SAFMN,空间自适应调制与局部特征增强的协同设计|即插即用
论文信息 标题:Spatially-Adaptive Feature Modulation for Efficient Image Super-Resolution论文链接:https://arxiv.org/pdf/2302.13800代码与模型:https://github.com/sunny2109/SAFMN 创新点 空间自适应特征调制(SAFM&…...
Python爬虫:一文掌握PyQuery模块
文章目录 1. PyQuery 简介2. PyQuery 的安装2.1 安装 PyQuery2.2 安装依赖库3. PyQuery 的基本使用3.1 初始化 PyQuery 对象3.2 选择元素3.3 获取元素内容3.4 遍历元素4. PyQuery 的高级用法4.1 过滤元素4.2 查找子元素4.3 获取属性值4.4 修改元素4.5 添加和删除元素4.6 遍历文…...
LearnOpenGL之Shader编程用算法绘画
———————————————————— 前序 ——————————————————— AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合: Github地址:GitHub - wangyongyao1989/AndroidLearnOpenGL: OpenGL基础及运用 系列文章ÿ…...
如何使用Spring Boot框架整合Redis:超详细案例教程
目录 # 为什么选择Spring Boot与Redis整合? 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合? 将Spring Boot与Redis整合可以充分利…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
