Next Previous Contents

5. Multiport Serial Boards/Cards/Adapters

5.1 Intro to Multiport Serial

Multiport serial cards install in slots in a PC on the ISA or PCI bus. Instead of being called "... cards" they are also called "... adapters" or "... boards". Each such card provides you with many serial ports. Today they are commonly used for the control of external devices (including automation for both industry and the home). They can connect to computer servers for the purpose of monitoring/controlling the server from a remote location. They were once mainly used for connecting up many terminals and/or modems to serial ports. They are still used this way but today most modems are internal digital modems (often called something else) and they don't usually use multiport serial cards.

Each multiport card has a number of external connecters (DB-25 or RJ45) so that one may connect up a number of devices (modems, terminals, etc.). Each such physical device would then be connected to its own serial port. Since the space on the external-facing part of the card is limited there is often not enough room for all the serial port connectors. To solve this problem, the connectors may be on the ends of cables which come out (externally) from the card (octopus cable). Or they may be on an external box (possibly rack mountable) which is connected by a cable to a multiport card.

5.2 Modem Limitations

For a modem to transmit at nearly 56k requires that it be a special digital modem and have a digital connection to a digital phone line (such as a T1 line). Modem banks that connect to multiport cards do exist, and some have a card that can access multiplexed digital phone lines. Thus one can use a multiport card with a few 56k digital modems.

For both analog and digital modem there is one modem on each serial port so there needs to be an external cable (modem bank to multiport) for each modem. This can lead to a large number of cables. So it's less clutter (and cheaper) to use internal modems without a multiport card. It's somewhat analogous to the lower cost of an internal modem for a desktop PC as compared to the higher cost (and more cabling) for an external modem. See Modem-HOWTO: Modem Pools, Digital Modems.

5.3 Dumb vs. Smart Cards

Dumb multiport cards are not too much different than ordinary serial ports. They are interrupt driven and the CPU of the computer does most all the work servicing them. They usually have a system of sharing a single interrupt for all the ports. This doesn't decrease the load on the CPU since the single interrupt will be sent to the CPU each time any one port needs servicing. Such devices usually require special drivers that you must put into the kernel or activate by putting a #define in the source code (or the like).

Smart boards may use ordinary UARTs but handle most interrupts from the UARTs internally within the board. This frees the CPU from the burden of handling all these interrupts. The board may save up bytes in its large internal FIFOs and transfer perhaps 1k bytes at a time to the serial buffer in main memory. It may use the full bus width of 32 bits for making data transfers to main memory (instead of transferring only 8-bit bytes like dumb serial cards do). Not all "smart" boards are equally efficient. Many boards today are Plug-and-Play.

5.4 Getting/Enabling a Driver

Introduction

For a multiport board to work, a special driver for it must be used. This driver may either be built into the kernel source code or supplied as a module. Support for dumb boards is likely to the built into the kernel while smart boards usually need a module.

Driver is built into the kernel (mostly dumb boards)

A pre-compiled kernel is not likely to have multiport support built in (especially after kernel 2.4). So you probably need to compile it yourself. In kernel 2.4 you should select "CONFIG_SERIAL_EXTENDED when configuring the kernel (just before you compile). If you select this there will be still more choices presented to you. Even after you do this you may need to edit the resulting source code a little (depending on the card).

Modules (mostly for smart boards)

A pre-compiled kernel may come with a pre-compiled module for the board so that you don't need to recompile the kernel. This module must be loaded in order to use it, but the kernel may automatically do this for you if a program is trying to use a device on the smart board (provided there exists a table showing which module to load for the device). This table may be in /etc/modules.conf and/or be internal to the kernel. Also certain parameters may need to be passed to the driver (via lilo's append command or via /etc/modules.conf). For kernel 2.4 the modules should be found in /lib/modules/.../kernel/drivers/char.

Getting info on multiport boards

The board's manufacturer should have info on their website. Unfortunately, info for old boards is sometimes not there but might be found somewhere else on the Internet (including discussion groups). You might also want to look at the kernel documentation in /usr/share/kernel-doc... For configuring the kernel or modules prior to compiling see: Configure.help and search for "serial", etc. There are also kernel documentation files for certain boards including computone, hayes-esp, moxa-smartio, riscom8, specialix, stallion, and sx (specialix).

