USB Camera摄像头(UVC 与 gspca)

From: http://www.cnblogs.com/leaven/archive/2010/08/19/1802934.html

http://weijb0606.blog.163.com/blog/static/131286274201063145356429/

我的摄像头终于出现图像了!

李迟按:本文章不是教程,不是心得总结,而是记录我在做毕业设计过程中遇到的一些问题,以及怎么去解决

(有些还是没有解决)。可能带有牢骚,可能带有某些让人不悦的话。希望大家见谅。

今晚很高兴,捣鼓了几天,郁闷了几天的事,今天解决了一些了。起码我能在linux下看到摄像头的图像了。

提起USB摄像在linux下的使用,无论是百度还是Google,出现的多数是法国人写的一个通用驱动程序,即spca5xx,

我也是找了很久才找到,——因为在网上看到的那个网站已经不能登陆了,就是说不再维护了(这个后来再作说明),所以

找了很久。可惜不能用。因为我make都不通过,出现的错误如下:

make -C /lib/modules/`uname -r`/build SUBDIRS=/usr/local/gspcav1-20071224 CC=cc modules

make[1]: Entering directory `/usr/src/linux-2.6.30.2'

CC [M] /usr/local/gspcav1-20071224/gspca_core.o

/usr/local/gspcav1-20071224/gspca_core.c:54:27: error: asm/semaphore.h: No such file or directory

In file included from /usr/local/gspcav1-20071224/gspca_core.c:845:

/usr/local/gspcav1-20071224/utils/spcausb.h: In function ‘spca5xxRegRead’:

/usr/local/gspcav1-20071224/utils/spcausb.h:95: error: implicit declaration of function ‘info’

/usr/local/gspcav1-20071224/utils/spcausb.h: In function ‘spca_set_interface’:

/usr/local/gspcav1-20071224/utils/spcausb.h:278: error: implicit declaration of function ‘warn’

In file included from /usr/local/gspcav1-20071224/gspca_core.c:853:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h: In function ‘sp5xxfw2_init’:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:122: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:136: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:141: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:148: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:176: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h: In function ‘sp5xxfw2_start’:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:214: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:230: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca5xx_ioctl’:

/usr/local/gspcav1-20071224/gspca_core.c:2463: error: implicit declaration of function ‘video_usercopy’

/usr/local/gspcav1-20071224/gspca_core.c: At top level:

/usr/local/gspcav1-20071224/gspca_core.c:2609: error: unknown field ‘owner’ specified in initializer

/usr/local/gspcav1-20071224/gspca_core.c:2609: warning: initialization from incompatible pointer type

/usr/local/gspcav1-20071224/gspca_core.c:2611: error: unknown field ‘type’ specified in initializer

/usr/local/gspcav1-20071224/gspca_core.c:2615: warning: initialization from incompatible pointer type

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca50x_create_sysfs’:

/usr/local/gspcav1-20071224/gspca_core.c:2769: error: implicit declaration of function ‘video_device_create_file’

/usr/local/gspcav1-20071224/gspca_core.c:2780: error: implicit declaration of function ‘video_device_remove_file’

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca5xx_probe’:

/usr/local/gspcav1-20071224/gspca_core.c:4301: error: incompatible types in assignment

make[2]: *** [/usr/local/gspcav1-20071224/gspca_core.o] Error 1

make[1]: *** [_module_/usr/local/gspcav1-20071224] Error 2

make[1]: Leaving directory `/usr/src/linux-2.6.30.2'

make: *** [default] Error 2

以我现在的能力,我不能解决,我google过,但得不到好的解决方法。

更重要的是,现在想找一个几年前驱动支持的摄像头很难啊!现在都流行免驱了——根据OS相关理论,这是不成功的,

设备没有驱动哪能访问?他们说的是用户免去安装驱动程序这一步骤,——是这个“免驱”。我买的摄像头不

在spca5xx支持范围之中。我好容易找到一个,是小郭用的,摄像头ID刚好是上述驱动所支持的。当时很兴

