Linux V4L2驱动框架分析之(一):架构介绍

系列文章
Linux V4L2驱动框架分析之(一):架构介绍
Linux V4L2驱动框架分析之(二):平台v4l2设备驱动
Linux V4L2驱动框架分析之(三):v4l2设备的缓存管理
Linux V4L2驱动框架分析之(四):sensor驱动

V4L2是video for Linux 2的缩写,是一套Linux内核视频设备的驱动框架,为上层的访问底层的视频设备提供了统一的接口。

V4L2支持多种类型设备:视频输入输出设备、VBI设备和radio设备等,分别会在/dev目录下产生videoX、radioX和vbiX设备节点等。我们常见的视频输入设备主要是摄像头,也是本文主要分析对象。

V4L2的框架
V4L2的框架如下图所示:
在这里插入图片描述
主要包括以下四个部分:
(1) 字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间;

(2) V4L2驱动核心:主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数;

(3) 平台V4L2设备驱动:在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分,包括注册video_device和v4l2_dev;

(4) 具体的sensor驱动:主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev。

硬件架构:
在这里插入图片描述常见的摄像头接口有USB、CSI、网口等,用于控制sensor的接口有I2C、SPI等。

V4L2的几个主要的结构体

v4l2_device:这个是整个输入设备的总结构体,可以认为它是整个V4L2框架的入口,充当驱动的管理者以及入口监护人。用于视频输入设备整体的管理,有多少输入设备就有多少个v4l2_device抽象(比如一个USB摄像头整体就可以看作是一个V4L2 device)。

v4l2_subdev:依附在v4l2_device之下,并表示一个v4l2设备的子设备,一个v4l2_devide下可以有多个v4l2_subdev,如上图的硬件架构图,sensor当作一个v4l2_subdev。

vb2_queue:v4l2设备的缓存管理。

video_device:为用户空间提供设备节点,提供系统调用的相关操作(open、ioctl…)。

平台V4L2设备驱动

平台相关的V4L2驱动部分,主要是注册video_device和v4l2_dev,同时用struct v4l2_subdev来抽象外接硬件。v4l2_device里有一个v4l2_subdev链表,子设备会链在该链表上。用户空间的ioctl先传递至平台驱动代码,然后通过v4l2_subdev_call调用v4l2_subdev提供的相关接口操作外接硬件。

具体的sensor驱动

主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值