在Windows下,摄像头驱动由厂商开发并提供。但在Linux下,因商业利益有限,只有极少厂商愿意提供摄像头驱动支持。这并不妨碍Linux下摄像头的使用——广大第三方志愿者维护着大大小小的驱动。之前做过一个嵌入式皮毛项目,虽然摄像头驱动不关我的事,在好奇心驱使下简要探索了一番。结果是有些胸闷,它们像蜘蛛丝一样杂乱。写本文的动机是想理清一下主线,给后来者提供一点有限的参考,但无法保证下面的文字完全正确。

  常见的摄像头驱动有以下几个系列: OVCam drivers(ov5xx)

  该系列驱动是针对OmniVision OV5xx系列芯片,此类芯片被广泛运用于各种USB摄像头中,在嵌入式开发板上尤其常见。凡是使用了OV511/OV511+/OV518 /OV6620/OV6630/OV7610/OV7620/OV7 620AE等图像传感器的摄像头都可以在该驱动下工作。

  项目主页:http://alpha.dyndns.org/ov511/

  Philips USB Webcam Driver(pwc) 该驱动主要用于Philips及pwc芯片兼容摄像头。由于原开发者与Philips公司签有保密协定,该驱动以二进制形式提供,后来被踢出内核,引起一场口水战:是用户需求重要还是保持内核纯洁重要?所幸后续开发者从原项目上创建了一个新的分支,使得该项目继续存活。

  项目主页:http://www.saillard.org/linux/pwc/

  QuickCam USB camera driver (qc-usb) 该驱动主要用于Logitech公司的QuickCam Express系列和其它兼容型号摄像头。最初由Georg Acher开发,当时命名为qce-ga。Jean-Frederic Clere参考该驱动创建出了第一个Video4Linux兼容驱动。从那开始,不断有开发者加入,使得该驱动逐渐能够支持新的摄像头和芯片。在此期间,该驱动更名为qc-usb,更为广泛地支持其它QuickCam USB摄像头,而不再是局限于Express系列。

  项目主页:http://qce-ga.sourceforge.net/

  QuickCam Messenger & Communicate driver(quickcam) 这是另一个针对QuickCam摄像头的驱动,它仅支持某一些型号,并且与qc-usb驱动不兼容。项目主页:http://home.mag.cx/messenger/

  SPCA webcam driver(gspca/spca5xx) 该系列驱动适用于Sunplus芯片摄像头,也适用于其它芯片,如目前国内山寨摄像头一哥“中星微”(Z-Star)芯片。Michel Xhaard是该项目的维护者,他在60岁左右的时候(大约是2003年)从一种普通常见的驱动入手,进而不断修改开发成一个支持250种以上摄像头的通用驱动。他还写了流媒体服务器spcaserv与客户端spcaview。不少高校所谓的嵌入式无线网络视频传输项目,就是从这两个东西来的。

  项目主页:http://mxhaard.free.fr/spca5xx.html

  Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁。大多数大容量存储器设备(如优盘)都遵循USB规范,因而仅用一个单一驱动就可以操作它们。与此类似,UVC兼容外设只需要一个通用驱动即可。

  USB摄像头大体上可以二分为UVC cameras和non-UVC cameras。推荐购买UVC cameras。UVC是一个开放的标准,拥有维护良好的驱动,它属于内核代码的一部分。插入摄像头后就可以工作,而无须编译或安装额外的驱动。non- UVC cameras通常情况下不比UVC cameras工作出色,前者的驱动并不遵循通用的协议,需要针对每种摄像头做出单独的处理,这往往需要一个逆向工程的探索过程。

  判断一个摄像头是否属于UVC规范可以使用下面方法:

  1.使用lsusb命令或其它硬件信息查看工具找出摄像头的设备号(Vendor ID)和产品号(Product ID)。如Logitech Quickcam for Notebooks Pro摄像头是046d:08cb;

  2.查找是否有视频类接口信息

  lsusb -d 046d:08cb -v | grep "14 Video"

  如果该摄像头兼容UVC,则会输出类似信息

  bFunctionClass 14 Video

  bInterfaceClass 14 Video

  bInterfaceClass 14 Video

  bInterfaceClass 14 Video

  若无以上信息,则是non-UVC设备。

  项目主页:http://linux-uvc.berlios.de/

  在Linux下摄像头驱动有三种存在形式,内置于内核(within the kernel),做为一个外挂的模块(module),或者是预编译的二进制程序(pre-compiled binary)。

  Linux内核树会不断合并优秀的驱动。从2.4内核起,ov5xx驱动就已经是内核代码的一部分。从2.6.26开始,Linux内核原生包含uvc 驱动。2.6.27内核又吸收进了gspca/spca5xx系列驱动。常见的Linux发行版所配置的内核,一般都已将这些驱动选项打开,而无需用户另外编译。内核的.config文件中有许多配置变量等式,用来说明内核配置的结果。y表示本编译选项对应的内核代码被静态编译进 Linux内核;m表示本编译选项对应的内核代码被编译成模块;n表示不选择此编译选项。

  以Fedora12/boot下的config文件为例

  cat /boot/config-2.6.31.12-174.2.3.fc12.i686 | grep CONFIG_USB_GSPCA

  CONFIG_USB_GSPCA=m

  CONFIG_USB_GSPCA_CONEX=m

  CONFIG_USB_GSPCA_ETOMS=m

  CONFIG_USB_GSPCA_FINEPIX=m

  CONFIG_USB_GSPCA_MARS=m

  CONFIG_USB_GSPCA_MR97310A=m

  CONFIG_USB_GSPCA_OV519=m

  CONFIG_USB_GSPCA_OV534=m

  CONFIG_USB_GSPCA_PAC207=m

  CONFIG_USB_GSPCA_PAC7311=m

  CONFIG_USB_GSPCA_SN9C20X=m

  CONFIG_USB_GSPCA_SN9C20X_EVDEV=y

  CONFIG_USB_GSPCA_SONIXB=m

  CONFIG_USB_GSPCA_SONIXJ=m

  CONFIG_USB_GSPCA_SPCA500=m

  CONFIG_USB_GSPCA_SPCA501=m

  CONFIG_USB_GSPCA_SPCA505=m

  CONFIG_USB_GSPCA_SPCA506=m

  CONFIG_USB_GSPCA_SPCA508=m

  CONFIG_USB_GSPCA_SPCA561=m

  CONFIG_USB_GSPCA_SQ905=m

  CONFIG_USB_GSPCA_SQ905C=m

  CONFIG_USB_GSPCA_STK014=m

  CONFIG_USB_GSPCA_SUNPLUS=m

  CONFIG_USB_GSPCA_T613=m

  CONFIG_USB_GSPCA_TV8532=m

  CONFIG_USB_GSPCA_VC032X=m

  CONFIG_USB_GSPCA_ZC3XX=m

  可以看到gspca系列驱动被编译为模块。当插入摄像头后,使用dmesg命令可以打印出以下信息:

  usb 1-1.2: new full speed USB device using ehci_hcd and address 6

  usb 1-1.2: New USB device found, idVendor=046d, idProduct=08af

  usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0

  usb 1-1.2: configuration #1 chosen from 1 choice

  gspca: probing 046d:08af

  zc3xx: probe 2wr ov vga 0x0000

  zc3xx: probe sensor -> 0011

  zc3xx: Find Sensor HV7131R(c)

  gspca: probe ok

  这说明该摄像头被识别,且自动挂载了gspca系列下的zc3xx驱动。

  如果由于某种原因,已配置的内核中没有包括摄像头驱动,可以重新配置内核选项,用新编译的内核替换原有的旧内核。或者是依据设备号及产品号,直接到对应驱动的项目主页,下载源码进行编译。

  最后总结一下

  如果你想买一个摄像头,推荐买Logitech的,买符合UVC驱动的,可以到这里挑一款。

  如果你已经有了一个摄像头,先插进去看看,Linux对它有没有反应。记录dmesg输出信息,记录lsusb输出设备号,以设备号为关键字上Google搜索。

