V4L2 子设备开发全解析
1. V4L2 子设备概念引入
在早期的 V4L2 子系统中,主要有两个数据结构: struct video_device 和 struct vb2_queue 。前者对应 /dev/<type>X 设备节点,后者负责缓冲区管理。在那个视频桥接器中嵌入式 IP 块较少的时代,这两个结构足以满足需求。
然而,如今片上系统(SoC)中的图像模块嵌入了大量的 IP 块,每个 IP 块都承担着特定的任务,如图像缩放、图像转换和视频去隔行等功能。为了以模块化的方式应对这种多样性,引入了子设备的概念。这种方法将硬件的每个组件抽象为一个软件块,除桥接设备外,参与处理管道的每个 IP 块,甚至相机传感器本身,都被视为子设备。桥接视频设备节点遵循 /dev/videoX 模式,而子设备则使用 /dev/v4l-subdevX 模式(前提是在创建节点之前设置了相应的标志)。
例如,Atmel-ISC(图像传感器控制器)的处理流程为:Sensor -> PFE -> WB -> CFA -> CC -> GAM -> CSC -> CBC -> SUB -> RLP -> DMA。
从编码角度来看,驱动程序应包含 <media/v4l-subdev.h> ,该头文件定义了 struct v4l2_subdev 结构,用于在内核中实例化子设备。其定义如下:
超级会员免费看
订阅专栏 解锁全文
1467

被折叠的 条评论
为什么被折叠?



