2. 在 Linux 中启用对您的(网络摄像头)硬件的支持

2.1. 驱动程序和模块

为了使您的网络摄像头工作,您将需要连接支持和实际摄像头硬件支持。那些已经精通内核和模块以及如何加载它们的用户应该跳到 第 2.2 节,该节讨论连接类型的支持。如果您知道您的 USB、IEEE 1394 或任何您将连接摄像头的总线已经配置并正常工作,则应转到 第 2.3 节 中列出的特定网络摄像头硬件列表。

网络摄像头驱动程序通常通过以下三种方式之一提供:在内核中,作为可编译的独立模块,或者作为来自您的 Linux 发行版的预编译(打包)二进制驱动程序提供。

2.1.1. 模块还是内置于内核?

通常,您初始安装的默认内核或操作系统的运行部分可能已经支持您所需的功能。您的 Linux 发行版供应商可能已经启用了最常用的选项,包括总线或连接类型,以及常见摄像头型号的驱动程序。驱动程序可以作为可加载模块存在,也可以内置于已运行的内核中。

判断驱动程序是否已启用的一个简单方法是使用 dmesg 命令,并通过管道传递给 less(为了方便分页),以查找系统启动时已加载的确认信息

   $  dmesg | less

...这可能会根据您的硬件产生如下所示的输出

   Dec 18 17:35:18 localhost kernel: hub 5-0:1.0: USB hub found
   Dec 18 17:35:18 localhost kernel: hub 5-0:1.0: 2 ports detected
   Dec 18 17:35:18 localhost kernel: Linux video capture interface: v1.00
   Dec 18 17:35:18 localhost kernel: quickcam: QuickCam USB camera found (driver version QuickCam USB $Date: 2005/01/07 13:29:53 $)
   Dec 18 17:35:18 localhost kernel: quickcam: Kernel:2.6.7 bus:1 class:FF subclass:FF vendor:046D product:0840
   Dec 18 17:35:18 localhost kernel: quickcam: Sensor HDCS-1000/1100 detected
   Dec 18 17:35:18 localhost kernel: quickcam: Registered device: /dev/video0
   Dec 18 17:35:18 localhost kernel: usbcore: registered new driver quickcam

如果您没有看到相关信息,则特定的驱动程序可能以可加载模块的形式存在。如果您知道该模块的名称,请尝试使用find; 在此示例中,我们正在查找 'ibmcam' 模块

  $  find /lib/modules -name ibmcam.o

请注意,在 2.4 系列之前的模块具有后缀.o; 对于 2.6+ 系列内核,这被替换为.ko.

您可以通过在命令行输入以下命令来获取所有可用模块的列表

  $  ls -R /lib/modules/`uname -r`/kernel 

