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 镜像,并高效管理摄像头应用。
如果你有更多需求,欢迎留言讨论!