奋,心想,万事俱备,只差编译、测试了。可惜,以失败告终。错误如上所述。

我试的几个版本为spca5xx-20060501和gspcav1-20071224,都不行。

在网上找了那么多文章看,但一个也行不通。我不知大家的感受是什么,反正我很郁闷,很无奈。

后来,在插入我买的摄像头时,使用了lsusb,将ID那一行复制到google中,一不小心,发现了一个

好网站:http://linux-uvc.berlios.de/。上面竟然有我摄像头的ID号!!继续研究,发现有UVC这个东东,

我在配置内核时也碰到过,但没有注意,没想到如此有用!后来在一个网站中找到有关使用UVC驱动摄像头的

文章,地址忘了,我也不知是怎么搜索到的。此外还下载一个观看图像的小软件(补充一下:luvcview 或者cheese[debian自带])。

结果成了!可以显示图像了!下面写一下过程:

如果你能在http://linux-uvc.berlios.de/找到你的摄像头的ID,即UVC支持的,那么就可以在linux下使用了。

至于从哪个版本开始内核支持UVC,官方的话是“Linux 2.6.26 and newer includes the Linux UVC driver natively.”

1、查看摄像头ID:

[root@151 dev]# lsusb

Bus 002 Device 013: ID 0ac8:3313 Z-Star Microelectronics Corp.

0xc8:3313在UVC中支持了。

2、插入摄像头后,就可以在/dev/下查看是否有video设备文件:

[root@151 dev]# ls | grep video

video

video0

其中,video是video0的连接。如果没有再现,可能UVC没有配置到内核中,重新配置就可以了

(大致在Device DriversàMultimedia devicesàVideo capture adaptersàV4L USB devices下面)。如果内核配置了,

还是不出现,可以使用modprobe uvcvideo来加载该模块。

3、先看看摄像头的相关信息:

lshal | grep Cam

出现:

info.product = 'Vega USB 2.0 Camera.' (string)

usb_device.product = 'Vega USB 2.0 Camera.' (string)

usb.interface.description = 'Vega USB 2.0 Camera.' (string)

info.product = 'Vega USB 2.0 Camera.' (string)

input.product = 'Vega USB 2.0 Camera.' (string)

info.product = 'Vega USB 2.0 Camera.' (string)

对USB有研究的,就很熟悉这些字段。

再看一下系统能不能识别出摄像头:

[root@151 log]# dmesg | grep Cam

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input6

usb 2-7: Product: Vega USB 2.0 Camera.

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input7

usb 2-7: Product: Vega USB 2.0 Camera.

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input8

usb 2-7: Product: Vega USB 2.0 Camera.

[root@151 ~]# dmesg | grep video

pci 0000:05:00.0: Boot video device

Linux video capture interface: v2.00

usbcore: registered new interface driver uvcvideo

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

哈哈,识别出来了!可以测试了。

4、我使用的软件是luvcview,这个软件google就可以找到的。安装过程很简单,——make,make install就可以了。(哈哈,这里才说)

下面这个过程是测试过程,从看到图像到结束的过程:

[root@151 dev]# luvcview -d /dev/video0 -f yuv -s 640x480   (直接运行luvcview也可)

uvcview verion 0.1.4

size width: 640 height: 480

Video driver: x11

A window manager is available

video /dev/video0

Stop asked

Clean Up done Quit

[root@151 dev]#

解释命令:

-d 设备名,这里/dev/video或/dev/video0都可以,因为它们都是一个文件

-f 格式,有yuv和jpg两种,后者测试不行

-s 大小,能支持的最大尺度可能由luvcview决定,也可能由摄像头决定,(应该是后者,暂没有研究)

更具体的参见luvcview目录下的README文件。

另外,如果没有插入摄像头,即使modprobe uvcvideo也不会出现/dev/video设备文件;插入摄像头,即使没有modprobe uvcvideo,

也会出现/dev/video设备文件,当然这是我的测试,没有代表性,也没有理论根据的。

