v4l2-驱动编程指导

Video for Linux Two - Driver Writer's Guide

Bill Dirks - December 23, 1999(注v4l2子系统的作者)

Modified by Luc Gallant - November 9, 2005(lucgallant(_AT_)gmail_com)

 译者:围补

简介

既然有了那个涵盖了所有函数的API说明,为什么还要有这个文档呢?因为API说明文档仅仅说明了用户模式下的调用,但v4l2还有只跟内核模式相关的代码。这篇文档的目的是要描述v4l2驱动模块是怎样挂载到系统内的,说明v4l2内核模式的API,讨论驱动的实现问题,并且提供一些额外的驱动编程人员可使用的文件。

这篇文档假设读者熟悉v4l2用户模式API说明文档,也熟悉linux设备驱动编程相关的规则。《Linux Device Drivers》,作者Allessandro Rubini,ISBN 1-56592-292-1,应该是本标准的参考。

V4l2 Driver & videodev

V4l2是一个两层驱动系统。顶层是videodev模块。当video初始化时,会作为字符设备81来注册,并且注册他的一套字符驱动函数。所有v4l2驱动实际上是videodev的用户(client),并且videodev通过v4l2驱动函数调用该client驱动。When a V4L2 driver initializes, it registerseach device it will handle with videodev by passing to videodev a structurewhich contains the V4L2 driver methods, a minor device number, and a coupleother details.(这几句没读懂,不清楚谁处理谁,要对照代码理解)。V4l2的函数与一般的linux字符驱动函数相似,但有一些v4l2驱动的特殊参数。当一个应用做驱动调用时,控制命令首先到达videodev的函数,再有它将该文件(file)或者节点(inode)结构体指针转换为相应的v4l2类型结构体指针,继而调用v4l2驱动的函数。因此,videodev的角色是作为一个壳包裹着v4l2驱动。Videodev是通过一个模块实现的,而且所有v4l2驱动也都是模块。

Videodev模块还包括一套帮助函数,v4l2驱动编程者可能会觉得有用。例如,一些简单的队列管理,将一个结构体指针file*转换为对应的v4l2结构体,还有内存映射帮助函数等等。

Driver Registration andMethod Calls

当一个驱动初始化的时候,它会枚举系统中的所有它将要处理的设备,而且它将每一个设备填充到一个单独的struct v4l2_device结构体中,并且把指向该结构体(the struct,不知道指哪个结构体)的指针传递给video_register_device()(分析代码,以参数形式传递给此函数的指针为struct video_device*类型的指针,即摄像头设备结构体指针)。video_register_device()将会保证次设备号(minor number)是可用的,且调用结构体struct video_device的函数class_device_register。class_device_register is passed the devmember contained in the video_device pointer that was passed to video_register_device()。(关系没理清楚,翻译不了,请对照代码理解,且代码中找不到class_device_register这个函数!!)。如果class_device_register成功,那么注册完成了。Videodev会保存这个在内部表格中的指针,并像应用访问驱动那样来调用其函数。

在调用v4l2_register_device()之前,驱动必须填充name,type和minor字段,以及open函数。其他的函数和字段是可选的。字段type与结构体struct v4l2_capability中的type字段使用相同的值,它是V4L2_TYPE_*的标签。可以在完成注册之后改变函数字段。当驱动卸载是,它使用它的release()通过设备指针调用video_unregister_device()。

 译者:围补

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值