5.5 Making multiport devices in the /dev directory

The serial ports your multiport board uses depends on what kind of board you have. Some have their own device names like /dev/ttyE27 or /dev/ttyD2, etc. Ones that use the standard names like /dev/ttyS14 may be listed in detail in rc.serial or in 0setserial. These files may be included in a setserial or serial package. You may need to create these devices (unless an installation script does it for you). Either use the mknod command, or the MAKEDEV script. Devices (in the /dev directory) for ttyS type serial ports are made by adding ``64 + port number''. So, if you wanted to create devices for ttyS17, you would type:


linux# mknod -m 666 /dev/ttyS17 c 4 81
Note the "major" number is always 4 for ttyS devices (and 5 for the obsolete cua devices). Also ``64 + 17 = 81''. Using the MAKEDEV script, you would type:


linux# cd /dev
linux# ./MAKEDEV ttyS17

For the names and numbers of other types of serial ports other than ttyS.. see devices.txt in the kernel documentation. Besides the listing of various brands of multiports found in this HOWTO there is Gary's Encyclopedia - Serial Cards. It's not as complete, but may have some different links.

5.6 Standard PC Serial Cards

In olden days PCs came with a serial card installed. Later on the serial function was put on the hard-drive interface card. Today, one or two serial ports are usually built into the motherboard. Most of them (as of 2001) use a 16550 but some use 16650 (32-byte FIFOs). But one may still buy the old PC serial cards if they need 1-4 more serial ports. These are for ttyS0-ttyS3 (COM1 - COM4). They can be used to connect external serial devices (modems, serial mice, etc...). Only a tiny percentage of retail computer stores carry such cards. But one can purchase them on the Internet. Before getting a PCI one, make sure Linux supports it.

Here's a list of a few popular brands:

Note: due to address conflicts, you may not be able to use COM4 and IBM8514 video card (or some others) simultaneously. See Avoiding IO Address Conflicts with Certain Video Boards

5.7 Dumb Multiport Serial Boards (with standard UART chips)

They are also called "serial adapters". They often have a special method of sharing interrupts which requires that you compile support for them into the kernel.

* => The file that ran setserial in Debian shows some details of configuring # => See note below for this board

In general, Linux will support any serial board which uses a 8250, 16450, 16550, 16550A, 16650, etc. UART. See the latest man page for "setserial" for a more complete list.

Notes:

AST Fourport: You might need to specify skip_test in rc.serial.

BB-1004 and BB-1008 do not support DCD and RI lines, and thus are not usable for dialin modems. They will work fine for all other purposes.

Digi PC/8 Interrupt Status Register is at 0x140.

SIIG IO1812 manual for the listing for COM5-COM8 is wrong. They should be COM5=0x250, COM6=0x258, COM7=0x260, and COM8=0x268.

5.8 Intelligent Multiport Serial Boards

Make sure that a Linux-compatible driver is available and read the information that comes with it. These boards use special devices (in the /dev directory), and not the standard ones. This information varies depending on your hardware. If you have updated info which should be shown here please email it to me.

Names of Linux driver modules are *.o but these may not work for all models shown. Also, parameters (such as the io and irq often need to be given to the module so you need to find instructions on this (possibly in the source code tree). To check on the latest serial driver go to Linux Serial Driver home page

There are many different brands, each of which often offers many different cards. No attempt is currently being made to list all the cards here (and many listed are obsolete). But all major brands and websites should be shown here so it something is missing let me know. Go the the webpage shown for more information. These websites often also have info (ads) on related hardware such as modem pools, remote access servers (RASs), and terminal servers. Where there is no webpage, the cards are likely obsolete. If you would like to put together a better list, let me know.

A review of Comtrol, Cyclades, Digi, and Stallion products was printed in the June 1995 issue of the Linux Journal. The article is available at http://www.ssc.com/lj/issue14.

5.9 Unsupported Multiport Boards

The following boards don't mention any Linux support as of 1 Jan. 2000. Let me know if this changes.


Next Previous Contents