基于V4L2的Linux摄像头驱动的实现
- 格式:pdf
- 大小:527.92 KB
- 文档页数:3
可以使用支持 V4L2 标准的开源 LuvcView 打开设 备并进行测试,也可以按照 V4L2 规范自行编写,基于 V4L2 视频采集流程如图 3 所示。
其中,mmap( ) 实现了内存从内核空间到用户空间的 映射,不需要任何数据拷贝,提高了数据传输效率。ioctl ( ) 函数管理设备的 I / O 通道,设置视频制式和帧格式,同 时查询当前设备的属性。主要 ioctl 命令如表 2所示。
的优化与仿真[J]. 计算机仿真,2008( 8) : 186 - 188.
[6] 王玮,张卫宁,史英,等. 基于 TMS320DM642 的网络功能开发
的研究与实现[J]. 计算机应用,2006,26( z2) : 300 - 302.
[7] 梁迅,熊水东,唐昆. DM642 嵌入 式 网 络 接 口 开 发 设 计
设置当前裁剪的矩形区域 读取数据格式并进行格式化 设置数据格式并进行格式化
读取当前输入的视频标准 设置当前输入的视频标准
缓存从队列中出列 缓存入列队列 查询设备属性
2 视频设备驱动程序实现
根据以上定义的驱动模型,视频驱动开发可按以
图 2 V4L2 视频采集流程图
( 1) 采用阻塞模式打开摄像头设备,获得文件描述符。 ( 2) 查看设备功能,是否支持视频捕获、是否支持 流采集等。 ( 3) 设 置 图 像 格 式,如 将 图 像 Width 设 为 640, Height 设为 480,像素格式设为 UYUV。 ( 4) 向驱动申请 4 个缓存区,分别在内核空间和 用户空间分配内存缓冲区,使用 mmap( ) 函数实现内 存映射。主要调用函数如下:
表 2 ioctl 常用命令标识符
操作函数
功能描述
VIDIOC_CROPCAP
视频信息的裁剪 和缩放
VIDIOC_G_CROP
读取当前裁剪的矩形区域
VIDIOC_S_CROP VIDIOC_G_FMT VIDIOC_S_FMT VIDIOC_G_STD VIDIOC_S_STD VIDIOC_QBUF VIDIOC_DQBUF VIDIOC_QUERYCAP
嵌入式视频监控技术飞速发展,系统多采用 Linux 动,即 USB 接口层驱动,主要功能是为系统与设备的
操作系统作为其软件平台。V4L2( Video For Linux 2) 通信提 供 管 道。( 2 ) 实 现 硬 件 自 身 功 能 的 驱 动,即
是 Linux 2. 6 内核中广泛采用的内核视频驱动模型,与 V4L2 驱动。驱动层次如图 1 所示。
架构,对 V4L2 不兼容,一些高端应用如 ARtoolkit,也
仅支持 V4L 架构。因此,有必要基于 V4L2 驱动架构,
设计针对普通摄像头的驱动程序。
设计采用的摄像头型号为 Sonix 公司生产的 USB 摄像头,嵌入式开发平台为 gplugD,处理器为 Marvell
图 1 视频设备驱动层次
( 下转第 92 页)
www. dianzikeji. org
87
图像·编码与软件
张国飞,等: 基于 DSP / BIOS 大空间网络型火灾探测系统设计
采用了面向连接的 TCP 协议。该模式下的应用程序 是采用 Socket 网络编程的方式进行开发的,以太网在
4 结束语
链路层的最大传输单元为 1 500 Byte,所以必须对每帧
图像·编码与软件
2012 年第 25 卷第 2 期 Electronic Sci. & Tech. / Feb. 15,2012
基于 V4L2 的 Linux 摄像头驱动的实现
王 飞,孔 聪
( 西安电子科技大学 电子工程学院,陕西 西安 710071) 摘 要 V4L2 是 Linux 下处理视频设备的最新标准,文中介绍了该标准的驱动模型,并在此基础上设计实现了普 通 USB 摄像头的驱动程序及图像采集程序。在 gplugD 平台上移植并测试,该驱动可以方便应用到各种嵌入式手持设 备中,实时性良好。 关键词 V4L2; USB 摄像头; Linux 驱动 中图分类号 TP334. 2 + 5 文献标识码 A 文章编号 1007 - 7820(2012)02 - 086 - 03
理开发包 Directshow 对视频数据进行译码显示。
统把烟雾、火焰检测算法集成于 RF5 架构的算法内核,
在 Browser / Server 模式中,利用 DM642 的嵌入式 并且采用 TI 的 NDK 进行网络开发,这样将更加有利于
文件系统创建 Web 服务器,便于将火灾现场的视频信 系统的移植以及产品的升级与推广。
( 3) 根据 V4L2 协议规范,文件操作接口实现设备 的关键系统调用。
( 4) V4L2 可以自定义驱动缓存数量,主要通过 ioctl 命令 VIDIOC_REQBUFS 实现,图像数据缓存采用 FIFO 方式,缓存队列将已采集到的视频图像数据的设备缓存 出队列,此时与之映射的内存空间就存储了采集到得视 频图像数据,处理完毕使设备缓存重新加入队列。
之前的 V4L 相比,有更好的扩展性和灵活性,V4L2 是
对 V4L 作了彻底改动,因此两者并不兼容,V4L2 的最
大优势是可以自定义设备驱动缓存数量,支持的硬件 设备也更多[1]。在对视频设备数据的读 / 写中,应用程
序可以通过内存映射方式获得位于内核空间的图像数
据。减少内核态到用户态的数据拷贝,显著提高了系 统的吞吐量[2]。但多数摄像头设备的驱动基于 V4L
过 usb_register( ) ,主要是向 USB 核心描述驱动,从而 创建 struct usb_driver 结构,在该结构中初始化 4 个指 针,即 指 向 驱 动 程 序 名 字 的 name,指 向 探 测 函 数 的 probe,指向断开函数的 disconnect 和指向设备列表的 id_table。
[J]. 计算机工程,2007,33( 16) : 277 - 279.
图 6 Web 服务器访问结果
檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪
同时加载驱动程序的成员函数、次设备号以及其他相
关信息,使设备可以正常工作。V4L2 常用接口函数如
表 1 所示。
表 1 V4L2 常用接口函数
操作函数
功能描述
open( )
打开一个 V4L2 设备
close( )
关闭一个 V4L2 设备
ioctl( )
对 V4L2 的设置
mmap( )
映射内核空间到用户空间
视频设备。对 usb_driver 的注册和注销通过这两个函
收稿日期: 2011-07-20 作者简介: 王飞 ( 1986—) ,男,硕士研究生。研究方向: 嵌 入式系统设计。孔聪( 1986—) ,男,硕士研究生。研究方向: 嵌入式系统设计。
数完成: int usb_register( struct usb_driver * new_driver) ; void usb_deregister( struct usb_driver * driver) ; struct usb_dirver 中的 id_table 成员描述了该 USB
息以网页的形式送入局域网,再经过路由器的端口映 射传至因特网。例如,在局域网内部设置 Web 服务器
参考文献
的 IP 地 址 为 192. 168. 0. 11,在 地 址 栏 输 入 该 地 址, [1] 冬 雷. DSP 原 理 及 开 发 技 术[M]. 北 京: 清 华 大 学 出 版
Web 服务器访问结果如图 6 所示。
Implementation of Linux Video Capture Driver Based on V4L2 Architecture
WANG Fei,KONG Cong ( School of Electronic Engineering,Xidian University,Xi'an 710071,China) Abstract Video For Linux Two is the latest standard for Linux video capture driver. This article introduces the driver model of V4L2,on the basis of which a USB video capture driver is designed to achieve the function of video capture. Besides,transplantation and testing were implemented on the gplugD platform. This video capture driver can be easily applied to other hand-held devices and has good real-timeness. Keywords V4L2; USB video capture driver; Linux driver
munmap
取消设备内存映射
read( )
从 V4L2 设备读取数据
write( )
向 V4L2 设备写入数据
Select( )
同步 I /O 复用
Poll( )
等待事件文件符
下步骤完成: ( 1) 首先确定驱动程序支持的设备,通过结构体
struct usb_device_id 定义驱动程序支持的设备。 ( 2) 调用 module_init 初始化模块,在初始化中通
通过实例介绍了基于 DSP / BIOS 的大空间网络型
视频在 IP 层进行分片操作。同时需要在上位机上开 火灾探测系统的具体开发流程。利用对 TMS320DM642