Q: What modem should I buy to achieve best results on my Linux workstation?
A: Since people hold strong views on this matter, and prefer modems of different varieties, it is perhaps best to detail modem taxonomy before making a recommendation and explaining its rationale. Readers interested only in a recommendation can skip to the "Conclusion" section at the bottom.
Modems can be either regular modem devices or so-called "winmodems". ("Winmodem" is a registered trademark of US Robotics, Inc., but the term is widely used to describe modems of non-traditional design that can be communicated with only using custom driver software.) Regular modems can be either internal on an add-in card that fits inside the PC system case or external, encased in a separate box with its own power supply, connected to either one of the PC's serial ports using a serial (RS-232C) cable, or to a USB bus. To date, all known "winmodems" have been either internal or USB-type, but there have also been some claims of external winmodems.
(PCMCIA modems, used mainly in laptops, are not detailed in this essay.)
Internal modems can be designed to fit in either PCI or ISA Slots. ISA internal modems may be either ISA Plug and Play devices, or regular, non-PnP ISA cards.
Traditionally, all modems were reached using RS-232C serial ports, where the serial port was either a part of the base PC unit (if using an external modem) or was provided hard-wired to some modem circuitry as part of an internal-modem card. In either case, to communicate with and control such modems, the OS needed only to communicate with the serial port. Therefore, the issue of modem support was really one of serial-port support.
Current (2.2.x) Linux kernels support some serial ports easily, and others only after some configuration work. Specifically, the two serial ports built into most Intel-standard motherboards get detected correctly with no problem. Additional serial ports beyond those two (such as ones on internal modem cards) can be problematic for two reasons: (1) The PC's "IRQ" hardware resource assigned for serial ports beyond the first two (ttyS0 and ttyS1, aka COM1 and COM2) are non-standard and must be custom-configured in /etc/rc.d/rc.serial. (2) Serial ports on add-in internal modem cards are usually ISA Plug and Play ports, which never auto-detect. The machine owner must custom configure his system using the isapnptools utilities to determine what information to pass to the booting kernel, to inform the kernel on how to address those serial ports.
To do this, back up any existing /etc/isapnp.conf file, and make a new one using "pnpdump > /etc/isapnp.conf", creating a raw isapnp.conf file, which must then be edited manually. In the file's CONFIGURE section, find your modem by its serial port's IRQ and I/O base address, and un-comment that item in the CONFIGURE section. Save your changes. The information thus configured will now be used at boot time by the "isapnp" utility (in /etc/rc.d/rc.sysinit) to tell the booting kernel how to address the modem's serial port. You should now see this reflected in the new boot-up messages, which can be redisplayed at any time using "dmesg | more".
As with non-PnP ISA boards, the Linux kernel auto-detects the existence of PCI boards easily. So, PCI internal modems would seem at first glance a good bet. Unfortunately, almost all PCI modems are "winmodems". Also, you must still need to take steps to make the kernel initialise support for the PCI board's serial port (using the lspci utility to determine the port's hardware resources, and setserial to pass those resources to the kernel). There's a Web page at http://linuxmafia.com/faq/Hardware/PCImodems.html detailing the latter problem.
Of the non-traditional modem types, some USB modems can be reached using experimental kernel USB drivers. See http://www.linux-usb.org/ . Many USB modems also pose the problem of being "winmodems". (Characteristically, USB modem devices under the ACM class are fine. Those not in the ACM class are typically DSP-less "winmodems".)
"Winmodems", by definition, require additional software to
be used, either because of missing hardware emulated in
software, or because they lack some standard serial-port
circuitry, or both. Each "winmodem" design poses an individual
problem in this area; special Linux drivers exist for a few,
yielding disputed but probably not very good results. You can
find details at http://linmodems.org/ and
Internal Modem Categories:
- PCI winmodem — some have drivers, but yield poor results
- PCI regular — GOOD (but must use lspci, setserial)
- ISA PnP winmodem — some have drivers, isapnptools req'd (and
- ISA PnP regular — isapnptools req'd (and setserial)
- non-PnP regular — must configure rc.serial
External Modem Categories:
- serial-port winmodem — feasibility questionable
- serial-port regular — GOOD
- USB winmodem — feasibility questionable
- USB regular (ACM class) — experimental USB drivers req'd
Summary: From the foregoing, you can see that many modem categories put hurdles in the way of Linux support: "Winmodem" hardware designs, the USB bus, ISA Plug and Play, and usage of serial ports beyond ttyS0 and ttyS1. Each one of these obstacles you avoid reduces your setup difficulties. The ideal modem, then, will be an external non-winmodem model of known quality. Somewhat less good but still acceptable would be a PCI internal modem if you're certain it's not a "winmodem". (Almost all are.) After that would come ISA non-PnP internal modems, and then ISA PnP internal modems. "Winmodems" of all types are best avoided.
In the opinion of many (such as independent modem expert John Navas, http://modemfaq.home.att.net/faq_f.htm#BestOfBest), the 3Com / US Robotics Courier V.Everything external modem is a leading example of this sort of modem. Navas recommends it particularly for data usage, while he finds the ZyXEL Elite 2864 better for fax transmission.
Other non-USB, serial-port-connected external modems will probably also be satisfactory — if they are complete modems and not "winmodem" designs. Naturally, opinions differ on brand and model preferences.