当前位置: 首页 > news >正文

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

—— 从驱动配置、Yocto 构建,到 OpenCV 实战

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


1️⃣ Yocto 关键知识点

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

📌 关键点

  1. BSP(Board Support Package)配置

    • 设备树(Device Tree)确保摄像头硬件被正确注册
    • config.txt 配置 GPU、摄像头固件
  2. 内核(Kernel)驱动

    • bcm2835-v4l2 模块:用于支持 V4L2 摄像头设备
    • libcamera:现代化的摄像头用户空间 API
    • v4l-utils:V4L2 设备管理工具
  3. 镜像构建(Yocto Bitbake)

    • IMAGE_INSTALL 确保安装 libcameraffmpegopencv
    • IMAGE_FEATURES 使系统支持 GUI 显示
    • systemd 启动脚本 让摄像头 开机自动运行
  4. 用户空间(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-v3dlibcameraffmpeg 可以正确访问摄像头
  • 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-v3dbcm2835-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 用于摄像头 API
  • v4l-utilsv4l2-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 项目中配置树莓派摄像头

  1. BSP 设备树配置
  2. 内核驱动 bcm2835-v4l2 加载
  3. Yocto 镜像构建
  4. v4l2-ctl & ffmpeg 测试
  5. OpenCV 实战
  6. 流媒体推送

✅ 关键命令总结

任务命令
检查 /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 构建,到 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是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;…...

Redis安装及其AnotherRedisDesktopManagera安装使用

一、Redis安装 1. 下载Redis安装包 通过网盘分享的文件&#xff1a;Redis 链接: https://pan.baidu.com/s/1elAT8mk3EIoYQQ3WoVVoNg?pwd7yrz 提取码: 7yrz 2. 解压Redis安装包 下载完成后&#xff0c;将Redis安装包解压到一个指定的目录&#xff0c;例如&#xff1a;C:\Re…...

C# dll文件的反编译获取源码

目录 前言操作流程结论 前言 上一篇文章介绍了将C# cs类文件加密为dll文件&#xff0c;在此给大家写一篇关于反编译dll文件的文章。 操作流程 首先&#xff0c;我们需要准备一个C#反编译工具&#xff0c;我这里用的是免费的软件JetBrains dotPeek&#xff0c;类似的有很多&am…...

大语言模型学习--LangChain

LangChain基本概念 ReAct学习资料 https://zhuanlan.zhihu.com/p/660951271 LangChain官网地址 Introduction | &#x1f99c;️&#x1f517; LangChain LangChain是一个基于语言模型开发应用程序的框架。它可以实现以下应用程序&#xff1a; 数据感知&#xff1a;将语言模型…...

Spark内存迭代计算

一、宽窄依赖 窄依赖&#xff1a;父RDD的一个分区数据全部发往子RDD的一个分区 宽依赖&#xff1a;父RDD的一个分区数据发往子RDD的多个分区&#xff0c;也称为shuffle 二、Spark是如何进行内存计算的&#xff1f;DAG的作用&#xff1f;Stage阶段划分的作用&#xff1f; &a…...

Python之参数星号(*)使用笔记

背景 在学习python时发现方法调用和方法定义会经常发现有带星号的标记&#xff0c;为了弄明白是怎么使用的。特此做个笔记。 一、参数符号对比速查表 符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.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建立自己的代码库 第一步&#xff1a;建立本地git与远程github的联系 生成密钥 将密钥加入github 第二步&#xff1a;创建github仓库并clone到本地 第三步&#xff1a;上传文件 常见的git命令 git commit git branch git merge/git rebase …...

【MySQL篇】数据库基础

目录 1&#xff0c;什么是数据库&#xff1f; 2&#xff0c;主流数据库 3&#xff0c;MySQL介绍 1&#xff0c;MySQL架构 2&#xff0c;SQL分类 3&#xff0c;MySQL存储引擎 1&#xff0c;什么是数据库&#xff1f; 数据库&#xff08;Database&#xff0c;简称DB&#xf…...

SpringBoot项目注入 traceId 来追踪整个请求的日志链路

SpringBoot项目注入 traceId 来追踪整个请求的日志链路&#xff0c;有了 traceId&#xff0c; 我们在排查问题的时候&#xff0c;可以迅速根据 traceId 查找到相关请求的日志&#xff0c;特别是在生产环境的时候&#xff0c;用户可能只提供一个错误截图&#xff0c;我们作为开发…...

【Block总结】SAFMN,空间自适应调制与局部特征增强的协同设计|即插即用

论文信息 标题&#xff1a;Spatially-Adaptive Feature Modulation for Efficient Image Super-Resolution论文链接&#xff1a;https://arxiv.org/pdf/2302.13800代码与模型&#xff1a;https://github.com/sunny2109/SAFMN 创新点 空间自适应特征调制&#xff08;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练习集合&#xff1a; Github地址&#xff1a;GitHub - wangyongyao1989/AndroidLearnOpenGL: OpenGL基础及运用 系列文章&#xff…...

如何使用Spring Boot框架整合Redis:超详细案例教程

目录 # 为什么选择Spring Boot与Redis整合&#xff1f; 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合&#xff1f; 将Spring Boot与Redis整合可以充分利…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...