
V4L2(Video for Linux 2)是 Linux 内核中用于视频采集、输出和媒体设备控制的标准框架。它提供了一套统一的、设备无关的 API,使得用户空间应用程序能够与各类视频硬件交互,包括:
V4L2 是 Linux 媒体子系统的一部分,它取代了最初的 V4L(Video4Linux)接口,解决了其在可扩展性、伸缩性和多设备支持方面的限制。
V4L2 的核心定义包括:
/dev/videoX、/dev/mediaX)V4L2 的设计旨在实现以下几项长期的系统目标:
1.硬件抽象
2. 高性能流处理
3. 可扩展性
4.复杂流水线支持
5.用户/内核空间分离
V4L2 支持多种视频格式:
格式描述通过structv4l2_format结构体实现。这使得应用程序能够与驱动协商分辨率、像素格式、跨距和缓冲区布局。
Media Device 是 Linux Media Subsystem 中用于描述多媒体硬件拓扑结构的框架。对于现代片上系统(SoC),视频处理已不再是一个单一设备,而是由多个功能模块构成的流水线。
Media Controller 被引入用于:
Media Control框架将此建模为一个图结构:
摄像头传感器 → CSI接收器 → 图像信号处理器 → 缩放器 → 视频节点

media-ctl -d /dev/media0 --set-v4l2 "'ov5640 1-003c':0[fmt:RGB565_1X16/640x480 field:none]"media-ctl -d /dev/media0 --set-v4l2 "'st-mipid02 1-0014':2[fmt:RGB565_1X16/640x480]"media-ctl -d /dev/media0 --set-v4l2 "'dcmipp_input':1[fmt:RGB565_2X8_LE/640x480]"media-ctl -d /dev/media0 --set-v4l2 "'dcmipp_dump_postproc':1[fmt:RGB565_2X8_LE/640x480]"media-ctl -d /dev/media0 --set-v4l2 "'dcmipp_dump_postproc':1[crop:(80,104)/480x272]"上边这段命令:对应的V4L2 model如下:

对Device tree感兴趣,请戳:
车轮上的Linux:揭秘车载Camera驱动开发的核心技术与框架②-Device Tree
V4L2只能看到一些列的Subdevice和Video device的集合;而Media device通过Media Entity,管理和维护拓扑结构,向ISP描述系统里有哪些媒体组件,它们如何连接?
V4L2 model描述“视频如何被配置、缓冲、采集或输出”。

用户空间负责 策略、控制与业务逻辑,不直接操作硬件。
内核空间负责 资源管理、数据搬运和硬件抽象。
硬件层是真正的 数据源与计算资源。

下一篇,我们会根据V4L2 stream on/off流程,把架构中每一个层级的模块,梳理一遍。
STM32MP13 V4L2 camera overview - stm32mpu