This HOWTO covers conventional analog modems for PCs on either the ISA or PCI bus. For other types of modems:
For modems on the PCMCIA bus see the PCMCIA-HOWTO: PCMCIA serial and modem devices. This HOWTO also doesn't cover PPP (used to connect to the Internet via a modem) or communication programs. Except it does show how to use communication programs to test that your modem works OK and can make phone calls. If you want to use a modem to connect to the Internet then you need to set up PPP. There's a lot of documentation for PPP (including a PPP-HOWTO). More documentation should be found in /usr/doc/ppp, /usr/share/doc/ppp or the like.
Copyright (c) 1998-2000 by David S. Lawyer mailto:dave@lafn.org
Please freely copy and distribute (sell or give away) this document in any format. Send any corrections and comments to the document maintainer. You may create a derivative work and distribute it provided that you:
If you're considering making a derived work other than a translation, it's requested that you discuss your plans with the current maintainer.
While I haven't intentionally tried to mislead you, there are likely a number of errors in this document. Please let me know about them. Since this is free documentation, it should be obvious that I cannot be held legally responsible for any errors.
Any brand names (starts with a capital letter) should be assumed to be a trademark). Such trademarks belong to their respective owners.
"Hayes" is a trademark of Microcomputer Products Inc. I use "winmodem" to mean any modem which requires MS-Windows and not in the trademark sense. All other trademarks belong to their respective owners.
The following is only a rough approximation of how this this
document (as of 2000) was created: About 1/4 of the material here was
lifted directly from Serial-HOWTO v. 1.11 (1997) by Greg Hankins.
mailto:gregh@twoguys.org (with his permission). About
another 1/4 was taken from that Serial-HOWTO and revised. The
remaining 1/2 is newly created by the new author: David S. Lawyer
mailto:dave@lafn.org
.
Since I don't follow the many different brands/models of modems please don't email me with questions about them (or suggestions of which one to buy). If you are interested in a certain model (to find out if it works under Linux, etc.) see the huge list at Web Sites. Also, please don't ask me how to configure a modem unless you've looked over this HOWTO and still can't do it. I've no personal experience with software-based modems.
Please let me know of any errors in facts, opinions, logic, spelling, grammar, clarity, links, etc. But first, if the date is over a month old, check to see that you have the latest version. Please send me any other info that you think belongs in this document.
New versions of this Modem-HOWTO come out every month or two since modem situation is rapidly changing (and since I'm still learning). Your problem might be solved in the latest version. It will be available to browse and/or download at LDP mirror sites. For a list of such sites see: http://metalab.unc.edu/LDP/mirrors.html If you only want to quickly compare the date of this the version v0.12, December 2000 with the date of the latest version go to: http://metalab.unc.edu/LDP/HOWTO/Modem-HOWTO.html
v0.12 Zoltrix and Cirrus Logic linmodems; don't omit 0 in X0 (for some modems) X3 if no dial-tone; init string locations; more on "Modem is busy"; PCI non-winmodems are OK; terminology: software-based modem, driver-based modem; Linmodem-HOWTO; types of software modems; setserial irq5 to irq 5; Quick Install rewrite.
A modem is a device that lets one send digital signals over ordinary telephone lines not designed for digital signals. If telephone lines were all digital then you wouldn't need a modem. It permits your computer to connect to and communicate with the rest of the world. When you use a modem, you normally use a communication program or web browser (which includes such a program) to utilize the modem and dial-out on a telephone line. Advanced modem users can set things up so that others may phone in to them and use their computer. This is called "dial-in".
There are two basic types of modems for a PC: external and internal. The external sets on your desk outside the PC while the internal is not visible since it's inside the PC. The external modem plugs into a connector on the back of the PC known as a "serial port". The internal modem is a card that is inserted inside the computer and has an (invisible) serial port built into it. For a more detailed comparison see External vs. Internal. Thus when you get an internal modem, you also get a dedicated serial port (which can only be used with the modem and not with anything else such as another modem or a printer). In Linux, the serial ports are named ttyS0, ttyS1, etc. (usually corresponding respectively to COM1, COM2, etc. in Dos/Windows).
The serial port is not to be confused with the "Universal Serial Bus" (USB) which uses a special modular connector and may be used to connect an external modem. See Modem & Serial Port Basics for more details on modems and serial ports.
Modems usually include the ability to send Faxes (Fax Modems). See Fax for a list of fax software. "Voice" modems can work like an automatic answering machine and handle voicemail. See Voicemail.
With a straight-thru or modem cable, connect the modem to an unused serial port on the PC. Make sure you know the name of the serial port: in most cases COM1 is ttyS0, COM2 is ttyS1, etc. You may need to check the BIOS setup menu to determine this. Plug in the power cord to provide power to the modem. See All Modems for further instructions.
The first thing to do is to make sure that the modem will work under Linux since (as of late 2000) most newer modems don't. See modem list. If the modem is both PnP and directly supported by the serial driver (kernel 2.4 +) then you have nothing to do since the driver will configure it. Otherwise read on. It may or may not be easy.
If you have a modem that is not a winmodem (see Software-based Modems (winmodems)) and you must configure it yourself (the driver doesn't do it) then you first need to decide which ttySx to assign it to. Pick a ttySx that is not already in use by other serial ports. Then you have the problem of setting an IRQ number and IO address. For PnP modems: If the BIOS has already set these in the physical device (which a PnP BIOS will do if it thinks you don't have a PnP OS) then you need to determine the IRQ and IO address and then tell this to "setserial". In other cases you may have some choice of IRQs and IO addresses (including the case where you are able to change what the BIOS has set). See Choosing Serial IRQs and Choosing Addresses. For ISA modems there are standard IO addresses to use (corresponding to the ttySx). PCI modems seem to use different IO addresses so as not to conflict with ISA modems. For example you may find it feasible to use /dev/ttyS2 at IO address 0x3e8 and IRQ 11.
For old modems with jumpers look at the manual (or jumpers if they say). If the BIOS has already configured the ISA modem then "isapnp --dumpregs" should show it. If you need to set or change them use "isapnp". Use the "pnpdump" to see what you changes are possible.
For PCI, the BIOS almost always sets the IRQ any may have set the IO address as well. To see how it's set use "lspci -v" or look in /proc/bus/pci. If more than one IO address is shown, the first one is more likely to be it. You can't change the IRQ (at least not with "setpci") If you must, change the IO address with "setpci" by changing the BASE_ADDRESS_0 or the like. The _0 (or _1) after BASE_ADDRESS must be the correct register.
You must find the file where "setserial" is run at boot-time and add a line something like: "setserial /dev/ttyS2 irq 5 port 0x0b8". For setserial v2.15 and later the results of running "setserial" on the command line may (or may not) be saved to /etc/serial.conf so that it runs each time you boot. See What is Setserial for more info. See the next subsection All Modems for further instructions on quick installation.
If you are using the BIOS to configure you may use MS Windows9x to "force" the BIOS to set a certain IRQ and/or IO. It can set them into the PnP BIOS's flash memory where they will be used to configure for Linux as well as Windows. See "Plug-and-Play-HOWTO and search for "forced" (occurs in several places). For Windows3.x you can do the same thing using the ICU under Windows 3.x. A few modems have a way to disable PnP in the modem hardware using software (under Windows) that came with the modem.
Plug the modem into a telephone line. Then configure a communication program such as minicom or a ppp program (such as wvdial). Set the serial port speed to a baud rate a few times higher than the bit rate of your modem. See Speed Table for the "best" speeds to use. Tell it the full name of your serial port such as /dev/ttyS1. Set hardware flow control (RTS/CTS).
Minicom is the easiest to set up and to use to test your modem. But if you are lucky you may get ppp to work the first time and not need to bother with minicom. With minicom you may simply type the command: AT and hit enter (before dialing) to check that your modem is there and responds with OK.