01@ V4L2框架分析学习一

转载 2018年04月17日 19:38:26
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

【Linux开发】V4L2驱动框架分析学习

Author:CJOK Contact:cjok.liao#gmail.com SinaWeibo:@廖野cjok   1、概述 Video4Linux2是Linux内核...
  • LG1259156776
  • LG1259156776
  • 2016-08-28 09:52:19
  • 2918

V4L2框架分析学习

Author:CJOK Contact:cjok.liao#gmail.com SinaWeibo:@廖野cjok   1、概述 Video4Linux2是Linux内核...
  • RubyBoss
  • RubyBoss
  • 2013-11-02 11:46:01
  • 33941

02@ V4L2框架分析学习二

v4l2_devicev4l2_device在v4l2   框架中充当所有  v4l2_subdev的 父设备,管理着注册在其下的子设备。     以下是v4l2_device结构体原型(  去掉了无...
  • singledevil0
  • singledevil0
  • 2018-04-17 19:41:21
  • 22

V4L2(一)框架浅析

V4L2 :video for linux version 2 ,是 linux 里一套标准的视频驱动,它支持 uvc 标准的摄像头。本文来分析一下它的核心框架。   整个v4l2的框架分为三层:...
  • lizuobin2
  • lizuobin2
  • 2016-11-01 21:35:00
  • 1509

视频驱动V4L2子系统驱动架构 - 驱动框架

文章系列 视频驱动V4L2子系统驱动架构 - 驱动框架 视频驱动V4L2子系统驱动架构 - ioctl 基于linux4.6.3 V4L2驱动框架v4l2驱动架构如图所示,v4l2也就是vide...
  • l289123557
  • l289123557
  • 2016-07-23 23:20:55
  • 5792

linux camera V4L2框架(一)

1.V4L2 驱动中的核心结构体 v4l2_device;一个v4l2的总设备。 v4l2_sbudev:来描述camera等sensor设备,一般是指挂接在总线(i2c)上的摄像头 ...
  • lbaihao
  • lbaihao
  • 2016-05-20 23:05:14
  • 1937

[完结]Linux内核中的V4L2核心框架分析(V4L2 framework,video for linux 2,linux视频子系统)

标题: V4L2核心框架分析      驱动的结构 ------------------------------------------------------ 1)一个为设备实例定义的,并...
  • duanlove
  • duanlove
  • 2012-08-10 20:44:45
  • 12815

V4L2 driver(一). 整体框架

1.1 从字符设备说起熟悉v4l2用户空间编程的都知道, v4l2编程主要是调用一系列的ioctl函数去对v4l2设备进行打开, 关闭, 查询, 设置等操作. v4l2设备是一个字符设备, 而且其驱动...
  • gngshn
  • gngshn
  • 2015-09-13 22:31:33
  • 899

Video4Linux框架简介(7) - V4L2框架和v4l2_subdev

V4L2框架 译注:这是目前看到关于V4L2框架内众多结构关系最提纲挈领的一张图。 子设备:v4l2_subdev struct ●通常芯片连接到i2c或SPI总线,或通过GPIO引脚控制...
  • htjacky
  • htjacky
  • 2017-02-10 14:22:58
  • 1518

摄像头驱动(一)————V4L2框架浅析

V4L2 :video for linux version 2 ,是 linux 里一套标准的视频驱动,它支持 uvc 标准的摄像头。本文来分析一下它的核心框架。   整个v4l2的...
  • yangguoyu8023
  • yangguoyu8023
  • 2017-05-16 09:47:27
  • 707
收藏助手
不良信息举报
您举报文章:01@ V4L2框架分析学习一
举报原因:
原因补充:

(最多只允许输入30个字)