V4L2子设备开发全解析
1. 内核初始化函数与子设备概念
在V4L2子系统中,内核里有一个内部API vb2_core_queue_init() ,其核心代码如下:
q->dma_dir = DMA_BIDIRECTIONAL;
else
q->dma_dir = q->is_output ?
DMA_TO_DEVICE : DMA_FROM_DEVICE;
return 0;
这个API主要用于进行一些基本的初始化工作,包括数据结构的检查和初始化,像列表、互斥锁和自旋锁等。
早期的V4L2子系统主要依赖两个数据结构:
- struct video_device :用于呈现 /dev/<type>X 设备节点。
- struct vb2_queue :负责缓冲区管理。
但如今,片上系统(SoC)的图像模块集成了众多IP块,每个IP块都有特定功能,如图像缩放、转换和视频去隔行等。为了以模块化方式应对这种多样性,引入了子设备的概念。通过这种方式,除桥接设备外,参与处理管道的每个IP块,甚至相机传感器本身,都可视为子设备。桥接视频设备节点遵循 /dev/videoX 模式,而子设备使用 /dev/v4l-subdevX 模式(前提是在创建节点前设置了相应标志)。
以Atmel-ISC(图像传感器控制器)为例
超级会员免费看
订阅专栏 解锁全文
1489

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



