为FirePrime添加USB摄像头

  • 东方青
  • LV4工程师
  • |      2015-11-12 09:03:29
  • 浏览量 2130
  • 回复:9

**************************************************************************

                        东方青学FirePrime

                                        ———————转载请注明ICKey————————

**************************************************************************




FirePrime添加USB摄像头

-----东方青

要用USB媒体输入设备,就不得不说说UVC协议了,就目前而言,支持UVC协议将是一个非常大的趋势!而市场上大部分的USB媒体输入设备都会支持此协议。

UVC,全称为:USB video class USB video device class,意思是USB视频捕获设备。UVCMicrosoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。USB视频捕获设备,比如网络摄像头(USB数字摄像头)USB视频图像采集卡等是支持UVC协议的。免驱摄像头其实就是UVC标准的摄像头,免驱摄像头是指遵循视频设备类(USB Video Class,简称UVC)标准协议的摄像头产品。由于自Windows XP SP2之后Windows操作系统自带了UVC驱动程序,因此遵循UVC标准的摄像头使用时无需安装额外的驱动程序,故此“免驱”。

那么UVC协议和USB协议有吗关系呢?尽管硬件是USB接口。在USB协议中,除了通用的软硬件电气接口规范等之外,还包含了各种各样的Class协议,而UVC协议就是众多Class中的一个。目的是用来为不同功能的设备定义各自的标准接口和具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的如U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC Class。此外还包括Audio ClassPrint Class等等。

尽管是这样,但是一定需要像UVC这样的协议才能使用外设吗?

答案是否定的,就算是不使用USB标准协议提供的各种Class,也是可以通过添加各种专用驱动来进行使用设备的。但是这样的驱动,如果在桌面系统上使用,将会是很麻烦的事情,因为各家厂商的驱动可能是不相同的,导致了需要安装的软件越来越多,后果可想而知!在嵌入式系统里也是,有时候添加的驱动程序因为考虑到性能、速度等等原因,可能会破坏(小量的破坏)操作系统原有的架构,这作为开发和后期产品的维护和升级也是个*(尽管在很多时候,在使用一些非标准设备时,我们经常这样干,但是通常也是需要衡量各种条件因素来平衡的)。所以有一个统一的标准协议,将促进设备的接口统一和普及,比如Mass Storage Class的使用,对U盘的普及使用起到了非常大的推动作用。

Video Class协议的目的是给USB接口的视频设备提供一个统一的数据交换规范。它包括的使用设备有摄像头、数码相机、类比影像转换器、电视棒等等媒体设备。

对于Linux操作系统,自Linux Kernel 2.4版本的内核以后,就开始支持了UVC标准协议。

OK!以上作为对UVC协议的介绍,下面开始干事!分成以下步骤实现:

1.查看FirePrime所使用的UbuntuLinux kernel版本

首先需要查询Linux内核版本是否支持UVC标准协议。

命令:cat /proc/version 或 uname -a uname -r

为FirePrime添加USB摄像头

如上图即为三种查看Linux系统版本的方法。可以看出FirePrime所使用的Ubuntu 15.04所用的内核版本是3.10.0版本。高于Linux kernel2.4版本,所用理论上是支持UVC标准协议的,因为貌似现在UVC标准协议已经是内核的一部分了。

2.查询所使用的摄像头是否支持UVC协议

这可能是个糟糕的问题,因为我的摄像头买了几年了,在哪买的都忘了,何况资料。所以从摄像头资料入手的话,这是不太现实的,除非无奈。但是幸好Linux提供了很好的方法让我们查询设备是否支持UVC协议。但是还是江一个个的方法记录下来,备用:

方法一:使用lsusb命令或其它硬件信息查看工具找出摄像头的设备号(Vendor ID)和产品号(Product ID)。如Logitech Quickcam for Notebooks Pro摄像头是046d:08cb。很可惜,我并不知道我的摄像头的任何资料。

方法二:直接查询设备

其实这种方法也分成两种方式。

(1)将摄像头插入到FirePrime板卡是USB接口上

(2)执行如下命令查询:

方式1

命令:lsusb

为FirePrime添加USB摄像头

如上图,插入USB摄像头后,通过命令lsusb就可以查找到USB接口的Camera,并且设备号,产品号也都将显示出来。

方式2

命令:ls /dev/

为FirePrime添加USB摄像头

如上图,插入USB Camera后,才能找到video0设备节点。注意啦,如果有多个支持UVC协议的设备连接,那么数字值就不同了。

看来FirePrime是支持UVC的,并且我的USB Camera也是支持UVC标准协议的。OK!这就好办事了!也免得折腾内核了。

方法三:在网站http://www.ideasonboard.org/uvc/#footnote-5查询自己的USB多媒体设备是否被UVC支持,很显然这不是个好办法。要看的资料太多。

3.选择测试软件并安装

Linux环境下获取UVC标准协议的设备的图片或者图像,通常测试软件或工具是不需要我们自己去写的,因为已经有很多工具很好的在Linux环境下支持了这种功能,并且很多优秀的软件工具还是开源的,所以直接使用即可。比如luvcviewmplayer等。在这里选择的是mplayer

安装mplayer

命令:sudo apt-get install mplayer

当然,前提是最好更新一下源,执行命令:sudo apt-get update

4.使用USB Camera

FirePrime板卡的Ubuntu桌面系统的终端上执行命令:

命令:sudo mplayer tv://

注意,一定要在FirePrime板卡的Ubuntu桌面系统的终端上,而不是通过SSH远程登录的Putty终端或是source CRT终端。

为FirePrime添加USB摄像头
为FirePrime添加USB摄像头

有图有真相!整一个过程就是这样了!有时间折腾一下网络监控。

总结:通过这次折腾,比较全面的了解了UVC协议,当我尝试去了解UVC架构是,光是看架构图就把我看蒙圈了,可以说是非常复杂的,所以如果需要自己移植驱动,就算不适用UVC而是使用其他的专用驱动,可能也得折腾一段时间。这就是标准的好处和强大之处。

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:8
598413853@qq.co 2015-11-12
厉害#¥……*(&%……¥#@Q*&()(_%^&#@#^&(^……
0   回复
举报
发布
东方青 2015-11-12
马超兄也来逛我这窑了!哈哈哈!欢迎欢迎!
0   回复
举报
发布
马超飞燕 2015-11-12
这么清晰
0   回复
举报
发布
东方青 2015-11-12
0   回复
举报
发布
幻月星辰 2015-11-12
碉堡了,学习一下,下一步也准备弄USB摄像头
0   回复
举报
发布
东方青 2015-11-12
0   回复
举报
发布
秦时茗月 2015-11-12
恩恩,顶一个,继续
0   回复
举报
发布
SingleYork 2015-11-12
这个掉渣天啊!楼主威武!
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子