其中 `uname -r`,用反引号 (`) 包围,是您的内核版本号。以下输出是您可能在已为 USB 网络摄像头准备好的内核中找到的一个示例,其中所有内容都作为模块加载(为了简洁起见,除相关行外,其余行都已编辑)

   ./usb: usbvideo.o usbcore.o ibmcam.o

一旦您知道您的摄像头需要哪个模块,您可以通过在命令行输入以下命令来确定它是否已被加载

   #  lsmod

如上面的提示符所示,您需要具有 root 权限才能执行此操作。您应该获得类似于以下内容的输出

   cdrom                  29312   0  (autoclean) [sr_mod]
   usb-ohci               17888   0  (unused) 
   usbcore                56768   0  [scanner ibmcam usbvideo usb-ohci] 
   ibmcam                 39680   0

大多数默认内核都使用kmod编译,这会在检测到相应的硬件时启用自动加载必要的模块。然而,它可能并不总是这样做,因此如果您没有找到您正在寻找的特定模块被加载,并且您认为该模块可能可用,请尝试使用 modprobe 手动加载它,如下例所示,使用ibmcam模块作为示例

   # modprobe -v ibmcam

特定网络摄像头型号的驱动程序,或指向托管驱动程序代码的项目页面的链接,在 第 2.3 节 中概述。驱动程序通常通过以下三种方式之一提供:在内核中,作为可编译的独立模块,或者作为来自您的 Linux 发行版的预编译二进制文件提供。

如果未找到对您的驱动程序的支持,无论是静态内置于内核还是作为模块提供,请不要灰心。许多型号的驱动程序都在 Linux 内核源代码中(可直接从 kernel.org 源代码仓库获取),或者在与内核分开提供的代码中,这些代码可以配置为与您当前的设置一起工作,如 第 2.1.2 节 中所述。如果您的网络摄像头驱动程序在内核源代码中可用,但未在您的默认系统中作为模块或其他方式启用,您可以从您拥有的源代码重新编译内核,或者获取新版本的内核源代码,可以是由您的 Linux 发行商预先打包的,也可以直接从之前的链接获取(作为所谓的 “vanilla” 内核)。如果您不熟悉编译自己的内核的先决条件和步骤,我建议您参考 内核 HOWTO 以获取更多信息。

2.1.2. 补丁、纯源码还是预编译二进制文件?

您可能会发现您的网络摄像头仅由内核补丁支持,由不需要重新编译内核的纯源码驱动程序支持,或者您甚至可能很幸运地拥有一个发行版,该发行版为您的计算机架构提供了预编译和打包的二进制驱动程序。前者所涉及的步骤在很大程度上超出了本文档的范围,并且可能最好在 第 2.3 节 中找到的特定型号驱动程序的网页上提供的文档中概述。然而,关于这些过程的更通用文档将在 第 5 节 中讨论。

2.2. 支持连接类型

2.2.1. USB 网络摄像头

如果您有 USB 网络摄像头,则很可能已经为您的设备编写了 Linux 驱动程序。在 Linux 中支持 USB 设备有两种方法。一种是更传统的内核支持,另一种是通过 libusb。对于至少一个网络摄像头类别,即基于 STV0680 的型号,建议使用可用的 libusb 支持,至少根据 Sourceforge 上关于该主题的页面

除非您知道您的驱动程序需要 libusb 支持,否则您可能应该坚持使用更传统的内核内 USB 设备支持,这将在 第 2.2.1.2 节 中开始介绍。

2.2.1.1. Libusb

Libusb 是一个库,允许通过用户空间访问 Linux 中的 USB 功能,而无需启用内核支持和插入模块。目前,大多数发行版都在其稳定分支中提供 libusb(并且某些发行版默认安装它),因此如果您尚未对 USB 设备进行内核支持,那么您可能只需要安装 libusb 包即可访问您的设备。您必须在内核中启用 USB 设备文件系统支持,大多数发行版都这样做。要确定是否已启用,请在命令行执行以下命令

   $  cat /proc/filesystems

您应该看到(其中包括)

   nodev    usbdevfs 
   nodev    usbfs

您可能需要挂载 usbdevfs 以启用它并查看设备文件,您可以使用 mount -t usbdevfs none /proc/bus/usb 在命令行执行此操作。当您的特定内核网络摄像头支持静态启用或模块被加载时,请勿尝试使用 libusb;您一次只能使用一种方式。

您可以从您的 Linux 发行版中以.rpm, .tgz.deb格式获取 libusb 包。

2.2.1.2. Linux 内核 USB 支持

如果不使用 libusb(如上所述),则 USB 网络摄像头支持需要内核支持。

对于 2.2 和 2.4 系列内核,您的 USB 网络摄像头可能需要usbvideo模块才能正常工作。这在 2.6+ 系列中不是必需的。

对于 Linux 中的通用 USB 总线支持,您需要在内核中支持 USB 子系统,无论是 usb-ohci、usb-ehci 还是您的系统首选的任何 USB 驱动程序版本。自 2.2 系列后期以来,Linux 内核中就已存在 USB 子系统支持。有关 USB 支持的更深入讨论,我建议您访问 Linux-usb 项目站点。如果您想找出已加载了哪些模块,请在命令行或 xterm 中键入以下命令

   #  lsmod

如上面的提示符所示,您需要具有 root 权限才能执行此操作。您应该获得类似于以下内容的输出

   cdrom	       29312   0  (autoclean) [sr_mod]
   usb-ohci	       17888   0  (unused) 
   usbcore             56768   0  [scanner ibmcam usbvideo usb-ohci] 
   ibmcam              39680   0

如果您没有找到您正在寻找的特定模块被加载,并且您认为该模块可能可用,请尝试直接加载它(以 usb ibmcam 模块为例)

   #  modprobe -v ibmcam

...此时您应该看到类似以下的内容

   Using /lib/modules/2.4.20/kernel/drivers/usb/ibmcam.o

通过在ibmcam(例如)/etc/modules中放置条目(请注意,这因发行版而异),您可以使模块在启动时自动加载。然后,您可以通过检查 syslog 或启动时间记录(使用 dmesg | less)来确认模块是否已加载,您应该在其中看到类似以下的条目

   Oct 18 12:43:12 K7 kernel: hub.c: new USB device 00:02.3-2, assigned address 3 
   Oct 18 12:43:12 K7 kernel: ibmcam.c: IBM PC Camera USB camera found (model 2, rev. 0x030a) 
   Oct 18 12:43:12 K7 kernel: usbvideo.c: ibmcam on /dev/video1: canvas=352x240 videosize=352x240

2.2.2. IEEE 1394 ( Firewire™, i.Link™)

IEEE 1394 网络摄像头需要 IEEE 1394 PCI 卡或主板上的 IEEE 1394 总线端口。自 2.4 系列早期内核以来,Linux 中已支持 IEEE 接口。如果您很幸运地拥有这样的设备,可以在 www.linux1394.org 上找到有关 Linux 中 IEEE 1394 总线支持的通用信息。如果您的内核版本早于 2.4.2,您将需要使用 此页面 上找到的与您的内核版本匹配的补丁之一来修补您的内核。此外,您还需要 libraw1394。先前引用的 linux1394.org 站点有一个很棒的安装指南。

Damien Douxchamps 的 IEEE1394 数字相机列表,对 IEEE 1394 相机的功能以及各个型号的当前支持状态进行了出色的总结。

2.2.3. Parport 网络摄像头的通用并行端口支持

对于 2.2 和 2.4 内核系统,必须静态或作为模块启用并行端口支持(默认内核通常默认启用此功能)。在开始此过程之前,您可能需要阅读 有关 Linux 内核中并行端口设备的支持的更多通用信息。要确定parport模块是否已加载,您可以检查dmesg文件或使用如上所述的 lsmod 命令。使用 dmesg | less,您应该看到(在许多其他行中)以下内容

   Mar  3 08:00:25 K7 kernel: parport0: PC-style at 0x378 (0x778) [PCSPP,TRISTATE] 
   Mar  3 08:00:25 K7 kernel: parport0: irq 7 detected

如果您正在编译自己的内核,请启用“并行端口支持”。您应该启用“IEEE 1284 传输模式”,如果您具有 x86 类型架构,您还应该启用“PC 风格硬件”。

如果当您尝试加载模块时 modprobe 返回错误,请注意,您可能需要在调用 modprobe 时确定并提供硬件地址。对于 x86 系统,最常见的地址是 0x378;0x278 和 0x3BC 是集成或 ISA 并行端口的其他可能性。附加 PCI 并行端口可能具有不寻常的基地址。您还可以使用 parport_pc 或 parport_arc 模块安排多个设备,尽管该主题超出了本文档的范围。

Warning

警告:在命令行输入此信息之前,请确保您拥有正确的地址,否则您的机器可能变得不稳定、崩溃或发生其他故障。

您的并行端口应最好设置为 “EPP” 模式,或备选 ECP/EPP。“双向”(也称为 “BPP”“PS/2”)可能有效,尽管速度会慢得多。“单向”模式不适合扫描。至少在 x86 系统上,通常可以通过 BIOS 菜单访问上述设置。

2.3. 特定网络摄像头型号

请注意,此信息经常更改。如果您有 USB 网络摄像头,Linux-USB 设备概述 站点是一个很好的查找位置。此外,您还需要在 http://www.exploits.org/v4l/ 上查看您的型号主页。下面编译的关于特定网络摄像头型号的信息来自同一来源,因此您可以通过之前的链接找到更多最新的信息。如果您找不到特定硬件的条目,您可以找到有关如何编写自己的驱动程序的资源链接!

Important

重要的是要注意,如果您的摄像头未在列表中列出,找出您的摄像头是否受支持的最简单方法是找出其制造中使用的芯片组。

此信息通常在您的网络摄像头手册或制造商网站上发布的规格中提供。

如果您找不到列出的摄像头型号,并且不确定您的摄像头是用什么芯片组制造的,您应该考虑搜索和/或订阅 Redhat 托管的 video4linux-list 邮件列表。

2.3.1. 3com HomeConnect PC 数字网络摄像头

此驱动程序通过位于 homeconnectusb 项目 网页上的内核补丁提供支持。根据您的内核版本,可能需要在打补丁后重新编译内核。

2.3.2. 基于 CPiA 的网络摄像头

请参阅 项目主页 以获取最新信息。此芯片组已用于制造 USB 和并行端口网络摄像头,包括以下型号

  • Aiptek HyperVcam Fun USB(非基于 OV511)

  • Creative Video Blaster WebCam II USB 和并行端口

  • CVideo-Mail Express 并行端口

  • Digicom Galileo USB 和 Digicom Galileo Plus

  • Dynalink 数字相机

  • Ezonics EZCam(非 Pro 或 Plus)

  • I-View NetView NV200M

  • Microtek EyeStar USB

  • Pace Color Video Camera USB

  • SuperCam WonderEye

  • TCE Netcam 310 USB

  • Terracam USB(非基于 OV511 或 Terracam Pro)

  • Trust SpaceC@m Lite USB 和 SpaceC@m 100

  • Utopia USB Camera

  • ZoomCam USB 和并行端口

2.3.3. 基于 SE401、SE402 和 EP800 的 USB 网络摄像头

此项目正在进行中。驱动程序和其他有用信息可在位于 此处 的项目主页上找到。在撰写本文时,必须打补丁和重新编译内核才能获得对这些型号的支持。该驱动程序支持以下型号

通过 'se401' 驱动程序的 SE401 芯片组

  • Aox SE401 相机

  • Philips PCVC665 USB VGA 网络摄像头 'Vesta Fun'

  • Kensington VideoCAM PC Camera(型号 67014-67017)

通过 'epcam' 驱动程序的 SE402 和 EP 800 芯片组

  • Spypen Actor

  • Rimax Slim Multicam

  • Concord Eye-Q Easy

  • Creative PD1001

  • Chicony DC-100

  • Endpoints SE402 和 EP800

2.3.4. 基于 OmniVision 的网络摄像头

此类别包括 Omnivision 制造的众多网络摄像头和视频捕获设备,包括 OV511(+)、OV518(+)、OV6620、OV6630、OV7610 和 OV7620AE。项目主页位于 此处。支持的型号包括

  • Aiptek HyperVcam Home 和 Mobile

  • Amitech AWK-300

  • I-view NetView NV300M

  • TEVion MD9308

  • Intel Me2Cam

  • Dlink DSB C100、C300

  • Hawking Tech. UC-110、UC-300 和 UC-310

  • Puretek PT-6007

  • Alpha Vision Tech AlphaCam SE 型号 AC-520

  • Creative Labs WebCam 型号 PD1001,带有 OV518 芯片组

  • Creative Labs WebCam 3、WebCam Go、Webcam Go Plus

  • Elecom UCAM-C1C20

  • Elta WEBCam 8211 PCC

  • Ezonics EZPhone Cam

  • Philips ToUCam XS(旧版本,带有 OV518)

  • LG Electronics LPC-UM10

  • Lifeview 各个 USB Life TV 型号

  • Genius VideoCam Express

  • AverMedia Intercam Elite

  • Maxxtro Cam22U

  • MediaForte MV300、PC Vision 300

  • Terratec TerraCam PRO 和一些 TerraCam 型号

  • OmniVision(OV519 除外)

  • TRENDNet TV-PC301

  • Trust Sp@ceC@m USB

  • Lifetec LT9388

  • BestBuy EasyCam U

  • Maxell Maxcam

  • TCE NetCam 310u

  • Medion MD9388

  • Webeye 2000B

  • Suma eON

  • Prochips PCA-3100

  • Ezonics EZ USB Cam II(OV511+ 型号)

  • Waytech I-Pac VIC-30

  • Zoom Telephonics ZoomCam III USB(型号 1598)

2.3.5. 罗技(以前的 Connectix)Quickcam 支持

QuickCam VC USB 和并行端口型号网络摄像头由 此处 提供的驱动程序支持。支持此型号需要内核补丁和重新编译。

Quickcam 驱动程序由两个不同的项目提供,这两个项目为某些 Quickcam 型号提供两种不同的驱动程序版本,这两种驱动程序都是独立的驱动程序,不需要内核补丁或重新编译。qce-gaqc-usb 驱动程序支持以下型号

  • 罗技(早期型号)Quickcam Express

  • Quickcam Web

  • Legocam

  • Dexxa Webcam

  • Labtec Webcam

qc-usb 驱动程序更具实验性,但据报告在某些型号(如 Quickcam Web)上效果更好。此外,我收到的反馈表明,较新版本的罗技 Quickcam Express 不再与上述驱动程序兼容;相反,此页面 提供了一个声称支持较新型号的实验性驱动程序。

Redhat 用户注意:qce-ga 驱动程序无法使用 Redhat 9 中提供的修改后的内核源代码正确编译,但 此处 提供了修复程序。

某些罗技相机型号受 第 2.3.8 节 中的 Philips 驱动程序支持。

2.3.6. 基于 ICM532 的网络摄像头

此芯片组的一个驱动程序,主页在此, 现在已合并到 2.6 内核源代码中;另一个驱动程序(根据开发人员自己的描述)是实验性的,可从 此处 获取。两者或两者都声称支持以下型号

  • IC-Media Corp Pencam

  • 较新版本的罗技 Quickcam Express

  • 较新版本的 Labtec Webcam

  • Biolux 654 显微镜

  • Ezonics EZCam USB II (uvt8532)

  • Ezonics EZCam USB III

  • TerraCam USB

  • Stick Webcam

  • Mini WebCam

  • Tucan PenCam

  • Che-ez! Webbie

  • SNAKE EYE SI-8480/8481

  • PC CAM CP03

  • WEB Camera PBC0006

  • Clipcam

2.3.7. 基于 NW802 的网络摄像头

此芯片组由 DIVIO 制造,由 此处 找到的驱动程序支持。支持的型号包括以下型号

  • BTC SurfCam CMOS300k

  • Mustek WCam 300

  • 罗技 QuickCam Pro USB(早期的“黑色对焦环”型号)

2.3.8. Philips USB 网络摄像头

由于 Philips Corporation 与之前的pwc驱动程序的维护者之间的不公开协议到期,以前对基于 Philips PWC 芯片的网络摄像头的内核支持已被移除。幸运的是,一个新的、仍然是实验性的驱动程序正在开发中,它不需要专有模块。旧站点,讨论了此更改,可以在 http://www.smcc.demon.nl/webcam/ 上查看;新驱动程序在 saillard.org 上维护,更多信息请访问 PWC 文档项目

上述驱动程序支持的 Philips 型号包括以下型号。

  • PCA645VC

  • PCA646VC

  • PCVC675K Vesta、Vesta Pro 和 Vesta Scan

  • PCVC720K/40 ToUCam XS、ToUCam Fun、ToUCam Pro 和 ToUCam Scan

  • Askey VC010

  • Creative Labs Webcam 5、Pro Ex

  • 罗技 3000 和 4000 Pro、Notebook Pro 和 Zoom

  • Samsung MPC-C10 和 MPC-C30

  • Sotec Afina Eye

  • Visionite VCS UM100 和 UC300

2.3.9. SPCA50X USB 相机 Linux 驱动程序

有关此芯片组的信息可以在 此处 找到,并且正在大力开发中,包括对以下型号的部分或完全支持

  • Kodak DVC-325 和 EZ200

  • Creative PC-CAM 300、600、750

  • Genius VideoCAM Express V2

  • Micro Innovation IC 200/IC 150

  • 罗技 ClickSmart 310、420、510、820 和 Cordless 型号

  • 罗技 Pocket750

  • Benq DC 1016、1300、1500、3410

  • Flexcam 100

  • Aiptek MegaCam、[1.3 百万像素] Mini PenCam 和 PocketCam 1.3M Smart

  • Finet Technology Palmpix DC-85

  • Pure DigitalDakota

  • 3Com Home Connect lite

  • Megapix V4

  • Mustek gSmart:Mini、Mini2、Mini3、LCD 2、LCD 3

  • Digital Dream Enigma 1.3、Epsilon 1.3

  • Maxwell Compact Pc PM3

  • Jenoptik 型号

  • Minton S-Cam F5

  • D-Link DSC-350

  • Trust FamilyC@m 300 Movie

  • Aiptek Pocket DV、PocketDVII、DV3100+、mini PenCam 2、PocketCam 3M、Pencam SD 2、Pocket DV3500

  • Hama Sightcam 100

  • Micro Innovations IC50C、IC400c

  • FlyCam USB100

  • Arowana USB Camera 300 K

  • Intel Easy PC Camera、CS120 (Easy PC Share)、PC Camera Pro (CS431)、Pocket PC Camera (CS630)

  • Grandtec V.cap

  • Sigma-Apo Petcam

2.3.10. 基于 STV0680 的型号

使用此芯片组制造的 USB 版本网络摄像头受 2.4.18 及更高版本的内核支持,带有stv680.o模块。或者,您可以从 项目主页 获取源代码。此驱动程序支持包括 Aiptek Pencam 和 Nisis Quickpix 2 的型号。

如果您有串行版本,其中主要的型号是 Scan e-Studio,您应该访问 此处

2.3.11. Winbond w9966cf

这是并行端口接口的驱动程序,支持 Philips SAA7111 CCD 控制芯片,该芯片可在 Lifeview Flycam SUPRA 网络摄像头上找到。它包含在 2.4 内核系列后期版本以及 'video4linux' 支持中。此项目的主页是 此处。

2.3.12. 基于 Xirlink C-it™ HDCS-1000 的网络摄像头

此驱动程序适用于 Xirlink、IBM (PC Camera) 和 Veo Stingray 型号网络摄像头制造的 USB 网络摄像头。自 2.2.12 版本起,Linux 内核的 USB 部分就已提供支持。主页位于 http://www.linux-usb.org/ibmcam