仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 372|回复: 8
打印 上一主题 下一主题

[其他Linux] 来看看:Linux中开辟USB摄像头驱动详解

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 11:59:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。
USB摄像头以其优秀的功能和昂贵的代价失掉普遍使用。同时因其天真、便利的特征,易于集成到嵌进式体系中。可是假如利用现有的切合VideoforLinux尺度的驱动程序共同通用使用程序,难以充实使用USB带宽,帧速不高,不容易满意及时监控等请求。本文起首先容在Linux体系下USB摄像头驱动体例的一样平常办法,然后申明在此基本上怎样进步帧速。
  1Linux体系中的USB摄像头驱动程序
  USB设备驱动程序完整切合通用设备驱动的原则,分歧的是内核供应了一些出格的API函数,便利驱动注册、烧毁本人,比方usb_reSister()和usb_dereSister();2.4版的内核还供应了关于hotplug的撑持。
  1.1USB摄像头驱动的一样平常编写办法
  摄像头属于视频类设备。在今朝的Linux中心中,视频部分的尺度是VideoforLinux(简称V4L)。这个尺度实在界说了一套接口,内核、驱动、使用程序以这个接口为尺度举行交换。今朝的V4L涵盖了视、音频流捕获及处置等外容,USB摄像头也属于它撑持的范围。
  因而,USB摄像头的驱动应该与内核供应的视频驱动挂钩。即起首在驱动中声明一个video_device布局,并为其指定文件操纵函数指针数组.fops,向体系注册。在使用程序收回文件操纵的相干命令时,中心依据这些指针挪用响应函数,并将该布局作为参数传送给它们。如许,就完成了驱动和中心之间的通讯。比方:
  staticstructvideo_devicevdev_template={……};
  //声明video_device,指出挂接驱动
  staticstructfile_operationsov511_fops={……};
  //声明本驱动的文件操纵函数指针
  structvideo_device*vdev=video_devdata(file);
  //从文件指针中提掏出video_device布局
  在video_device布局中,有一个公有指针priv,能够将它指向一块保存内存。在这块内存中,保留着本驱动、本设备的相干初始化信息。这块内存的请求、初始化、指针指向等事情都是在USB驱动的列举函数.probe中完成。如许,在列举函数将把持权返还给体系后,由于内核不烧毁保存内存,以是驱动仍旧保存着本人的信息。这点与Windows体系中WDM驱动有殊途同归的地方。固然,在驱动卸载函数中,应该将请求的各块内存全体开释。
  1.2利用双URB轮番通讯
  尽人皆知,USBl.1总线尺度界说了把持、中止、批量、等时等四种管道。关于工夫性极强可是正确度请求不高的视频捕获使用来讲,摄像头应该利用等时传输体例。为了尽量快地失掉图象数据,应该在URB中指定USB_ISO_ASAP标记。
  urb->transfer_flags=USB_ISO_ASAP;//尽量快地收回本URB
  Linux体系中任何USB传输都经由过程URB完成。为进步速率,能够思索扩展URB的缓冲,如许能够下降每一个USB事件中握手信息所占比例,进步无效数据的传输速率。可是受限于总线带宽和详细的USB设备芯片,纯真扩展URB的缓冲不克不及无穷制地办理成绩。详细剖析一下USB传输在操纵体系中的完成:每次传输都要包含URB的创建、收回、接纳、数据收拾等阶段,这些工夫不发生无效数据。因而能够创建两个URB,在守候一个URB被接纳时,也就是图象正在被传感器收罗时,处置、初始化另外一个URB,并在接纳后立即将其收回。两个URB瓜代利用,年夜年夜削减了分外工夫。事情流程如所示。
  这个历程是在URB的完成例程中完成的,有两点必要注重:起首处置再次初始化的代码工夫不克不及长,不然会形成完成例程的重人,假如的确来不及,能够在完成例程中设定标记,比方“数据收罗好”旗语,由使用程序利用堵塞ioctl()来查询该旗语并做处置;其次因为CPU大概会在完成例程中停止较长工夫,体系包袱较年夜,能够在.open函数中初始化两个URB并将其收回,无限度地加重体系包袱。
  1.3利用双帧缓冲进步效力
  Linux体系中,文件操纵一般是由read、write等体系挪用来完成。这些体系挪用在驱动中的办理办法就是用copy_to_user()、copy_from_user()等函数在核态、户态内存空间中相互拷贝。可是关于多量量的图象数据,接纳拷贝的办法明显会增添工夫开支,因而用内存映照的办法办理。起首利用vmalloc()请求充足年夜的核态内存,将其作为图象数据缓冲空间,两个URB带回的图象数据在这里暂存;然后利用remap_page_range()函数将其逐页映照到用户空间中。户态的图象处置程序利用mmap()函数,间接读写核态图象缓冲内存,年夜年夜削减分外开支

</p>
看不懂man文档的人.在linux中,命令可分为系统基本命令和应用程序命令.系统基本命令是所有的unix类系统都支持的命令,走到哪都不变,只要是unix类系统上就肯定有.
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-18 08:34:24 | 只看该作者
就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-22 20:15:06 | 只看该作者
Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。
小魔女 该用户已被删除
地板
发表于 2015-1-31 14:21:46 | 只看该作者
下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-6 20:11:12 | 只看该作者
当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-18 13:15:56 | 只看该作者
硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
再见西城 该用户已被删除
7#
发表于 2015-3-6 07:58:03 | 只看该作者
学习Linux系统在服务中的配置方法及使用方法。Linux在服务器中应用相当广,应对常用的apache,samba,ftp等服务器基本配置清楚了解。[重点,应巩固学习]
莫相离 该用户已被删除
8#
发表于 2015-3-12 23:14:22 | 只看该作者
上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
活着的死人 该用户已被删除
9#
发表于 2015-3-20 05:59:32 | 只看该作者
硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 00:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表