01@ V4L2框架分析学习一

1、概述.
Video4Linux2是Linux内核中关于 视频设备的内核驱动框架 ,为上层的访问底层的视频设备提供了统一的接口。
凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。
就像公司的老板一般都不会直接找底层的员工谈话,而是找部门经理了解情况,一个是因为底层屌丝人数多,意见各有不同,措辞也不准,部门经理会把情况汇总后再向上汇报;二个是老板时间宝贵。
V4L2支持三类设备 视频输入输出设备、VBI    设备和radio设备( 其实还支持更多类型的设备,暂不讨论),分别会在      /dev目录下产生   videoX、radioX和vbiX设备节点
我们常见的视频输入设备 主要是摄像头 ,也是本文主要分析对象。下图V4L2在Linux系统中的结构图:

Linux系统中 视频输入设备主要包括以下四个部分
字符设备驱动程序核心:  V4L2本身就是 一个字符设备 ,具有字符设备所有的特性,暴露接口给用户空间;
V4L2驱动核心:                主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数;
平台V4L2设备驱动:         在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分, 包括注册video_device和v4l2_dev  。
具体的sensor驱动:         主要 上电、提供工作时钟、视频图像裁剪、流IO开启 等,实现各种设备控制方法供上层调用并   注册v4l2_subdev   。


V4L2的核心源码位于 drivers/media/v4l2-core ,源码以实现的功能 可以划分为四类
核心模块实现:   由  v4l2-dev.c   实现,主要作用   申请字符主设备号、注册class和提供video device 注册 注销等相关函数;
V4L2框架 :        由  v4l2-device.c、v4l2-subdev.c、v4l2-fh.c、v4l2-ctrls.c  等文件实现,构建V4L2框架;
Videobuf管理:   由  videobuf2-core.c、videobuf2-dma-contig.c、videobuf2-dma-sg.c、videobuf2-memops.c、videobuf2-vmalloc.c、v4l2-mem2mem.c 
                             等文件实现,完成 videobuffer的分配、管理和注销
Ioctl框架:           由  v4l2-ioctl.c   文件实现,构建  V4L2ioctl   的框架。

2、V4L2框架
结构体   v4l2_device、video_device、v4l2_subdev 和   v4l2_fh    是搭建框架的主要元素。下图是V4L2框架的结构图:
从上图V4L2框架是一个标准的树形结构,v4l2_device  充当了父设备, 通过链表把所有注册到其下的子设备管理起来,这些设备可以是GRABBER、VBI或RADIO。
V4l2_subdev   是子设备,v4l2_subdev   结构体 包含了对设备操作的     ops和ctrls,这部分代码和硬件相关,
需要驱动工程师根据硬件实现, 像摄像头设备需要实现控制上下电、读取ID、饱和度、对比度和视频数据流打开关闭的接口函数
Video_device   用于创建子设备节点,把操作设备的接口暴露给用户空间。  V4l2_fh    是每个子设备的文件句柄,在打开设备节点文件时设置,
方便上层索引到   v4l2_ctrl_handler,v4l2_ctrl_handler  管理设备的   ctrls,这些ctrls     (摄像头设备)包括调节饱和度、对比度和白平衡等。



V4L2框架分析学习一   http://www.techbulo.com/1193.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值