基于V4L2的视频设备驱动开发与移植

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本栏目责任编辑:谢媛媛软件设计开发Computer Knowledge and Technology 电脑知识

与技术第6卷第15期(2010年5月)基于V4L2的视频设备驱动开发与移植

张辉,李新华,刘波,钱翔

(安徽大学电子科学技术学院,安徽合肥230039)

摘要:V4L2是Linux2.6内核的一大特征,其主要提供了视频设备的内核驱动协议。文章介绍了V4L2的驱动模型,以此为基础开发设计出针对MediaTek Inc 公司MT6229芯片USB 摄像头视频设备的驱动程序,采用多帧缓存的内存映射技术大大提高了图像采集的速度,在EmbedSky TQ2440平台下移植并给出了网络环境下的测试流程,对视频驱动程序开发方法和实现步骤具有重要的指导意义。

关键词:V4L2;USB 摄像头;设备驱动;程序移植

中图分类号:TP316文献标识码:A 文章编号:1009-3044(2010)15-3988-03

The Video Device Driver Programming and Proting Based on V4L2

ZHANG Hui,LI Xin-hua,LIU Bo,QIAN Xiang

(School of Electronic Science and Technology ,Anhui University,Hefei 230039,China)

Abstract:V4L2is a major feature of the Linux kernel Version 2.6,which mainly provides the kernel driver of video equipment.This pa -per introduces driver model of V4L2first,and analyzes the webcam driver of MediaTek Inc ’s MT6229chip according it.The memory mapping techniques of multi frame cache is adopted to increasing the speed of image acquisition greatly .Finally ,the program is planted into the development board of EmbedSky TQ2440and gives testing process under the network environment.There are is an important guidance to the development methods and steps of the video driver.

Key words:V4L2;USB Webcam;device driver;transplanting

V4L2(Video For Linux Two )[1]是Linux 内核中关于视频设备的API 接口,主要用来对视频设备进行开关、采集、输出等操作。在嵌入式系统中多采用Linux 作为其软件平台,V4L2是Linux2.6采用的内核驱动模型[2],与之前版本的V4L 存在很大差别,因而有部分视频设备的驱动还无法支持新版本的V4L2,对新标准下视频设备的一般性开发过程研究就显得特别具有现实意义。

在项目开发中所使用的视频设备为USB 摄像头,其芯片是MediaTek Inc 公司的MT6229,并不能被系统自带的视频设备驱动所识别,在参考中芯zc0301驱动程序的前提下,基于V4L2标准开发设计了视频驱动程序,并采用多帧缓存技术提高了采集帧数。通过交叉编译成模块后,移植加载到EmbedSky TQ2440开发板(ARM920T 架构,Linux2.6.30)上,在网络环境下进行了该驱动程序的测试工作,对我们开发视频驱动程序及其应用具有重要的实用价值。

1V4L2驱动模型

V4L2使在Linux 下开发视频设备驱动程序具有统一的接口规范,这套规范给驱动程序开发提供了清晰的模型和接口,应用程序处于最上层,硬件设备处于最下层,这套规范就处于中间层。在Linux2.6发行版之前此类规范都是V4L ,它将所有的视频设备驱动程序都放在其管理中,为编程人员减少了大量的工作,然而它不能同时打开多个设备以及不能很好地支持带编码能力的设备是其软肋,V4L2是由Bill Dirks [3]重新设计的,与V4L 相比,它的扩展性和灵活性都有了很大的提高,并且支持的硬件设备也更多,已成为Linux2.6的标准接口,涵盖了Video\dvb\Fm ……等等,但它和V4L 结构特点都不尽相同,因而与V4L 是不兼容的。

V4L2是一个两层驱动程序模型,以内核模块加载到系统中,因而当内核补丁安装后不需要重新对内核完全编译[4]。在开发板中对视频设备的驱动是按照以下步骤来完成的:首先,将设备与开发板相连接,若设备支持hot-plug ,系统会自动装载驱动程序,否则需要使用insmod 命令加载驱动程序到上层的videodev 内核模块中,此时驱动程序向系统提交注册请求,成功后返回一个主设备号,根据此设备号生成的第一个视频设备文件为/dev/video0;而下层是V4L2驱动程序,当其初始化后,将驱动程序的成员函数、次设备号以及其他相关信息的结构传递给videodev 。当应用程序触发一个驱动程序调用时将调用V4L2驱动中的处理函数。

V4L2驱动的主要功能是使程序有发现设备的能力并操作设备。它主要是调用一系列的回调函数来实现这些功能,如设置摄像头的工作频率,帧频,视频压缩格式和图像参数等等。

2在V4L2下编写USB 视频设备驱动程序

根据上面所定义的驱动模型以及V4L2所提供的API 函数,结合USB 设备的特性,视频设备驱动可按照以下步骤来开发完成,图1所示为视频设备驱动流程图。

1)编写视频设备驱动首先要确定驱动程序支持的设备,通过结构体struct usb_device_id [5]定义驱动程序支持的设备列表:

收稿日期:2010-03-25

作者简介:张辉(1979-),男,安徽巢湖人,讲师,主要研究方向为信号与信息处理,嵌入式;李新华(1968-),男,安徽铜陵人,副教授,

硕士生导师,研究方向为图像处理计算机视觉MCAI ;刘波(1986-),男,安徽六安人,硕士,研究方向为数字图像处理;钱

翔(1985-),男,安徽石台人,硕士,研究方向为信号与信息处理。

ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.6,No.15,May 2010,pp.3988-3990E-mail:xsjl@ Tel:+86-551-569096356909643988

相关文档
最新文档