注:

1、UVC:USB Video Class

2、gspcav不是不再维护,而是在某一版本开始已经纳入内核了,至于哪个版本(2.6.26),就不太清楚了。特此说明。

3、这次毕业设计所不再编译gspca到内核中了。不支持它,直接使用UVC。

第一张图:红旗6.2,内核2.6.28.8

USB Camera摄像头 - BEYOND ME - BEYOND ME


虚拟机FC9,内核2.6.30

USB Camera摄像头 - BEYOND ME - BEYOND ME

发表于: 2010-03-19,修改于:

我跟作者经历简直太相似了,起先搞了好几天真是有点摸不着头脑,哈哈!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] react有几种构建组件的方式?可以写出来吗?

[react] react有几种构建组件的方式&#xff1f;可以写出来吗&#xff1f; 1.无状态函数式组件 function HelloComponent(props, /* context */) { return <div>Hello {props.name}</div> } ReactDOM.render(<HelloComponent name"Sebastian" /&g…

随机存取存储器(RAM)

RAM&#xff08;random access memory&#xff09;随机存储器。存储单元的内容可按需随意取出或存入&#xff0c;且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容&#xff0c;故主要用于存储短时间使用的程序。 按照存储信息的不同&#xff0c;…

JAVA基础实例(三)--排序

冒泡排序 是一种简单的排序算法。它反复地走訪过要排序的数列&#xff0c;一次比較两个元素。假设他们的顺序错误就把他们交换过来。走訪数列的工作是反复地进行直到没有再须要交换&#xff0c;也就是说该数列已经排序完毕。这个算法的名字由来是由于越小的元素会经由交换慢慢“…

对象文件格式分析工具: objdump, nm,ar

From: http://blog.csdn.net/longxin007/article/details/1880477 前言 如果普通编程不需要了解这些东西&#xff0c;如果想精确控制你的对象文件的格式或者你想查看一下文件对象里的内容以便作出某种判断&#xff0c;刚你可以看一下下面的工具&#xff1a;objdump, nm, ar。…

[react] react的mixins有什么作用?适用于什么场景?

[react] react的mixins有什么作用&#xff1f;适用于什么场景&#xff1f; 1.mixin的作用是抽离公共功能&#xff0c;不存在渲染dom的需要&#xff0c;所以它没有render方法。如果你定义了render方法&#xff0c;那么他会和组件的render方法冲突而报错。 2.mixin不应该污染st…

分布式领域CAP理论

分布式领域CAP理论具体如下&#xff1a;Consistency(一致性)&#xff1a;数据一致更新&#xff0c;所有数据变动都是同步的&#xff1b;Availability(可用性)&#xff1a;好的响应性能&#xff1b;Partition tolerance(分区容错性)&#xff1a;可靠性&#xff1b; 定理&#xf…

一份详尽的IPC$入侵资料

创建时间&#xff1a;2003-03-16文章属性&#xff1a;原创文章来源&#xff1a;菜菜鸟社区http://ccbirds.yeah.net文章提交&#xff1a;iqst(papabang_at_qingdaonews.com)[ccbirds入门级教程]--各个击破1--ipc$入侵一 唠叨一下&#xff1a;网上关于ipc$入侵的文章可谓多如牛毛…

CString转char的方法总结

From: http://www.lewensky.cn/read.php/133.htm 1.传给未分配内存的const char* &#xff08;LPCTSTR&#xff09;指针. CString cstr(asdd);const char* ch (LPCTSTR)cstr;ch指向的地址和cstr相同。但由于使用const保证ch不会修改&#xff0c;所以安全.2.传给未分配内…

[react-router] 请你说说react的路由是什么?

[react-router] 请你说说react的路由是什么&#xff1f; React的路由是纯前端的路由&#xff0c;就是根据hash或browser path的变化&#xff0c;框架内封装好了方法&#xff0c;可以自由的切换DOM展示&#xff0c;来模拟页面或局部页面被替换的目的&#xff1b;让浏览器不用刷…

