Re: PCI modem suggestions
My understanding is that a modem that has a controller will work from Linux,
with no additional driver, by being associated with an RS232 serial port.
This is obviously the COM1 or COM2 if external. If internal, the Linux
compatible modem will also have a UART chip so it becomes an additional COM
port (COM3?). The controller must accept the Hayes command set (the "AT"
As far as I know that's correct.
It used to be that external modems would always have the controller on board
because obviously they could not be controlled by the ISA/PCI bus.
As far as I know ISA bus based modems all work in Linux.
Only a few internal modems are still made with controllers, apparently for a
bit extra speed.
Yes, that's the main difference, the ones with their own controllers
tend to perform better and are more robust on poor lines. My mom has
three modems, an internal real hardware modem, an external COM port
modem, and an internal winmodem (that she bought when she thought the
other two had gone to modem heaven). Her line is not the best, and on a
good day the winmodem will connect at 28kbits, while the internal
hardware modem and the external one both connect at 36kbits and manage
to sustain a call for much longer.
The other application for the internal "real" modems is for fax
But now, it's interesting that as you say external USB modems may be just
Winmodems. Presumable this is possible because the extra bandwidth allows
software control from the PC without too much of a hit on the data transfer
rate. But it means that external modems can no longer be "guaranteed" to
work with Linux. This surely means, as RS232 types are superceded by USB
ones, that the traditional advice to use an external modem with Linux is no
longer the cure-all it once was.
"Use an external modem" is only half of it, like I said in my earlier
post. It should be "use an external *serial port* modem." Here's an
example of an external USB modem - this is my kernel messages:
Sep 11 20:00:38 theluggage kernel: usb 1-1: new full speed USB device
using uhci_hcd and address 2
Sep 11 20:00:45 theluggage kernel: slusb: unsupported module, tainting
Sep 11 20:00:45 theluggage kernel: ST7554 USB Modem.
Sep 11 20:00:45 theluggage kernel: st7554 probe: cannot initialize device.
Sep 11 20:00:45 theluggage kernel: usb_unlink_urb() is deprecated for
synchronous unlinks. Use usb_kill_urb() instead.
Sep 11 20:00:45 theluggage kernel: Badness in usb_unlink_urb at
Sep 11 20:00:45 theluggage kernel: [<d11d92aa>]
Sep 11 20:00:45 theluggage kernel: [<d0eefdb7>]
Sep 11 20:00:45 theluggage kernel: [<d11d406a>]
Sep 11 20:00:45 theluggage kernel: [<c02350e1>]
Sep 11 20:00:45 theluggage kernel: [<c023520d>] driver_attach+0x4d/0x80
Sep 11 20:00:45 theluggage kernel: [<c023562d>] bus_add_driver+0x6d/0xa0
Sep 11 20:00:45 theluggage kernel: [<c0235b28>] driver_register+0x28/0x30
Sep 11 20:00:45 theluggage kernel: [<c0236692>]
Sep 11 20:00:45 theluggage kernel: [<d11d4130>] usb_register+0x40/0x90
Sep 11 20:00:45 theluggage kernel: [<d0833050>]
Sep 11 20:00:45 theluggage kernel: [<c012e974>] sys_init_module+0x104/0x180
Sep 11 20:00:45 theluggage kernel: [<c0102c49>] sysenter_past_esp+0x52/0x79
Sep 11 20:00:45 theluggage kernel: ST7554 USB Modem: probe of 1-1:1.0
failed with error -12
Sep 11 20:00:45 theluggage kernel: usbcore: registered new driver ST7554
and this is what lshal tells me:
info.product = 'USB Communications Interface' (string)
usb.interface.subclass = 128 (0x80) (int)
usb.interface.protocol = 255 (0xff) (int)
usb.interface.number = 0 (0x0) (int)
usb.interface.class = 2 (0x2) (int)
usb.configuration_value = 1 (0x1) (int)
usb.device_class = 2 (0x2) (int)
usb.device_protocol = 0 (0x0) (int)
usb.device_subclass = 0 (0x0) (int)
usb.max_power = 100 (0x64) (int)
usb.num_configurations = 1 (0x1) (int)
usb.num_interfaces = 1 (0x1) (int)
usb.device_revision_bcd = 512 (0x200) (int)
usb.is_self_powered = false (bool)
usb.can_wake_up = true (bool)
usb.product_id = 30036 (0x7554) (int)
usb.vendor_id = 1155 (0x483) (int)
usb.vendor = 'SGS Thomson Microelectronics' (string)
usb.product = '56k SoftModem' (string)
usb.bus_number = 1 (0x1) (int)
usb.port_number = 1 (0x1) (int)
usb.level_number = 1 (0x1) (int)
usb.linux.device_number = 2 (0x2) (int)
usb.linux.parent_number = 2 (0x2) (int)
usb.num_ports = 0 (0x0) (int)
usb.speed_bcd = 4608 (0x1200) (int)
usb.version_bcd = 256 (0x100) (int)
info.bus = 'usb' (string)
lshw tells me:
description: USB communication device
physical id: 0
bus info: email@example.com
I have not been able to get this working, but I'm not really trying
anymore. The Lucent winmodem in my notebook works well (under SUSE,
that is, I couln't get the installer to work in debian - it kept hanging
when trying to load the module). And if that fails I have an external
serial modem handy.
This particular USB modem works fine in windows (it merely lists it as
an USB 56k modem - no useful info). But it's far more sensitive to line
noise - a general problem with winmodems - and drops a call a lot easier
than the external serial ones.
Presumably the same considerations apply to ADSL adaptors.
I haven't heard good things about external USB ADSL modems - not even