不幸的是,由于缺少 Linux 驱动程序,某些软件调制解调器 (winmodem) 无法在 Linux 下工作。配置能够在 Linux 下工作的软件调制解调器,其难度范围从非常容易(自动)到困难,具体取决于调制解调器、您的技能以及查找有关调制解调器的信息有多容易——并非所有信息都在本 HOWTO 中。如果您购买了新的调制解调器,但不确定它是否能在 Linux 下工作,请尝试达成协议,如果它无法工作,您可以退货并获得退款。
即使您的调制解调器可以在 Linux 下工作,在启用其所在的串行端口并告知操作系统之前,也无法使用它。有关此方面的详细解释(或者如果启动时消息未显示调制解调器的串行端口),请学习本 HOWTO 或参阅 Plug-and-Play-HOWTO。
PC 的调制解调器可以是内置的、外部串行的或外部 USB 的。内置调制解调器安装在您的 PC 内部(您必须拧下螺丝等才能安装)。外部调制解调器只需插入电缆:USB 电缆(USB 调制解调器)或串行端口(RS-232 串行调制解调器)。与外部串行调制解调器相比,内置调制解调器更便宜,由于缓冲区溢出而导致数据丢失的可能性更小,并且通常使用更少的电力。内置调制解调器显然不占用任何桌面空间。
外部串行调制解调器通常更容易安装,并且通常配置问题较少,前提是您要连接的串行端口配置正确。外部 USB 调制解调器更有可能是 winmodem,据报告通常比外部串行调制解调器更难处理。外部调制解调器有指示灯,可以为您提供有关正在发生的事情的线索,并有助于故障排除。串行端口和调制解调器可以物理分离这一事实也有助于故障排除。外部调制解调器易于移动到另一台计算机。如果您需要关闭电源以重置调制解调器(这种情况很少发生),那么使用外部调制解调器,您不必关闭整个 PC 的电源。
不幸的是,大多数外部串行调制解调器没有关闭电源的开关,因此即使在关闭时也可能消耗少量电力(除非您从墙上拔下电源)。它们消耗的每瓦电力通常每年花费您超过 1 美元。外部调制解调器的另一个可能的缺点是,您将被迫使用现有的串行端口,该端口可能不支持超过 115,200 bps 的速度(尽管截至 2000 年末,大多数新的内置调制解调器也不支持——但有些支持)。有关详细信息,请参阅无法设置足够高的速度
当然,任何调制解调器都需要 Linux 自带的串行驱动程序(内置于内核中或作为模块)。对于 PCI,此驱动程序也应检测到调制解调器,但这实际上不是调制解调器驱动程序,因为它仅检测调制解调器所在的串行端口。
但是调制解调器驱动程序呢?任何软件调制解调器 (winmodem, linmodem) 都必须有调制解调器驱动程序(如果 Linux 有的话)。硬件调制解调器实际上不需要任何调制解调器驱动程序,除非您想使用语音和“调制解调器保持”等特殊功能。
软件调制解调器需要软件来运行它们,并且显然需要驱动程序。MS Windows 的驱动程序是 *.exe 程序,这些程序无法在 Linux 下运行。因此,您必须使用 Linux 驱动程序(如果存在)。请参阅基于软件的调制解调器(winmodem、linmodem)
曾经(2002 年?)所有外部调制解调器都可以在 Linux 下工作。但后来出现了无控制器的外部调制解调器,它无法工作。如果包装盒上说它需要 Windows 而没有提及 Linux,则可能就是这个意思。是否可能是 Windows 软件是为“调制解调器保持”和用作答录机等提供的,但在其他方面它可以在 Linux 下工作?Linux 可能不太好地支持这些功能,甚至根本不支持。如果这是最新版本的 Modem-HOWTO,请告诉我您在这方面的经验。
许多外部调制解调器都标有“即插即用” (PnP)。如果它们是硬件调制解调器,它们都应该像非 PnP 调制解调器一样工作。虽然串行端口本身可能需要配置(IRQ 号和 IO 地址),除非默认配置没问题,否则外部调制解调器不使用此类 IRQ/IO 配置。您只需将调制解调器插入串行端口即可。
PnP 调制解调器内置了特殊的 PnP 标识,PnP 操作系统可以通过(串行端口)读取该标识。这样的操作系统随后会知道您在某个端口上有一个调制解调器,并且还会知道 ID 号。如果是无控制器调制解调器,它可以尝试找到其驱动程序。它还可以告诉应用程序您的调制解调器所在的端口(例如 /dev/ttyS2 或 COM3)。但 Linux 可能无法做到这一点。因此,您可能需要手动配置您的应用程序,方法是为其提供 ttyS 号(例如 /dev/ttyS2)。某些程序(如 wvdial)可以探测各种端口上的调制解调器。
与将大多数其他需要各种类型的“零调制解调器”电缆(不适用于调制解调器)的设备连接到串行端口相比,连接外部调制解调器非常简单。调制解调器使用直通电缆,没有引脚交叉。大多数电脑商店都应该有这种电缆。确保您获得正确的公母头和引脚数。将调制解调器连接到您的串行端口之一。如果您愿意接受您连接到的端口的默认 IRQ 和 IO 地址,那么您就可以启动您的通信程序并配置调制解调器本身了。
内置调制解调器通过取下 PC 的外壳并将调制解调器卡插入主板上的空闲插槽中来安装在 PC 中。有用于 PCI 插槽的调制解调器,用于较旧的 ISA 插槽的其他调制解调器,以及用于新的小型 AMR 插槽的 ARM 软件“调制解调器”。只有一些较新的 PC 会有 ARM 插槽。虽然外部调制解调器插入串行端口(通过短电缆),但内置调制解调器在调制解调器中内置了串行端口。换句话说,调制解调器卡既是串行端口又是调制解调器。
以前通过卡上的跳线来完成设置串行端口的 IO 地址和 IRQ。这些是小的黑色矩形“立方体”,尺寸约为 5x4x2 毫米,推入卡上的引脚上。即插即用调制解调器(实际上是调制解调器的串行端口部分)不使用跳线来设置这些,而是通过通过计算机内部的总线向它们发送配置命令来配置。此类配置命令可以由 PnP BIOS、isapnp 程序(仅适用于 ISA 总线)、setpci(PCI 总线:无法设置 IRQ)或更新的串行方式发送,以配置那些未通过串行驱动程序配置 io-irq 的设备。
有关更多详细信息,特别是对于 PCI 总线,请参阅快速安装。
软件调制解调器将调制解调器的部分(甚至几乎全部)工作转移到计算机的主处理器 (CPU) 芯片(例如奔腾芯片)。这需要特殊的软件(调制解调器驱动程序)来完成这项工作。直到 1999 年末,此类软件仅针对 MS Windows 发布,并且无法在 Linux 下工作。更糟糕的是,调制解调器的制造商对调制解调器的接口保密,因此没有人可以为其编写 Linux 驱动程序(即使有一些志愿者愿意编写 Linux 驱动程序)。
但从那时起情况有所改善,因此今天(2001 年末)许多此类调制解调器都具有 linux 驱动程序。没有标准接口,因此不同品牌/型号的软件调制解调器需要不同的驱动程序(除非不同的品牌/型号恰好在内部使用相同的芯片组)。但是,某些驱动程序可能无法完美工作,也可能不具备 MS Windows 驱动程序的所有功能。
软件调制解调器的另一个名称(由 MS 使用)是“基于驱动程序的调制解调器”。传统的基于硬件的调制解调器(可在 Linux 下工作)不需要调制解调器驱动程序(但确实使用 Linux 串行驱动程序)。大约在 1998 年中期之后,大多数新的内置调制解调器都是软件调制解调器。
软件调制解调器分为 2 类:linmodem 和 winmodem。Winmodem 只能在 MS Windows 下工作。Linmodem 可以在 Linux 下工作。它们以前大多是 winmodem,因此有些人也称它们为“winmodem”。术语“Winmodem”也是某种型号的“winmodem”的商标,但这不是本文档中的含义。
在 1999 年末,出现了两种可以在 Linux 下工作的基于软件的调制解调器,因此被称为“linmodem”。Lucent Technologies (LT) 非官方发布了 Linux 二进制代码,以支持其大多数 PCI 调制解调器。PC-TEL(包括“Zoltrix”)为 Linux 推出了一种新的基于软件的调制解调器。此后,人们对使 winmodem 在 linux 下工作越来越感兴趣。Intel(调制解调器硅操作)MD563x HaM 芯片组(前身为 Cirrus Logic 的 Ambient 分部)有一个 GPL 许可的驱动程序。截至 2001 年年中,还有以下驱动程序:Conexant HSF 和 HCF、Motorola SM56(支持已终止)、ESS(仅限 ISA)和 IBM Thinkpad 600+ 的 Mwave。请参阅 http://linmodems.org。
现在(2001 年)有多少百分比的软件调制解调器可以在 Linux 下工作?嗯,有一些调制解调器芯片不受支持:Lucent/Agere ARM (Scorpio)、3COM/US Robotics、一些 SmartLink(3 种不同的芯片组)、Ambient HSP 以及可能还有其他芯片组。因此,截至 2001 年末,似乎超过一半的软件调制解调器芯片受到支持。截至 2005 年,情况似乎变得更糟。为什么?嗯,Linux 在桌面上的增长没有预期的那么快,许多 PC 用户选择了更高速的有线调制解调器和 DSL。
另一个原因是许多驱动程序是多年前编写的,并且仅适用于旧版本的 Linux 内核。驱动程序代码是秘密的,公司不想为其不再销售的硬件更新驱动程序。
请提前注意,确定您的调制解调器是否是 linmodem 可能不太容易。您可能需要先找出您拥有哪个芯片组以及谁制造了它。仅知道您的调制解调器的品牌和型号可能不够。一种方法是从 http://linmodems.org 下载 scanModem 工具,但结果可能难以解读,您可能需要向 linmodems 邮件列表寻求帮助。另一种方法是使用“lspci -v”等命令找出这一点,然后使用长调制解调器编号查找芯片制造商。这需要检查数据库或搜索互联网。还有一种方法是查看调制解调器卡上芯片上的小字。所有这些并非总是简单。可能会发生您为此付出了很多努力,但最终得到的坏消息是您的调制解调器不受支持。但即使它受到支持,支持也可能仅适用于旧版本的内核。有关更多详细信息,请参阅 Linmodem-HOWTO。
有两种基本类型的软件调制解调器。在一种类型中,软件几乎完成了所有工作。另一种类型是软件仅执行“控制”操作(除了处理数字波形之外的所有操作——稍后解释)。由于硬件不进行控制,因此称为“无控制器”调制解调器。第一种类型是全软件调制解调器(有时简称为软件调制解调器)。
对于这两种类型,调制解调器(或主板上)都必须有模拟硬件来生成电波形以发送到电话线。它是由数字信号生成的(这有点像“数字波形”)。这有点像数字电子设备在方格纸上创建许多离散点,然后调制解调器通过它们绘制一条平滑的电压曲线。还必须有硬件将传入的波形转换为数字信号。这只是模数转换(反之亦然)。它由编解码器(编码器-解码器)完成。
传入的数字波形必须转换为数据字节流。这是解调过程的一部分。回想一下,这些数据字节可能已被压缩,因此它们与原始消息完全不同。将数据字节转换为数字波形是调制过程的一部分。即使完成解调,调制解调器也不能只是将生成的传入数据字节流发送到串行端口输入缓冲区,而必须首先进行解压缩、纠错,并从串行转换为计算机的并行总线。但调制解调器可能会让 CPU 完成实际工作。对于传出的数据字节流,顺序相反。
两种类型的基于软件的调制解调器之间的区别在于数字调制发生的位置。在全软件调制解调器中,此调制在 CPU 中完成,称为主机信号处理器 (HSP)。在无控制器调制解调器中,它在调制解调器中完成,但所有其他数字工作都由 CPU 完成。其他数字工作包括处理 AT 命令、数据压缩、纠错和模拟串行端口。在全软件调制解调器中,仍然有两个项目由硬件处理:编解码器对波形的 A/D 转换和回声消除。
如何确定内置调制解调器是否是软件调制解调器?首先查看其名称、描述甚至 MS Windows 驱动程序的名称是否表明它是软件调制解调器:HSP(主机信号处理器)、HCF(主机控制系列)、HSF(主机信号系列)、无控制器、主机控制、基于主机和软-... 调制解调器。如果它是这些调制解调器之一,则它仅适用于有 Linux 驱动程序可用的情况。由于软件调制解调器成本较低,因此价格低廉是它是软件调制解调器的线索。
如果您不知道调制解调器的型号,并且您的 Linux PC 上也安装了 Windows,请单击“控制面板”中的“调制解调器”图标。然后查看调制解调器列表(2003 年之后未维护)。如果以上方法不起作用(或不可行),您可以查看调制解调器随附的包装(或手册)。阅读包装上写着“最低系统要求”或仅写着“系统要求”的部分。
硬件调制解调器可以在旧 CPU(如 386 或更好)上正常工作。因此,如果它需要现代 CPU(如奔腾或其他“高速”CPU,例如超过 150 MHz),则这是一个线索,表明它是全软件调制解调器。如果它仅需要 486 CPU(或更好),那么它很可能是主机控制的软件调制解调器。说它仅适用于 Windows 也是坏消息。但是,即使在这种情况下,也可能有适用于它的 Linux 驱动程序,或者可能是标签错误。
否则,如果它未明确声明您必须拥有 Windows,则它可能是硬件调制解调器。通过说它是“为 Windows 设计的”,可能仅表示它完全支持 Microsoft 的即插即用,这没问题,因为 Linux 使用相同的即插即用规范(但在 Linux 下更难配置)。因此,“为 Windows 设计的”并不能暗示它是否可以在 Linux 下工作。您可以查看制造商的网站或通过电子邮件询问。一些制造商明确声明某些型号可以在 Linux 下工作。有时它们是 linmodem,需要您获取并安装特定的 linmodem 驱动程序。
仅当您知道有适用于它的 Linux 驱动程序并且工作正常时才购买。但是,如果驱动程序未得到维护,并且因此无法与未来版本的内核一起使用,则可能会出现问题。此外,驱动程序可能没有完整的功能。除了获得令人满意的驱动程序的问题之外,软件调制解调器的优缺点是什么?由于软件调制解调器使用 CPU 来完成其部分(或全部)工作,因此软件调制解调器需要调制解调器卡上的电子元件更少,因此成本更低。同时,CPU 工作负载因调制解调器而增加,这可能会导致运行速度变慢。
调制解调器对 CPU 的负载百分比取决于您拥有的 CPU 以及它是否是全软件调制解调器。对于现代 CPU 和仅将 CPU 用作控制器的调制解调器,性能损失很小。即使它是全软件调制解调器,如果同时没有运行其他 CPU 密集型任务,您也不会遭受性能损失。当然,当您不使用软件调制解调器时,性能根本不会下降。
调制解调器的成本节省是否值得?在许多情况下是值得的,特别是如果您不经常使用调制解调器和/或在使用调制解调器时没有运行任何其他 CPU 密集型任务。节省的调制解调器成本可以用于更好的 CPU,这将稍微加快速度。但是,硬件调制解调器的板载电子元件可以比通用 CPU 更有效地完成工作(除非它在不使用时根本不高效)。因此,如果您经常使用调制解调器,最好避免使用全软件调制解调器。
PCI 调制解调器卡是一种插入 PC 主板上的 PCI 总线插槽的卡。虽然许多 PCI winmodem 无法在 Linux 下工作(没有可用的驱动程序),但其他 PCI 调制解调器可以在 Linux 下工作。Linux 串行驱动程序已修改为支持某些 PCI 硬件调制解调器卡(但不支持 winmodem/linmodem)。如果是 linmodem,则只有在安装了特定的 linmodem 驱动程序后才能工作。如果 Linux 串行驱动程序支持您的硬件调制解调器,则驱动程序将为您设置 PnP 配置。请参阅PCI 总线支持正在进行中。如果 Linux 串行驱动程序中没有对您的 PCI 硬件调制解调器的特殊支持,它可能仍然可以正常工作,但您必须做一些工作来配置它。
这些主要用于笔记本电脑。它们都是 winmodem,插入主板上的特殊 AMR(音频调制解调器 riser)插槽。音频卡或组合音频-调制解调器卡有时用于此插槽。该插槽的主要用途是用于 HSF 型调制解调器,其中 CPU 完成几乎所有工作。这导致了小型“调制解调器”卡,从而导致了短 AMR 插槽。主板有一个编解码器,它从 CPU 获取数字输出并在 ARM 插槽处生成模拟电压波(反之亦然)。因此,插入插槽的“调制解调器”几乎无事可做,除了将电话线与编解码器连接起来。Linux 至少支持一种 AMR 调制解调器。lspci -v 应该会显示它。
USB = 通用串行总线。大多数 USB 调制解调器都是 winmodem,因此许多无法在 Linux 下工作。Linux 支持符合 USB 通信设备类抽象控制模型 (= USB CDC ACM) 的调制解调器。有一个用于 ACM 的模块,名为 acm.o。请参阅内核文档目录中的 /usb/acm.txt 文档(Debian 中为 /usr/share/doc/kernel-doc-2.6.x,某些发行版中可能为 /usr/doc/kernel...)。第一个(第 0 个)此类调制解调器的 ACM“串行端口”是:/dev/usb/acm/0 或可能是 /dev/usb/ttyACM0。无论您是否使用新的“设备文件系统”,都应该是这种情况。它实际上不是串行端口,但驱动程序使其看起来像使用调制解调器的软件的串行端口。
由于 USB 上的带宽很高,因此可以将比数据更多的数据发送到 USB 调制解调器。这意味着创建 USB winmodem 是可行的,其中驱动程序在 CPU 上完成调制解调器的大部分工作,并将结果发送到调制解调器。因此,请注意 USB winmodem(除非它们具有 Linux 支持)。
请注意,现在有一个用于 IBM Thinkpad 600+ 中使用的 ACP (Mwave) 调制解调器的 Linux 驱动程序。请参阅 mini-HOWTO:ACP-Modem。
虽然硬件调制解调器过去使用 DSP(数字信号处理器),但其中一些 DSP 由驱动程序编程,驱动程序必须在使用调制解调器之前从硬盘下载到 DSP 的内存中。不幸的是,这种下载通常由 Dos/Windows 程序完成(这不适用于 Linux)。但是,在使某些此类调制解调器与 Linux 一起工作方面已取得重大成功。例如,有一个 Linux 驱动程序可用于运行 Lucent (DSP) 调制解调器。
可以在 Linux 下正常工作的普通调制解调器(无需调制解调器的驱动程序)通常也有 DSP(并且可能会在包装上提及这一点),但运行 DSP 的程序存储在调制解调器内部。这些在 Linux 下工作正常。在 Linux 下工作存在问题的 DSP 调制解调器的一个示例是旧的 IBM Aptiva MWAVE。
使某些 DSP 调制解调器与 Linux 一起工作的一种方法是从 DOS 启动(如果您的 Linux PC 上有 DOS)。您首先在 DOS 下安装驱动程序(使用 DOS 而不是 Window 驱动程序)。然后启动 Dos/Windows 并启动调制解调器的驱动程序以对 DSP 进行编程。然后在不关闭计算机的情况下,启动 Linux。
可以编写一个“批处理”文件(实际上是一个脚本)来完成此操作。这是一个示例,但您必须对其进行修改以适应您的情况。
rem mwave is a batch file supplied by the modem maker
call c:\mww\dll\mwave start
rem loadlin.exe is a DOS program that will boot Linux from DOS (See
rem Config-HOWTO).
c:\linux\loadlin f:\vmlinuz root=/dev/hda3 ro
可以为 Window 的桌面创建一个指向此类批处理文件的图标,并将图标属性设置为“在 MSDOS 模式下运行”。然后,通过单击此图标,可以设置调制解调器并转到 Linux。从 DOS 启动 Linux 的另一种可能方法是按 CTRL-ALT-DEL 并告诉它重新启动(假设您已设置好可以直接启动到 Linux)。调制解调器仍然停留在 DOS 下使用的同一 com 端口(同一 IO 地址)。
Newcom ifx 调制解调器需要一个小内核补丁才能正常工作,因为其串行端口模拟是非标准的。有关将此调制解调器与 Linux 一起使用的补丁和其他信息,请访问 http://quinine.pharmacy.ohio-state.edu/~ejolson/linux/newcom.html。
某些较旧的 Rockwell 芯片需要 Rockwell RPI(Rockwell 协议接口)驱动程序来进行压缩和纠错。即使驱动程序软件仅在 MS Windows 下工作,它们仍然可以在 Linux 下使用。这是因为 MS Windows 软件(您没有)仅执行压缩和纠错。如果您愿意在没有压缩和纠错的情况下操作调制解调器,那么在 Linux 下使用它是可行的。为此,您需要通过向调制解调器(通过初始化字符串)发送“RPI 禁用”命令来禁用 RPI,每次打开调制解调器电源时都发送此命令。在我的旧调制解调器上,此命令是 +H0。没有可用的数据压缩会使获取网页的速度变慢,但在下载已压缩的文件时速度一样快。