linux下摄像头驱动分类相关推荐

  1. Linux 下摄像头驱动支持情况

    http://eatdrinkmanwoman.spaces.live.com/blog/cns!97719476F5BAEDA4!1336.entry http://weijb0606.blog.1 ...

  2. 【驱动】linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  3. linux下I2C驱动架构全面分析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  4. linux 网卡驱动分析,基于linux下网卡驱动分析及实现技术研究

    摘    要 Linux技术是当前计算机技术中最大的一个热点,在我国以及全世界得到了迅猛的发展,被广泛的应用于嵌入式系统.服务器.网络系统.安全等领域.从而使得掌握在 Linux环境下的开发技术,成为 ...

  5. Linux下I2C驱动框架全面解析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  6. linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序

    内核版本:linux-3.4.2 源程序:    linux-3.4.2\drivers\i2c\busses\I2c-s3c2410.c 这次要解决的问题是:如何配置soc的I2C模块,输出想要的时 ...

  7. linux下IIC驱动开发分析

    1.  IIC规范 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.IIC总线产生于在80年代,最初为音频和 ...

  8. nvidia Quadro P620在linux下安装驱动

    nvidia Quadro P620在linux下安装驱动 在官网上下载最新的驱动: NVIDIA-Linux-x86_64-460.67.run 执行安装的时候提示: ERROR: You appe ...

  9. linux系统下的打印机驱动下载,方法论:Linux下如何驱动主流品牌打印机

    薄荷站长浸淫 Linux 桌面领域十余年,一直致力于 Linux 桌面系统的推广.对于桌面用户办公中必需的打印功能,薄荷站长也是有所研究.为了使新手朋友们少走弯路,薄荷站长介绍一下常见品牌打印机的 L ...

