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
阅读更多
文章标签: v4l2 camera
个人分类: Qcom Camera
上一篇PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
下一篇02@ V4L2框架分析学习二
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