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整合可以充分利…...
美国签证预约机器人:3分钟掌握24小时智能抢号终极方案
美国签证预约机器人:3分钟掌握24小时智能抢号终极方案 【免费下载链接】us-visa-bot US Visa Bot 项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot 还在为美国签证面试预约的漫长等待而烦恼吗?面对有限的面试名额和激烈的竞争环境&…...
网页端嵌入 Agent 对接前端方案
本文将深入探讨「网页端嵌入AI」的核心概念与实战技巧,帮助你快速掌握关键要点。让我们开始吧! 网页端嵌入 Agent 对接前端方案 1. 引言 当前前端项目正从被动展示走向主动交互,AI Agent 嵌入网页端可自动化 UI 操作、优化布局并辅助编码。…...
软考高项案例分析9:项目采购管理
软考高项案例分析9:项目采购管理 一、项目采购管理过程 1、规划采购管理; 2、实施采购管理; 3、控制采购; 二、案例分析知识点 1. 采购管理的过程及定义作用 规划采购管理:是记录项目采购决策、明确采购方法,及识别潜在卖方的过程。作用:确定是否从项目外部获取货物…...
毕业设计精选【芳心科技】无人机定点投放控制
实物效果图:实现功能:本次设计的目的是实现无人机在空中投放物品的落点计算,系统的核心是单片机,它控制本系统的各种功能,所以它的选择是非常重要的,在本设计中选用的是GD32F103C8T6单片机,这款…...
Linux 进程从入门到实战(一)
.个人主页:晓风飞专栏:数据结构|Linux|C语言路漫漫其修远兮,吾将上下而求索文章目录进程为什么要存在内存??操作系统进程什么是进程?PCB(进程控制块)操作系统如何管理进程࿱…...
对比使用Taotoken前后在模型API费用支出上的月度观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比使用Taotoken前后在模型API费用支出上的月度观察 作为一名个人开发者,我日常的开发工作离不开大语言模型的辅助&am…...
鸿蒙 PC 跨设备拖拽:实现原理 + 实战代码
网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…...
Python小白也能学会!3个月蜕变AI应用开发者的收藏秘籍
本文针对程序员,特别是只会CRUD的开发者,提供了学习大模型的实用路径。文章强调大模型应用开发是“低门槛、高上限”的方向,并给出了一个12步学习路线,涵盖Python基础、Transformer理解、提示词工程、RAG等,以及LangCh…...
OpenAvatarChat终极指南:5分钟打造你的专属AI数字人
OpenAvatarChat终极指南:5分钟打造你的专属AI数字人 【免费下载链接】OpenAvatarChat 项目地址: https://gitcode.com/gh_mirrors/op/OpenAvatarChat 想象一下,你正在开发一个智能客服系统,需要让数字人能够自然流畅地与用户对话。传…...
实测Taotoken在多模型调用下的延迟与稳定性体感
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 实测Taotoken在多模型调用下的延迟与稳定性体感 1. 引言 在集成多个大模型API到实际业务或开发工作流时,开发者通常需…...