最新文章

  1. 随机森林案例分析:德国银行信贷风险分析
  2. 【Python教程】30个语言特性技巧整理
  3. [设计模式]依赖倒转原则
  4. 红帽和Mirantis宣告结束OpenStack合作
  5. 使用Genymotion模拟器
  6. 他山之石——VBA SQL基础
  7. 【爬虫】用Python爬取《Nature》杂志文章的题目、摘要、下载地址
  8. 毫米波雷达系统构成、测量原理(测距、测速、角速度)
  9. matlab矩阵赋未知数,matlab设未知数
  10. python核心教程:min函数和max函数用法
  11. SpringBoot--任务:邮件任务
  12. 2023最新最新ChatGPT超全面从基础到实战视频教程/有兴趣自己学
  13. C#-财务管理系统(成本核算)
  14. 高逼格故宫介绍网页源码
  15. c++虚函数实现原理
  16. 设计模式系列:中介者模式
  17. 哈工大软件构造第一章
  18. AC的LAN3接口我在WEB里改为三层模式后,再改回二层就不能供电了 AP起不来了怎么恢复?
  19. flv.js解析与使用
  20. 题目:某些SELECT语句中的WHERE子句不使用索引,以下说法正确的是()

热门文章

  1. 请问如何购买《中国电子地图2006》?
  2. GBase 8s V8.8 SQL 指南:教程-5.1.1
  3. 小而全的Pandas数据分析案例
  4. 【设计模式】【27】规格模式
  5. Python+经济学:无差异曲线与效用函数可视化
  6. (转)同时装Office 2003、2007和2010版本切换重新配置问题
  7. Transformer Assemble(PART III)
  8. Mac电脑如何看Geekbench 5跑分?
  9. php作业的ppt,1、认识PHP.ppt
  10. 装饰者模式 VS 建造者模式