树莓派 4B 摄像头原理、驱动及 Yocto 项目集成详解

1. 引言

树莓派 4B 配备了专用的 MIPI CSI-2 接口,可用于连接官方的 Raspberry Pi Camera Module 以及第三方 CSI 兼容摄像头模块。本博文将全面介绍 树莓派摄像头的工作原理、底层驱动、关键技术点,并结合 Yocto 项目 讲解如何在自定义 Linux 镜像中正确集成和使用摄像头。

在这里插入图片描述

2. 树莓派 4B 摄像头硬件架构

树莓派 4B 摄像头系统主要由以下组件构成:

  • MIPI CSI-2 接口:树莓派 4B 提供一个 15-pin FPC 连接器,用于连接官方摄像头模块。
  • 摄像头模组:如 Raspberry Pi Camera Module V1/V2/HQ,它们采用 Sony IMX 系列传感器。
  • VideoCore IV GPU:树莓派的 GPU 负责图像处理,加速 ISP(Image Signal Processing)。
  • Broadcom SoC:主处理器(如 BCM2711)用于调度数据和运行图像处理应用。
  • I²C 总线:用于摄像头和主控板之间的控制通信(设置曝光、增益等)。
  • MIPI DSI/CSI 驱动:用于数据传输,传感器通过 MIPI 协议传输图像数据至主处理器。

3. 树莓派 4B 摄像头驱动架构

树莓派摄像头的驱动主要依赖于 V4L2(Video4Linux2)libcamera 生态。

3.1 树莓派摄像头驱动堆栈

树莓派使用以下驱动模块支持摄像头:

  • bcm2835-v4l2(传统 V4L2 驱动)
  • vc-sm-cma(用户空间驱动)
  • libcamera(新一代摄像头管理框架)
传统 V4L2 驱动(bcm2835-v4l2)

该驱动基于 V4L2 框架,可通过 /dev/video0 设备访问摄像头。

加载驱动:

sudo modprobe bcm2835-v4l2

查看设备:

ls /dev/video*

使用 v4l2-ctl 命令测试摄像头:

v4l2-ctl --list-formats-ext
libcamera 生态

libcamera 是树莓派推荐的摄像头驱动框架,提供更好的 ISP 支持。

安装 libcamera 并测试:

sudo apt install libcamera-apps
libcamera-hello

3.2 树莓派 4B 摄像头设备树(Device Tree)

config.txt 启用摄像头支持:

dtoverlay=vc4-kms-v3d
dtoverlay=imx219

查看设备树信息:

cat /proc/device-tree/soc/csi@7e800000/status

4. 在 Yocto 项目中集成树莓派摄像头

4.1 添加 meta-raspberrypi

bblayers.conf 添加:

BBLAYERS += "${TOPDIR}/../meta-raspberrypi"

4.2 配置摄像头支持

local.conf 中启用 V4L2 和 libcamera:

IMAGE_INSTALL:append = " v4l-utils libcamera libcamera-apps"
DISTRO_FEATURES:append = " v4l2"

4.3 编译 Yocto 镜像

bitbake core-image-minimal

5. 在 Yocto 系统上测试摄像头

5.1 运行 v4l2-ctl 测试

v4l2-ctl --device /dev/video0 --stream-mmap --stream-count=100

5.2 运行 libcamera 测试

libcamera-hello

6. PACKAGECONFIG 详解

PACKAGECONFIG 允许灵活配置 Yocto 组件。例如,在 v4l-utils 里可以使用:

PACKAGECONFIG ??= ""
PACKAGECONFIG[qv4l2] = ",-Dqv4l2=disabled"
PACKAGECONFIG[qvidcap] = ",-Dqvidcap=disabled"
PACKAGECONFIG[v4l2-tracer] = ",-Dv4l2-tracer=disabled,json-c"

解释:

  • qv4l2 是 V4L2 图形调试工具,默认被禁用。
  • qvidcap 是视频捕获工具,默认被禁用。
  • v4l2-tracer 是 V4L2 API 调试工具,默认被禁用。

如果想启用 qv4l2,可以在 local.conf 添加:

PACKAGECONFIG:append = " qv4l2"

然后重新构建:

bitbake v4l-utils

7. 结论

本教程详细介绍了 树莓派 4B 摄像头的硬件、驱动架构、设备树、Yocto 集成方式,并提供了完整的测试流程。你可以根据实际需求,选择 V4L2 或 libcamera 方案,在 Yocto 项目中构建支持摄像头的 Linux 镜像,并高效管理摄像头应用。

如果你有更多需求,欢迎留言讨论!

参考资源链接:[树莓派4B配置:Ubuntu Yocto移植与SWUPDATE系统升级](https://wenku.csdn.net/doc/2qx1fyrv3b?utm_source=wenku_answer2doc_content) 移植uboot和使用yocto项目树莓派4B进行系统bringup,同时集成swupdate进行系统升级是一个高度专业化的任务,涉及到嵌入式Linux系统的定制和管理。《树莓派4B配置:Ubuntu Yocto移植与SWUPDATE系统升级》文档详细阐述了这一过程,接下来,我们将根据文档提供一些具体的技术细节。 首先,获取并下载必要的源码,这些包括yocto的基础poky,以及其他特定功能层的meta文件夹。接着创建并配置好构建环境,比如编辑'rpi64'目录下的`conf/local.conf`文件,设置适合树莓派的参数。 修改配置文件是移植和bringup的关键步骤。例如,需要将UBOOT_MACHINE变量更改为支持树莓派4B的64位配置,以确保uboot能正确引导64位的Linux内核。在构建镜像时,通过修改`images/console-image.bb`文件的IMAGE_INSTALL变量,加入必要的组件和驱动,如RPI特有的工具和Wi-Fi驱动。 构建过程启动后,通过运行bitbake命令,如`bitbake console-image`,来生成定制的系统映像。uboot的集成允许系统从多个分区启动,这对于在线升级和系统恢复至关重要。 为了使系统支持在线升级,你需要在构建过程中集成swupdate。swupdate提供了轻量级、安全的固件更新机制。确保swupdate软件包被包含在IMAGE_INSTALL中,并配置好更新服务器和更新策略。 通过这些步骤,你将能够为树莓派4B定制一个包含uboot引导和swupdate更新功能的系统,这不仅增强了启动时的控制能力,还提高了系统的可维护性和安全性。建议在进一步深入学习之前,详细阅读《树莓派4B配置:Ubuntu Yocto移植与SWUPDATE系统升级》,以便掌握更多技术细节和高级配置选项。 参考资源链接:[树莓派4B配置:Ubuntu Yocto移植与SWUPDATE系统升级](https://wenku.csdn.net/doc/2qx1fyrv3b?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值