修订历史 | ||
---|---|---|
修订版 1.61 | 2005-02-21 | 修订者:jhs |
关于重启 Philips 网络摄像头驱动程序开发的更新 | ||
修订版 1.6 | 2005-01-02 | 修订者:jhs |
错误修正,部分重写以提高可读性,新的芯片组和更新 | ||
修订版 1.1 | 2004-01-12 | 修订者:jhs |
针对 2.6 系列内核发布的更新以及关于基于 NW802 的网络摄像头的信息 | ||
修订版 1.0 | 2003-12-04 | 修订者:JP |
初始版本 / 由 TLDP 审核 | ||
修订版 0.5 | 2003-11-07 | 修订者:jhs |
在 v4l 邮件列表反馈后的最终修订版 | ||
修订版 0.1 | 2003-10-12 | 修订者:jhs |
初始草稿发布 |
本文档旨在帮助读者在 Linux 操作系统中设置和配置网络摄像头、数码相机或其他视频设备。它概述了如何启用必要的内核和/或软件支持,以及可用于访问设备的各种帧捕获应用程序。它不讨论图形和视频格式的差异、特定设备的功能和/或能力,或视频格式的编码或转换。
本文档版权归 Howard Shane 所有,2004-2005 年。
根据 GNU 自由文档许可证 1.2 版或自由软件基金会发布的任何后续版本的条款,允许复制、分发和/或修改本文档,无需不变章节、封面文本和封底文本。许可证副本可以在附录 A中找到。
对本文档的内容不承担任何责任。使用本文档中的概念、示例和其他内容,风险完全由您自行承担。由于这是一个新版本,可能存在技术或其他不准确之处,可能导致不可替代的数据丢失。在任何情况下,请谨慎操作,并意识到尽管错误极不可能发生,但作者对这些错误不承担任何责任。
所有版权均归其各自所有者所有,除非另有明确说明。在本文档中使用术语不应被视为影响任何商标或服务标志的有效性。
对特定产品或品牌的命名不应被视为认可。
我要感谢所有为 Linux 视频支持做出开创性贡献的个人,特别是 v4l 和 v4l2 团队、Gerd Knorr 以及 Metzler 兄弟等等。
此外,我要感谢 Marla,她优雅地无条件接受我的不完美和怪癖,包括我对诸如此类项目的痴迷。
请将任何与本文档相关的补充或评论发送至以下电子邮件地址<hshane[AT]austin.rr.com>。特别是,如果您有关于新设备或支持的接口或勘误表的信息,请与我联系,以便我们保持本文档的最新状态!
以下约定用于本文档中,并在此处为那些可能尚未完全了解如何在 Linux 中访问和控制底层操作系统(通常是通过 Bash shell)的用户概述。
首先,文件名在段落中像这样引用/path/file
Linux 中的命令在命令提示符下执行(或“调用”),命令提示符也称为“命令行”。如果您处于非图形(基于文本)的环境中,您通常会看到 Bash shell 提示符,它是一个美元符号
$ |
...或井号
# |
...如果您以 root 用户身份登录,或以其他方式获得了 root 或“超级用户”权限。您也可以在 X 窗口系统(也称为 X 或 X11)中使用 xterm 或类似的 X 终端模拟器访问 Bash shell。要在 Bash 提示符下执行的命令,但在本文档的段落中引用,通常如下所示:do this now
命令和/或命令的输出结果也可能在其自己的段落或标题中使用屏幕输出进行概述
$ date Sun Jul 27 22:37:11 CDT 2003 |
当命令写在 Bash 提示符前面时(例如,上面的 $ date),则假定在命令之后按下了 [Return] 或 [Enter] 键,并且可能在新行上显示输出(例如,在上面的日期示例中)。
为了使您的网络摄像头工作,您需要连接支持和实际摄像头硬件支持。那些已经熟悉内核和模块以及如何加载它们的人应该跳到第 2.2 节,该节讨论连接类型的支持。如果您知道您将摄像头连接到的 USB、IEEE 1394 或任何总线已经配置并正常工作,则应继续阅读第 2.3 节中列出的特定网络摄像头硬件列表。
网络摄像头驱动程序通常以三种方式之一提供:在内核中、作为可编译的独立模块,或作为 Linux 发行版提供的预编译(打包)二进制驱动程序。
通常,您的初始安装的默认内核或操作系统的工作部分可能已经支持您需要的内容。您的 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”内核)。如果您不熟悉编译自己的内核的先决条件和步骤,我建议您参考 Kernel HOWTO 以获取更多信息。
如果您有 USB 网络摄像头,则很可能已经为您的设备编写了 Linux 驱动程序。在 Linux 中支持 USB 设备有两种方法。一种是更传统的内核支持,另一种是通过 libusb。对于至少一个网络摄像头类别,即基于 STV0680 的型号,建议使用 libusb 支持,至少根据关于该主题的 Sourceforge 页面。
除非您知道您的驱动程序需要 libusb 支持,否则您可能应该坚持使用更传统的内核内置 USB 设备支持,从第 2.2.1.2 节开始。
Libusb 是一个库,允许通过用户空间访问 Linux 中的 USB 功能,而无需启用内核支持和插入模块。大多数发行版目前都在其稳定分支中提供 libusb(有些发行版默认安装它),因此如果您尚未获得 USB 设备的内核支持,则可能只需安装 libusb 包即可访问您的设备。您必须在内核中启用 USB 设备文件系统支持,大多数发行版都这样做。要确定是否启用,请在命令行发出以下命令
$ cat /proc/filesystems |
您应该看到(除其他外)
nodev usbdevfs nodev usbfs |
您可能需要挂载 usbdevfs 才能启用它并查看设备文件,您可以使用 mount -t usbdevfs none /proc/bus/usb 在命令行执行此操作。当您的特定内核网络摄像头支持静态启用或模块加载时,请勿尝试使用 libusb;您一次只能使用一个。
您可以从以下位置获取 libusb 包.rpm, .tgz或.deb格式从您的 Linux 发行版。
如果不使用 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 |
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 和 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 模块排列多个设备,尽管该主题超出了本文档的范围。
![]() | 警告:在命令行输入此信息之前,请确保您具有正确的地址,否则您的机器可能会变得不稳定、崩溃或以其他方式崩溃。 |
您的并行端口应设置为首选 “EPP” 模式,或者 ECP/EPP。“双向”(也称为 “BPP” 或 “PS/2”)可能有效,尽管速度会慢得多。“单向”模式不适合扫描。通常可以通过您的 BIOS 菜单访问上述设置,至少在 x86 系统上是这样。
请注意,此信息经常更改。如果您有 USB 网络摄像头,Linux-USB 设备概述站点是一个查找的好地方。此外,您还需要在 http://www.exploits.org/v4l/ 检查您型号的主页。下面编译的关于特定网络摄像头型号的信息来自同一来源,因此您可以通过之前的链接找到更最新的信息。如果您找不到特定硬件的条目,您可以找到有关如何编写自己的驱动程序的资源链接!
![]() | 重要的是要注意,如果您的相机未列出,则找出您的相机是否受支持的最简单方法是找出其制造中使用的芯片组。 |
此信息通常存在于您的网络摄像头手册或制造商网站上发布的规格中。
如果您找不到列出的相机型号,并且不确定您的相机是用什么芯片组制造的,您应该考虑搜索和/或订阅 由 Redhat 托管的 video4linux-list 邮件列表。
请参阅 项目主页 以获取最新信息。此芯片组已用于制造 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 彩色视频摄像头 USB
SuperCam WonderEye
TCE Netcam 310 USB
Terracam USB(非基于 OV511 或 Terracam Pro)
Trust SpaceC@m Lite USB 和 SpaceC@m 100
Utopia USB 摄像头
ZoomCam USB 和并行端口
此项目正在进行中。驱动程序和其他有用信息可在位于 此处的项目主页上找到。在撰写本文时,有必要修补和重新编译您的内核才能获得对这些型号的支持。该驱动程序支持以下型号
通过 'se401' 驱动程序的 SE401 芯片组
Aox SE401 摄像头
Philips PCVC665 USB VGA 网络摄像头 'Vesta Fun'
Kensington VideoCAM PC 摄像头(型号 67014-67017)
通过 'epcam' 驱动程序的 SE402 和 EP 800 芯片组
Spypen Actor
Rimax Slim Multicam
Concord Eye-Q Easy
Creative PD1001
Chicony DC-100
Endpoints SE402 和 EP800
此类别包括 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)
QuickCam VC USB 和并行端口型号网络摄像头由 此处提供的驱动程序支持。支持此型号需要内核补丁和重新编译。
Quickcam 驱动程序由两个不同的项目表示,这两个项目为某些 Quickcam 型号提供两种不同类型的驱动程序,这两种驱动程序都是独立的驱动程序,不需要内核补丁或重新编译。qce-ga 和 qc-usb 驱动程序支持以下型号
Logitech(早期型号)Quickcam Express
Quickcam Web
Legocam
Dexxa Webcam
Labtec Webcam
qc-usb 驱动程序更具实验性,但据报道在某些型号(例如 Quickcam Web)上效果更好。此外,我收到的函件表明,较新版本的 Logitech Quickcam Express 不再与上述驱动程序一起使用;相反,此页面提供了一个实验性驱动程序,声称支持较新的型号。
Redhat 用户请注意:qce-ga 驱动程序无法使用 Redhat 9 中提供的修改后的内核源代码正确编译,但 此处提供了修复程序。
某些 Logitech 相机型号受第 2.3.8 节中的 Philips 驱动程序支持。
此芯片组的一个驱动程序(主页在此处)现在已合并到 2.6 内核源代码中;另一个驱动程序(根据开发人员自己的描述)是实验性的,并且在 此处可用。两者都声称支持以下型号
IC-Media Corp Pencam
较新版本的 Logitech 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
此芯片组由 DIVIO 制造,由 此处找到的驱动程序支持。支持的型号包括以下型号
BTC SurfCam CMOS300k
Mustek WCam 300
Logitech QuickCam Pro USB(早期的“深色对焦环”型号)
由于 Philips 公司与前任维护人员之间的保密协议到期pwc驱动程序,之前对基于 Philips PWC 芯片的网络摄像头的内核支持已被删除。幸运的是,一个新的、仍然是实验性的驱动程序正在开发中,它不需要专有模块。旧站点,讨论了更改,可以在 http://www.smcc.demon.nl/webcam/ 中看到;新驱动程序在 saillard.org 维护,更多信息请访问 PWC 文档项目。
上述支持的 Philips 型号包括以下型号。
PCA645VC
PCA646VC
PCVC675K Vesta, Vesta Pro and Vesta Scan
PCVC720K/40 ToUCam XS, ToUCam Fun, ToUCam Pro and ToUCam Scan
Askey VC010
Creative Labs Webcam 5, Pro Ex
Logitech 3000 and 4000 Pro, Notebook Pro, and Zoom
Samsung MPC-C10 and MPC-C30
Sotec Afina Eye
Visionite VCS UM100 and UC300
有关此芯片组的信息可以在 此处找到,该芯片组正在大量开发中,并且包括对以下型号的部分或完整支持
Kodak DVC-325 和 EZ200
Creative PC-CAM 300、600、750
Genius VideoCAM Express V2
Micro Innovation IC 200/IC 150
Logitech ClickSmart 310、420、510、820 和 Cordless 型号
Logitech Pocket750
Benq DC 1016、1300、1500、3410
Flexcam 100
Aiptek MegaCam、[130 万像素] 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
使用此芯片组制造的网络摄像头的 USB 版本受 2.4.18 及更高版本的内核支持,并带有stv680.o模块。或者,您可以从 项目主页 获取源代码。此驱动程序支持的型号包括 Aiptek Pencam 和 Nisis Quickpix 2。
如果您有串行版本,其中主要的一个是 Scan e-Studio,您应该访问 此处。
这是并行端口接口的驱动程序,它支持 Philips SAA7111 CCD 控制芯片,该芯片在 Lifeview Flycam SUPRA 网络摄像头上找到。它包含在 2.4 内核系列后期及更高版本中,标题为“video4linux”支持。此项目的主页是 此处。
此驱动程序适用于 Xirlink、IBM(PC Camera)和 Veo Stingray 型号网络摄像头制造的 USB 网络摄像头。自 2.2.12 以来,Linux 内核 USB 部分就已提供支持。主页位于 http://www.linux-usb.org/ibmcam。
以下部分适用于所有连接类型。
Linux 内核需要创建一个虚拟设备节点才能访问和控制所讨论的设备。它可能已经在启动时为您创建;ls -l /dev/video*(带星号)或替代地 find /dev -name video* 甚至目视检查/dev目录与您喜欢的文件管理器可以使您了解视频设备是否存在。如果存在,您可以继续阅读第 3.2 节;如果不存在,您将需要手动创建它们。
如果您的 Linux 发行版提供,创建它们的一种简单方法是使用MAKEDEV脚本,它可能位于/dev或用于存储可执行命令的常用位置(/bin,/sbin等等)。的 manual pageMAKEDEV(man MAKEDEV)可以进一步指导您,但请注意特定于设备的命令选项。如果MAKEDEV不起作用或不存在,或者您只是更喜欢用更难的方式做事,请继续阅读下一段。
设备可以创建为块设备(例如驱动器)、fifo(先进先出文件或管道,如 xconsole)或字符设备,它代表其他硬件。每个设备都有一个主设备号和一个次设备号 “坐标”,用于告诉内核它是什么以及在哪里访问它。这些数字不是任意的。按照惯例,主设备号 81 和次设备号 0、1、2 等分配给 Video4linux 设备,包括电视调谐器板和网络摄像头。为了创建视频设备/dev/video0,请在命令行使用 mknod
# mknod /dev/video0 c 81 0 |
其中 c 表示字符设备。
您可以使用以下脚本,该脚本是从内核源代码借用的(位于linux/Documentation/video4linux/bttv/MAKEDEV的源树中)
#!/bin/bash function makedev () { for dev in 0 1 2 3; do echo "/dev/$1$dev: char 81 $[ $2 + $dev ]" rm -f /dev/$1$dev mknod /dev/$1$dev c 81 $[ $2 + $dev ] chmod 666 /dev/$1$dev done # symlink for default device rm -f /dev/$1 ln -s /dev/${1}0 /dev/$1 } # see http://roadrunner.swansea.uk.linux.org/v4lapi.shtml echo "*** new device names ***" makedev video 0 makedev radio 64 makedev vtx 192 makedev vbi 224 # "*** old device names (for compatibility only) ***" #makedev bttv 0 #makedev bttv-fm 64 #makedev bttv-vbi 224 |
只需将以上内容复制并粘贴到您喜欢的编辑程序中,将其另存为 MAKEDEV 或您喜欢的任何名称,使其可执行(即,chmod u+x MAKEDEV),然后以 root 用户身份执行它
# ./MAKEDEV |
最好确保您的用户帐户在所有模块加载和设备节点创建后可以访问设备。最注重安全性的方法是为特定组添加访问权限。在我的系统中,'video' 组的成员被允许使用网络摄像头、扫描仪和其他摄影设备。实现此目的的方法是首先更改/dev中的设备的 ownership,如下所示(以 root 用户身份)
# chown root.video /dev/usb/video* |
...其中 root.video 是设备现在所属的所有者和组。显然,具体命令会因您的系统和设备类型而异。重要的是,您要更改设备节点本身的 ownership,而不是符号链接;符号链接的 ownership 仅受更改它们指向的父设备或文件的影响。
要查看您的用户帐户是否是目标群组的成员,请以 root 身份执行以下命令:grep -e video /etc/group。您应该看到如下内容:
video:x:44: |
...其中 “44” 是群组编号。由于在 “video” 群组中,最后一个冒号后没有成员,我们可以添加成员,比如用户 “jhs”,使用以下命令:
# adduser jhs video |
在此之后,只需允许目标用户对设备进行读取和写入访问,就像这样:
# chmod g+rw /dev/v4l/video0 |
...其中 g+rw 表示为group 群组添加read 读取和 write 写入权限。有关更多信息,请参阅 chmod 的文档(man chmod 或 info chmod)。
顾名思义,这些程序不需要 X Window 系统来操作您的相机和捕获图像。
Streamer 是一个通用的程序,允许仅使用命令行从网络摄像头或视频设备进行捕获。它可能在您的 Linux 发行版的 Xawtv 软件包中提供,或者可能需要单独获取,例如在 Debian 中。您可以在 Gerd Knorr 的 Xawtv 主页 找到它以及更多信息。
要从命令行拍摄标准 JPEG 图片,其中通过以下方式访问相机:/dev/video0:
$ streamer -c /dev/video0 -b 16 -o outfile.jpeg |
...其中 -b 是颜色数(以 bpp 为单位,无论是 15、16、24 还是 32),-o 是输出文件名,将放置在当前目录中(指定 -o /path/outfile.jpg将其放置在其他位置)。如果您要捕获多个图像,请务必在输出文件名后附加零,因为 streamer 可以按顺序命名捕获文件,即,-o outfile000.jpeg变为outfile001.jpeg, outfile002.jpeg,依此类推。
要制作 .avi 文件
$ streamer -q -c /dev/video0 -f rgb24 -r 3 -t 00:30:00 -o /home/jhs/outfile.avi |
...其中 -q 用于 “quiet” 静默执行(无消息输出),-f 是 “format” 格式(rgb24 是 TrueColor avi),-r 是每秒帧数,-t 是录制时间(30 分钟)。Streamer 可以捕获 raw 和 Quicktime™ (非 Sorensen) 格式,也可以捕获音频。有关更多信息,请参阅 streamer --help。
CamE 是一个命令行程序,以守护程序模式工作,从您的 v4l 设备捕获帧,用于存档或上传(例如,到 Web 服务器),通过 ftp 或 scp。您可以通过更改配置文件中的相应行来覆盖其他图形、为帧添加时间戳或添加其他动态文本。有关更多信息,请参阅 camE 主页。
Motion 是一个出色的程序,能够监控来自一个或多个网络摄像头的视频信号。它可以记录周期性快照,并在检测到运动时,录制 mpeg 和/或执行另一个操作,例如发送电子邮件或执行命令。它可以跟踪和图形化标记它检测到的运动,通过 http 服务器将文件馈送到您的网站,将它们流式传输到另一个应用程序等等。命令行选项的数量可能令人生畏;但是,有一个 在线 Wiki,很好地概述了各种命令和配置文件选项。Motion 主页可以在 这里 找到。
Webcam 是一个自动化的命令行工具,用于操作网络摄像头,也可以从 Xawtv 主页 获得。它非常适合自动化操作,例如来自 cron 作业,因为它不需要任何命令行选项,只需要一个预先编辑的配置文件(通常是~/.webcamrc)。它与上面的 camE 类似,可以捕获图像并通过 ftp 或 ssh 将其上传到 Web 服务器。
SANE,或 Scanner Access Now Easy,在更高版本中支持访问 v4l 设备,包括网络摄像头。如果您熟悉在 Linux 中使用照片扫描仪设备,您可能会对使用 SANE 进行图像捕获感兴趣,尤其是一些设备兼作扫描仪和数码相机。请参阅 Scanner-HOWTO 的相关章节 这里。
Xawtv 是一个基于 X 的程序,用于访问 Linux 中的视频设备,包括电视调谐设备和网络摄像头。主页位于 http://bytesex.org/xawtv。
当您第一次尝试使用网络摄像头,并且您认为配置正确时,请使用 -hwscan 选项
$ xawtv -hwscan This is xawtv-3.72, running on Linux/i686 (2.4.21) looking for available devices /dev/v4l/video0: OK [ -device /dev/v4l/video0 ] type : v4l name : BT878(Hauppauge (bt878)) flags: overlay capture tuner /dev/v4l/video1: OK [ -device /dev/v4l/video1 ] type : v4l name : IBM USB Camera flags: capture |
...这样您现在可以看到可用的设备(您的输出可能大相径庭)。尝试打开一个 xterm 并运行 xawtv,从您的网络摄像头视频设备抓取
$ xawtv -c /dev/video1 This is xawtv-3.72, running on Linux/i686 (2.4.21) |
...并且(希望)您的相机将开始捕获到桌面上的一个窗口。如果事情不顺利,您可能会在 xterm 中看到一些错误消息,这有助于诊断配置问题。如果您对所有这些都不感兴趣,并且一切对您来说都有效,请下次从窗口管理器的菜单启动。您可以使用 man xawtv 阅读有关更多 xawtv 选项的信息。
Gqcam 是一个图形化的基于 GTK+ 的应用程序,最初是为访问 Connectix QuickCams 而编写的,但现在几乎支持所有 Video4Linux 兼容的网络摄像头设备。它具有直观的界面,使查看、拍摄快照和配置网络摄像头设置变得非常容易。强烈推荐给那些只想偶尔拍一张照片,而不想编辑配置文件或使用命令行的人。
GnomeMeeting 是一个用于 Gnome2 桌面的 VOIP/IP 电话应用程序,也支持使用网络摄像头进行视频会议。主页可以在 gnomemeeting.org 找到。
使用 lsusb;它也可以让您了解系统上可用的其他 USB 设备
$ lsusb Bus 007 Device 001: ID 0000:0000 Bus 006 Device 001: ID 0000:0000 Bus 005 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 003: ID 0545:8080 Xirlink, Inc. IBM C-It WebCam Bus 003 Device 002: ID 046d:0840 Logitech, Inc. QuickCam Express Bus 003 Device 001: ID 0000:0000 Bus 002 Device 003: ID 051d:0002 American Power Conversion Back-UPS Pro 500/1000/1500 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 |
“ID” 后的数字分别是供应商和产品编号。然后可以在 Linux USB ID 目录 中查找它们。
如果 lsusb 对您不可用,并且您支持/proc文件系统支持和 USB 文件系统支持,请在命令行中执行以下操作
$ cat /proc/bus/usb/devices |
您应该收到包括(但不一定限于)以下内容的输出
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=3 Spd=12 MxCh=0 D: Ver= 1.01 Cls=ff(vend.) Sub=ff Prot=ff MxPS=8 #Cfgs=1 P: Vendor=0545 ProdID=8080 Rev= 3.0a S: Product=USB IMAGING DEVICE |
以 “T:” 开头的行是设备连接到的 USB 总线。“P:” 表示(显然)供应商和产品 ID,它们在 linux USB 项目主页 中编目。
首先,检查您的 Linux 发行版是否提供驱动程序的预编译二进制文件。然后您可以像正常加载模块一样加载它。如果不是这种情况,请确保您已安装内核源代码。您还需要至少安装 GNU make、gcc、binutils,以及可能取决于您的发行版的其他程序。(Debian 用户应参阅下一节,了解特定于该发行版的说明。)
下载驱动程序源代码(在本例中名为src.tar.gz)并解压缩/解压它
$ tar -xvzf src.tar.gz |
然后,更改到您的内核源代码目录
# cd /usr/src/linux |
制作必要的源文件
# make oldconfig # make dep |
现在,更改到您解压缩驱动程序源代码的目录,并阅读 README 和/或 INSTALL 文件,以获取有关如何制作驱动程序的说明。通常,这涉及 “make”、“make all” 和/或 “make install” 的某种组合。假设它编译正确,您可以简单地使用 modprobe 加载新模块。如果您有任何问题,请参阅 第 5.7 节。
在作者看来,使用自动化的kernel-package实用程序要简单得多。首先,使用 apt-get 安装它及其依赖项。接下来,安装您想要的内核源代码(例如,apt-get install kernel-source-2.X.X)。使用 tar -xvjf 解压 bzip2 压缩的内核源代码,然后创建一个名为linux的符号链接,指向新的源代码
# ln -s /usr/src/kernel-source-2.X.X /usr/src/linux |
然后 cd /usr/src/linux 并清理:make-kpkg clean,然后按照编译新内核的方式使用 make menuconfig 或 make xconfig。接下来,您可以使用 make-kpkg kernel_image,然后安装已存放在/usr/src中的新内核软件包,使用 dpkg -i ../kernel-image-2.X.X。接下来,您可以使用apt获取预打包的源驱动程序。因此,对于 Quickcam Express,软件包是qc-usb-source:
# apt-get install qc-usb-source |
...并解压存档
# tar -xvzf qc-usb-modules.tar.gz |
这将把源代码解压缩到/usr/src/modules目录。最后一步,仍然在/usr/src/linux中,使用 kernel-package 制作模块
# make-kpkg modules_image |
安装新软件包,在/usr/src/中,名为qc-usb-modules-[arch].deb,使用 dpkg -i。最后,加载模块
# modprobe quickcam |
检查 /usr/share/doc/kernel-package 中的文档以查找任何问题。
请参阅 Kernel-HOWTO 的修补部分,位于 Linux 文档项目。
作者的简短且不保证成功的修补版本如下:确保您已安装 第 5.4 节 中概述的相同先决条件。首先,在命令行或 xterm 中,更改到您正在(或将要)运行相机补丁的内核版本的源目录(在本例中名为patch.diff).
# cd /usr/src/linux # patch -p1 -E patch.diff |
您应该看到确认 “hunks” 已成功应用。此时,您可以 make menuconfig 或您使用的任何程序来重新编译,启用相应的支持。如果任何 hunks 失败,或者您遇到任何问题,除了上面引用的链接,您应该查阅 man patch 和 第 5.7 节。
请参阅 video4linux 邮件列表总部,网址为 https://listman.redhat.com/mailman/listinfo/video4linux-list。
版本 1.2,2002 年 11 月
版权所有 (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA。 允许任何人复制和分发本许可证文件的完整副本,但不允许更改它。
0. 前言
本许可证的目的是使手册、教科书或其他功能性和有用的文档在自由的意义上“自由”:确保每个人都拥有有效自由地复制和再分发它,无论是否修改,无论是商业还是非商业用途。其次,本许可证为作者和出版商保留了一种为其工作获得认可的方式,同时不被视为对他人所做的修改负责。
本许可证是一种 “copyleft”,这意味着文档的衍生作品本身也必须在相同的意义上是自由的。它补充了 GNU 通用公共许可证,后者是为自由软件设计的 copyleft 许可证。
我们设计本许可证是为了将其用于自由软件的手册,因为自由软件需要自由文档:自由程序应该附带提供与软件相同自由的手册。但是,本许可证不限于软件手册;它可以用于任何文本作品,无论主题 matter 或是否作为印刷书籍出版。我们主要推荐本许可证用于其目的是指导或参考的作品。
1. 适用性和定义
本许可证适用于任何手册或其他作品,以任何媒介形式,其中包含版权持有人放置的声明,表明它可以根据本许可证的条款分发。此类声明授予全球范围内的、免版税的许可,期限不受限制,以根据本文所述的条件使用该作品。“文档”(Document),以下简称“文档”,指的是任何此类手册或作品。任何公众成员都是被许可人,并被称为“您”。如果您以某种方式复制、修改或分发作品,从而需要版权法下的许可,则您接受该许可证。
文档的 “修改版本”(Modified Version)是指包含文档或其一部分的任何作品,无论是逐字复制,还是经过修改和/或翻译成另一种语言。
“次要章节”(Secondary Section)是文档的命名附录或前言章节,专门处理文档的出版商或作者与文档的总体主题(或相关事项)的关系,并且不包含任何可以直接归入该总体主题的内容。(因此,如果文档部分是数学教科书,则次要章节可能不解释任何数学知识。)这种关系可能是与主题或相关事项的历史联系,或者是关于它们的法律、商业、哲学、伦理或政治立场。
“不变章节”(Invariant Sections)是在声明文档根据本许可证发布的通知中指定标题的某些次要章节,作为不变章节的标题。如果章节不符合上述次要章节的定义,则不允许将其指定为不变章节。文档可能包含零个不变章节。如果文档未标识任何不变章节,则不存在不变章节。
“封面文字”(Cover Texts)是在声明文档根据本许可证发布的通知中列出的某些简短文本段落,作为封面文字或封底文字。封面文字最多可以包含五个单词,封底文字最多可以包含 25 个单词。
文档的 “透明”(Transparent)副本是指机器可读的副本,以其规范对公众可用的格式表示,适用于使用通用文本编辑器(对于由像素组成的图像)通用绘图程序或(对于绘图)一些广泛可用的绘图编辑器直接修改文档,并且适用于输入到文本格式化程序或自动翻译成各种适用于输入到文本格式化程序的格式。以其他透明文件格式制作的副本,其中其标记或缺少标记被安排为阻止或劝阻读者随后的修改,则不是透明的。如果图像格式用于大量文本,则图像格式不是透明的。不 “透明” 的副本称为 “不透明”(Opaque)。
透明副本的合适格式示例包括没有标记的纯 ASCII、Texinfo 输入格式、LaTeX 输入格式、使用公开可用的 DTD 的 SGML 或 XML,以及符合标准的简单 HTML、PostScript 或 PDF,专为人工修改而设计。透明图像格式的示例包括 PNG、XCF 和 JPG。不透明格式包括只能由专有文字处理器读取和编辑的专有格式、DTD 和/或处理工具通常不可用的 SGML 或 XML,以及某些文字处理器仅用于输出目的而生成的机器生成的 HTML、PostScript 或 PDF。
“标题页”(Title Page)对于印刷书籍而言,是指标题页本身,以及为清晰地容纳本许可证要求出现在标题页中的材料所需的后续页面。对于没有标题页格式的作品,“标题页” 是指最突出的作品标题外观附近的文本,位于文本正文的开头之前。
“标题为 XYZ 的章节”(Entitled XYZ)是指文档的命名子单元,其标题完全是 XYZ 或包含 XYZ 在括号中,后跟以另一种语言翻译 XYZ 的文本。(此处 XYZ 代表下面提到的特定章节名称,例如 “致谢”、“题献”、“背书” 或 “历史”)。当您修改文档时,“保留” 标题为 XYZ 的章节的标题,意味着它仍然是根据此定义 “标题为 XYZ 的章节”。
文档可能在声明本许可证适用于文档的通知旁边包含保证免责声明。这些保证免责声明被视为通过引用包含在本许可证中,但仅限于免责保证:这些保证免责声明可能具有的任何其他含义均无效,并且对本许可证的含义没有影响。
2. 逐字复制
您可以以任何媒介复制和分发文档,无论是商业还是非商业用途,前提是本许可证、版权声明以及声明本许可证适用于文档的许可证声明在所有副本中都得到了复制,并且您没有在本许可证的条款中添加任何其他条件。您不得使用技术措施来阻碍或控制您制作或分发的副本的阅读或进一步复制。但是,您可以接受报酬以换取副本。如果您分发足够数量的副本,您还必须遵守第 3 节中的条件。
您也可以在上述相同条件下借出副本,并且您可以公开展示副本。
3. 大量复制
如果您出版印刷副本(或通常带有印刷封面的媒体中的副本)的文档,数量超过 100 份,并且文档的许可证声明要求封面文字,则您必须将副本放在封套中,封套上清晰且清晰地印有所有这些封面文字:封面上的封面文字和封底上的封底文字。两个封面还必须清晰且清晰地标识您为这些副本的出版商。封面必须以同等突出且可见的方式呈现标题的所有单词的完整标题。您可以在封面上添加其他材料。对封面的更改仅限于保留文档标题并满足这些条件的副本,在其他方面可以被视为逐字复制。
如果任何一个封面的所需文字过于庞大而无法清晰地容纳,您应该将列出的第一个文字(尽可能多地容纳)放在实际封面上,并将其余文字延续到相邻页面上。
如果您出版或分发数量超过 100 份的文档的不透明副本,则必须在每个不透明副本中包含机器可读的透明副本,或者在每个不透明副本中或随附声明一个计算机网络位置,公众可以使用公共标准网络协议从该位置下载文档的完整透明副本,且不包含任何附加材料。如果您使用后一种选项,则在您开始大量分发不透明副本时,您必须采取合理谨慎的步骤,以确保透明副本在声明的位置保持可访问状态,直到至少在您向公众分发该版本的最后一个不透明副本(直接或通过您的代理商或零售商)后一年。
建议但不要求您在重新分发大量副本之前与文档的作者联系,以便让他们有机会为您提供文档的更新版本。
4. 修改
您可以根据上述第 2 节和第 3 节的条件复制和分发文档的修改版本,前提是您根据本许可证精确地发布修改版本,修改版本充当文档的角色,从而授权拥有其副本的任何人分发和修改修改版本。此外,您必须在修改版本中执行以下操作:
A. 在标题页(以及封面,如果有的话)中使用与文档标题不同的标题,以及与以前版本不同的标题(如果存在任何以前的版本,则应在文档的历史记录部分中列出)。如果原始版本的出版商允许,您可以使用与以前版本相同的标题。
B. 在标题页上,列出作为作者的一个或多个人员或实体,负责修改版本的修改,以及至少五位文档的主要作者(如果少于五位,则列出所有主要作者),除非他们免除您的此项要求。
C. 在标题页上声明修改版本的出版商的名称,作为出版商。
D. 保留文档的所有版权声明。
E. 在其他版权声明旁边添加适用于您的修改的版权声明。
F. 在版权声明之后立即包含许可证声明,允许公众根据本许可证的条款使用修改版本,形式如下面的附录所示。
G. 在该许可证声明中保留文档的许可证声明中给出的不变章节和要求的封面文字的完整列表。
H. 包含本许可证的未更改副本。
I. 保留标题为 “历史记录”(History)的章节,保留其标题,并在其中添加一个项目,至少说明标题页上给出的修改版本的标题、年份、新作者和出版商。如果文档中没有标题为 “历史记录” 的章节,则创建一个,说明标题页上给出的文档的标题、年份、作者和出版商,然后添加一个项目,描述修改版本,如上一句话所述。
J. 保留文档中给出的任何网络位置,以供公众访问文档的透明副本,并同样保留文档中给出的以前版本的网络位置。这些可以放在 “历史记录” 章节中。您可以省略在文档本身之前至少四年出版的作品的网络位置,或者如果它所指的版本的原始出版商允许。
K. 对于任何标题为 “致谢”(Acknowledgements)或 “题献”(Dedications)的章节,保留该章节的标题,并在该章节中保留其中给出的每个贡献者致谢和/或题献的所有实质内容和语气。
L. 保留文档的所有不变章节,在其文本和标题中保持不变。章节编号或等效项不被视为章节标题的一部分。
M. 删除任何标题为 “背书”(Endorsements)的章节。修改版本中不得包含此类章节。
N. 不要将任何现有章节重命名为标题为 “背书”,或与任何不变章节的标题冲突。
O. 保留任何保证免责声明。如果修改版本包含新的前言章节或附录,这些章节或附录符合次要章节的条件,并且不包含从文档复制的材料,您可以选择将其中一些或全部章节指定为不变章节。为此,请将它们的标题添加到修改版本的许可证声明中的不变章节列表中。这些标题必须与任何其他章节标题不同。您可以添加标题为 “背书” 的章节,前提是它仅包含各方对您的修改版本的背书,例如,同行评审声明或文本已被某个组织批准为标准的权威定义。
您可以添加最多五个单词的段落作为封面文字,以及最多 25 个单词的段落作为封底文字,添加到修改版本中的封面文字列表的末尾。任何一个实体(或通过任何一个实体安排)最多可以添加一个封面文字段落和一个封底文字段落。如果文档已包含同一封面的封面文字,先前由您或由您代表的同一实体安排添加,则您不得添加另一个;但是,您可以替换旧的封面文字,但需要获得添加旧封面文字的先前出版商的明确许可。
文档的作者和出版商未通过本许可证授予使用其姓名进行宣传或断言或暗示对修改版本的认可的许可。
5. 合并文档
您可以将文档与根据本许可证发布的其他文档合并,根据上述第 4 节中定义的修改版本的条款,前提是您在合并中包含所有原始文档的所有不变章节,未修改,并将它们全部列为合并作品的许可证声明中的不变章节,并且您保留它们的所有保证免责声明。
合并作品只需要包含本许可证的一个副本,并且多个相同的不变章节可以用单个副本替换。如果存在多个名称相同但内容不同的不变章节,则通过在其末尾添加括号,使每个此类章节的标题唯一,括号中包含已知该章节的原始作者或出版商的姓名,或者唯一的编号。对合并作品的许可证声明中的不变章节列表中的章节标题进行相同的调整。
在合并中,您必须合并各个原始文档中标题为 “历史记录” 的任何章节,形成一个标题为 “历史记录” 的章节;同样合并任何标题为 “致谢” 的章节,以及任何标题为 “题献” 的章节。您必须删除所有标题为 “背书” 的章节。
6. 文档集合
您可以制作一个集合,其中包含文档和根据本许可证发布的其他文档,并将各个文档中本许可证的单独副本替换为集合中包含的单个副本,前提是您在所有其他方面都遵循本许可证关于每个文档的逐字复制的规则。
您可以从这样的集合中提取单个文档,并根据本许可证单独分发它,前提是您在提取的文档中插入本许可证的副本,并在所有其他方面都遵循本许可证关于该文档的逐字复制的规定。
7. 与独立作品的聚合
文档或其衍生物与其他单独和独立的文档或作品的汇编,在存储或分发媒介的卷中或之上,如果汇编产生的版权不用于限制汇编用户的超出各个作品允许范围的合法权利,则称为 “聚合”。当文档包含在聚合中时,本许可证不适用于聚合中的其他作品,这些作品本身不是文档的衍生作品。
如果第 3 节的封面文字要求适用于文档的这些副本,那么如果文档小于整个聚合的一半,则文档的封面文字可以放在聚合中括号文档的封面上,或者如果文档是电子形式,则可以放在封面的电子等效物上。否则,它们必须出现在括号整个聚合的印刷封面上。
8. 翻译
翻译被视为一种修改,因此您可以根据第 4 节的条款分发文档的翻译。用翻译替换不变章节需要获得其版权持有人的特殊许可,但您可以除了这些不变章节的原始版本之外,还包括某些或所有不变章节的翻译。您可以包括本许可证的翻译,以及文档中的所有许可证声明和任何保证免责声明,前提是您还包括本许可证的原始英文版本以及这些声明和免责声明的原始版本。如果本许可证的翻译版本与原始版本或声明或免责声明之间存在分歧,则以原始版本为准。
如果文档中的章节标题为 “致谢”、“题献” 或 “历史记录”,则保留其标题的要求(第 4 节)通常需要更改实际标题。
9. 终止
除非本许可证明确规定,否则您不得复制、修改、再许可或分发文档。任何其他尝试复制、修改、再许可或分发文档的行为均无效,并将自动终止您在本许可证下的权利。但是,根据本许可证从您那里收到副本或权利的各方,只要这些各方保持完全合规,其许可证就不会终止。
10. 本许可证的未来修订
自由软件基金会可能会不时发布 GNU 自由文档许可证的新修订版本。此类新版本在精神上将与当前版本相似,但在细节上可能会有所不同,以解决新的问题或疑虑。请参阅 https://gnu.ac.cn/copyleft/。
许可证的每个版本都给出了一个区分版本号。如果文档指定本许可证的特定编号版本 “或任何更高版本” 适用于它,您可以选择遵循该指定版本或自由软件基金会已发布的任何更高版本(非草案)的条款和条件。如果文档未指定本许可证的版本号,您可以选择自由软件基金会曾经发布的任何版本(非草案)。
附录:如何在您的文档中使用本许可证
要在您编写的文档中使用本许可证,请在文档中包含本许可证的副本,并将以下版权和许可证声明放在标题页之后:
版权 (c) YEAR YOUR NAME。 根据 GNU 自由文档许可证 1.2 版或自由软件基金会发布的任何后续版本的条款,授权复制、分发和/或修改本文档;不带不变章节、封面文字和封底文字。 许可证的副本包含在题为“GNU 自由文档许可证”的章节中。
如果您有不变章节、封面文字和封底文字,请将“with...Texts.”行替换为以下内容:不变章节为 [列出它们的标题],封面文字为 [列表],封底文字为 [列表]。 如果您有不带封面文字的不变章节,或者其他三种的组合,请合并这两种替代方案以适应具体情况。
如果您的文档包含重要的程序代码示例,我们建议以并行方式根据您选择的自由软件许可证(例如 GNU 通用公共许可证)发布这些示例,以允许在自由软件中使用它们。