Due to a lack of information, the development of Linux drivers for WinModems is rather difficult. Thus, a common hardware-related problem for Linux users is the inability to get a WinModem to run with Linux. If you're experiencing this problem, don't throw away your modem just yet. In this Daily Feature, I will explain where to obtain the proper drivers, how to install them, and a few tweaks you can make to get your Linux system connected with your WinModem.
In my examples, I will focus on the Lucent LTModem, which uses a chipset found in a wide variety of ISA and PCI modems. I will also refer to the Lucent digital signal processor (DSP) chipset, which is found on the LTModem and is often used in modems from Xircom and Zoom. It is also a common choice as a built-in modem in several laptop and desktop computers.
What is a WinModem?
The term WinModem is a registered trademark of US Robotics and 3COM. A WinModem is a combination of both hardware and software modems. Traditional modems use hardware to perform all signal processing; the computer in which the modem is installed simply sends and receives digital signals to and from the modem. Where traditional modems actually perform the necessary processing to send the digital signal over an analog telephone line, software modems use only software to perform all signal-processing tasks.
WinModem is more commonly used to refer to any modem that performs the processing tasks normally performed by a standard modem via a combination of the computer's CPU and DSP. These modems are cheap to manufacture, which makes them popular with computer and motherboard manufacturers. However, the DSP chipset manufacturers typically will not release the information required to develop drivers for these modems. This is why Linux users have compatibility problems with WinModems.
Confirm your modem type
Before you install a modem driver, you need to confirm whether or not you are using a Lucent DSP modem. There are two chipsets commonly used with Lucent modems:
- · The Apollo chipset is found in ISA modems and uses the DSP1641B, DSP1643, and DSP1644 versions of the Lucent DSP.
- · The Mars chipset is found in PCI modems and uses the DSP1645 version.
If you have a PCI modem, run the following command as root to help identify your modem:
This command will return a list of devices connected to the PCI bus. Look for an entry similar to the one shown in Example 1 to identify your modem.
The colon-separated numbers at the beginning of Example 1 identify where the modem is installed on the PCI bus. In this case, the line:
shows that the modem is installed on PCI bus 0, and the card number for the modem is 14 (0e in hexadecimal). Once the bus number and card number for the modem are discovered, you still need to identify the modem vendor and device codes. Running the following command as root will give you that information:
After you run it, look for a line that begins with the same card number as your modem. You should see a line similar to the following:
00:0e.0 Class 0780: 115d:0440 (rev 01)
The numbers 115d:0440 provide two important pieces of information:
- · 115d is the modem manufacturer. In this case, Xircom is the manufacturer.
- · 0440 is the device identification of the modem.
These two pieces of information provide a specific identification for your modem. When you have this information, check the Device Identification ranges in Table 1. If the Device ID of your modem falls within the device ID range for any of these manufacturers, the LTModem driver supports your modem.
|Manuf.||Manuf. ID||Device ID values|
Obtaining the LTModem driver
I used version 6.00a of the LTModem driver for my examples in this article. There are both binary and source code versions of the LTModem driver available for download from this site, maintained by Christoph Hebeisen. The binary versions will work well if the version available matches the kernel you are running or if you don't use a custom kernel. However, the contents of the binary packages are not verified. If there are any security considerations related to installing this driver, the source code version is the version to use. For this article, I will build the driver from source code.
Installing the driver
The LTModem driver is compiled as a kernel module for the version of kernel running on your system. Before the module is compiled, the kernel-header files for your kernel must be installed on your system. If you run a basic kernel from the original Linux installation, the kernel-header files may already be installed. To find out if they are installed, the user can issue the command:
where * is the number of the kernel. This allows the user to see if there are files and directories located within. They are looking for files ending with .h, which indicates that they are header files. If they are not installed, they will be available on your installation CD.
After you verify that the files are installed or you've installed the files from your CD, create a symbolic link from /usr/src/linux to the directory where the kernel-header files are located. For example, to create this symbolic link on a system running the 2.2.18 kernel, run the command:
ln -s /usr/src/kernel-headers-2.2.18 /usr/src/linux
If you run a custom kernel, you will need the source code for your kernel in addition to the kernel-header files. Once the source code is installed, create a symbolic link from /usr/src/linux to the directory containing the kernel source code. For example:
ln -s /usr/src/linux-2.2.18 /usr/src/linux
Next, create the necessary links between the kernel-header files and the source code by running the following two commands:
After the kernel source code and kernel headers have been prepared, you're ready to compile the driver. The first action is to untar and unzip the driver package. This is done with the command:
tar -zxvf ltmodem-6.00a.tar.gz
When the driver package is unzipped, enter the directory created using the command:
Next, the driver module is built using the command:
Next, install the driver module by running the command:
When these commands are run, the following actions take place:
- · The driver module is installed in /lib/modules/kernel-version.
- · The device file /dev/ttyLT0 is created.
- · The /dev/modem file is linked to the /dev/ttyLT0 file.
- · An entry is created in the /etc/modules.conf file, enabling the driver to be loaded when the system is booted.
Where you see /lib/modules/kernel-version above, kernel-version actually refers to whatever version of the Linux kernel you are using. This does not mean that module is literally installed in a directory called kernel-version.
The device file /dev/ttyLT0 is actually a virtual serial port that allows any dial-up program to communicate with the LTModem as if there were a serial modem connected to this port.
Any software used to provide dial-up services must be configured to use /dev/ttyLT0, rather than /dev/ttyS0.
Testing the modem
If your modem is not working correctly, run this command:
If the output from this command is No Such Device, the LTModem driver is unable to detect the modem. Make sure that your modem is an LTModem. If the device ID is not supported by the LTModem driver, add the lines similar to the following to the /etc/modules.conf file:
alias char-major-62 ltmodem
option ltmodem vendor_id=0x11d1 device_id=0x0100
Make sure you use the vendor and device IDs you obtained by running the lspci -n command above. If the driver module installs properly, but there is a No Dial Tone message when you attempt to dial out, reboot your machine and enter the BIOS setup program. Change the BIOS setting from PNP OS to Non-PNP OS in order to locate the modem manually.
The Lucent LTModem is one of the most common WinModems available today, yet Linux support for this modem is very limited. Since many computers ship with WinModems, the ability to provide support for these chipsets can help make Linux a more acceptable desktop solution. If you still have issues with getting your LTModem to work after following the steps I've outlined here, take a look at the Linux WinModem site, Dan Rees’ WinModem site, or the Linux LinModem page on Technion.