使用Delphi7构建工商银行电子口令密码查找助手

工商银行通过网银结账的时候&#xff0c;会给出一个类似于B5G7的字符串&#xff0c;让你在自己的口令卡上找到对应的口令码。因为口令卡上的数字挺多的&#xff0c;而且有水印&#xff0c;找起来挺麻烦的&#xff0c;我就花了几十分钟的时间&#xff0c;写了一个快速查找口令卡…

[react-router] 请你说说react的路由的优缺点?

[react-router] 请你说说react的路由的优缺点&#xff1f; 优点&#xff1a; 配置灵活支持丰富的传参利用hashRouter也可以实现低版本浏览器的兼容 缺点&#xff1a; v4之后使用url query的方式传参比较繁琐&#xff0c;解析时需要使用queryString和location.search利用reac…

gcc compiler warning: “will be initialized after/when initialized here”

From: http://blog.csdn.net/qtyl1988/article/details/6818325 先看看我为二叉树写的结点类&#xff1a; template <class ElemType> class TreeNode { private:TreeNode* lchild;TreeNode* rchild; public:ElemType data;TreeNode(const ElemType& item,TreeNode…

DEV控件Grid显示行号

DEV控件Grid的显示行号需要通过一个事件来设置&#xff0c;具体设置代码为&#xff1a; private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) {if (e.Info.IsRowIndicator && e.RowHand…

[react-router] React-Router的<Link>标签和<a>标签有什么区别

[react-router] React-Router的<Link>标签和<a>标签有什么区别 Link 组件最终会渲染为 HTML 标签 <a>&#xff0c;它的 to、query、hash 属性会被组合在一起并渲染为 href 属性。虽然 Link 被渲染为超链接&#xff0c;但在内部实现上使用脚本拦截了浏览器的…

创建弹出窗口的图片展示

本帖最后由 oisweb 于 2009-11-24 14:11 编辑图片有点大了 显示不是很好 自己看着办吧 1 创建工程 设置页面属性 <mx:Application xmlns:mx"http://www.adobe.com/2006/mxml" layout"vertical" horizontalAlign"center" verticalAlign&…

国内常用NTP服务器地址及IP

From: http://www.douban.com/note/171309770/ 时间服务器默认的端口号是&#xff1a;123&#xff0c;协议为UDP 210.72.145.44 (国家授时中心服务器IP地址) 133.100.11.8 日本 福冈大学 time-a.nist.gov 129.6.15.28 NIST, Gaithersburg, Maryland time-b.nist.gov 129.6.1…

[react] 受控组件和非受控组件有什么区别?

[react] 受控组件和非受控组件有什么区别&#xff1f; 受控组件用value和组件的state绑定&#xff0c;当value更新时&#xff0c;会自动更新state 非受控组件没有value&#xff0c;采用ref直接操作dom 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容…

Core Data 多线程操作实战篇

最近在解决百度音乐iPhone客户端偶现数据库操作crash的问题&#xff0c;顺手整理了下CoreData的多线程原则&#xff0c;以及实际开发时应该如何遵守这些原则。 Core Data多线程操作的基本原则 不允许跨线程访问MOC&#xff1a; 在某一个MOC上的CRUD操作只能在它的操作线程上进行…

分布式系统和元数据

------俗解&#xff1a;---------------------------------------------------- 什么是分布式系统&#xff1a; 1&#xff1a;通俗点说分布式系统就是能把服务器端程序分开部署到多台机器上。 2&#xff1a;跟分层毫无关系, 跟它容易搞混的是集群 分布式就是把一个系统分布在不…

移植gdb到DM368 IPNC中 linux arm gdb

From: http://blog.csdn.net/ghostyu/article/details/8081897 移植gdb到嵌入式的ipnc中&#xff0c;大多数人习惯使用printf调试&#xff0c;但是遇到像”segment fault“这的错误也是后就很难定位&#xff0c;这时候gdb的作用就体现出来了 在pc使用gdb调试应用程序前&…