Multiport serial cards install in slots in a PC on the ISA or PCI bus. 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 dumb terminals and/or modems to serial ports. Today, use of dumb terminals has declined, and several modems (or digital modems) can now be built into an internal card. So multiport serial cards are not as significant as they once were.
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.
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 either compile into the kernel or use as a module.
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.
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. For the 2.6 kernels on, most drivers are supplied both ways: as a module or it can be built into the kernel. Take care not to both build support into the kernel and force the module to load for a certain serial card. For older kernels, there were often no modules for dumb serial multiport boards so support was built into the kernel.
A pre-compiled kernel may not have a driver for your multiport card built in. So then you must either compile the kernel yourself and build in the right driver, or insure that the module is available and loads. Of course if the driver doesn't come both ways (as a compile-time option and as a module) you have no such choice.
If you want to see what has already been compiled into an existing working kernel, go to the /boot directory (or wherever the compiled kernel(s) reside) and look in the config... file.
In the 2.6 kernel there are many options to select from in the configuration file for compiling. Adding support for certain multiport cards is listed under the headings "Character devices" or "Serial drivers". Old multiport cards had support as part of the serial driver and are found under "Serial Drivers". More advanced cards have their own driver found under "Character devices"
For compiling kernel 2.6 you should select "CONFIG_SERIAL_8250_EXTENDED". (or just "CONFIG_SERIAL_EXTENDED" for 2.4). Then you will be asked more questions about your serial ports with more options to select. If the resulting configuration is not quite right, then you may need to edit the kernel configuration file manually.
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 and if there is installation
software for the driver, it should also set up Linux to load the
module (probably at boottime). Some of the modules to load at
boottime are listed in /etc/modules or /etc/modules.conf
Also certain parameters may need to be passed
to the driver via entries in these files or via lilo's "append"
command or via grub's "kernel" command. For kernel 2.6 (and 2.4) the
(unloaded) modules should be found in
/lib/modules/.../kernel/drivers/char.
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/doc/linux-doc... (formerly kernel-doc in pre 2.6 kernels). 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).
The serial ports your multiport board uses depends on what kind of
board you have. Some have their own device names like /dev/ttyE27
(Stallion) or /dev/ttyD2 (Digiboard), etc. For various other brands,
see devices.txt in the kernel documentation. Some use the
standard names like /dev/ttyS14 and may be found in configuration
files that used as arguments to setserial
. Such files may be
included in a setserial or serial package.
An installation script may do this for you. But if not, here's some examples of how to create a device name in the /dev directory. If you use udev, MAKEDEV will not create devices in the device directory since this directory is only in memory and will be lost when you turn off the computer. Instead it will create the device indev/.static/dev directory.
For the names and numbers of other types of serial ports other
than ttyS.. See devices.txt in the kernel documentation. Either use
the mknod
command, or the MAKEDEV
script. Typing "man
makedev" may show instructions on using it.
Using the MAKEDEV
script, you would first become the superuser
(root) and type (for example) either:
linux# MAKEDEV ttyS17
Or if the above doesn't work cd to /dev before giving the above command>. Substitute whatever your port is for ttyS17.
Using mknod
is a more complicated option since you need to know
the major and minor device numbers. These numbers are in the
"devices" file in the kernel documentation. For ttyS serial ports the
minor number is: 64 + port number (=81 for the example below). Note
the "major" number is always 4 for ttyS devices (and 5 for the
obsolete cua devices). So, if you wanted to create a device for
ttyS17
using mknod
, you would type:
linux# mknod -m 666 /dev/ttyS17 c 4 81
In olden days, PCs came with a serial card installed. Later on, the serial function was put on the hard-drive interface card. In the 1990s and early 2000s one or two serial ports were usually built into the motherboard (on-board). Most of them (as of 2002) use a 16550 but some use 16650 (32-byte FIFOs). But one may still buy the individual PC serial cards if they need more serial ports. 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 one for the PCI bus, 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 /dev/ttyS3 with a IBM8514 video card (and some others) simultaneously. See Avoiding IO Address Conflicts with Certain Video Boards
They are also called "serial adapters". Each port has its own
address. 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, 16650V2, 16654, 16750, 16850, 16950, and 16954. 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.
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 ttyS 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 *.ko (*.o prior to kernel 2.6) but these may not work for all models shown. See Modules (mostly for smart boards) The needed module may have been supplied with your Linux distribution. 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).
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 and have bad internet links to them which need to be fixed). But all major brands and websites should be shown here so it something is missing let me know. Go to 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.
http://www.perle.com
http://www.comtrol.com
ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
http://www.connecttech.com/
http://www.cyclades.com/products/svrbas/zseries.php
ftp://ftp.cyclades.com/pub/cyclades
and included in Linux
kernel since version 1.1.75: cyclades.o
mailto:info@cendio.se
ftp://ftp.cendio.se/pub/pccom8
http://www.dgii.com
ftp://ftp.dgii.com/drivers/linux
and
included in Linux kernel since version 2.0. epca.o
si@wimpol.demon.co.uk
http://www.equinox.com
ftp://ftp.equinox.com/library/sst
http://www.gtek.com
ftp://ftp.gtek.com/pub
http://www.nyx.net/~arobinso
http://www.nyx.net/~arobinso
http://www.maxpeed.com
ftp://maxpeed.com/pub/ss
http://www.moxa.com
http://www.moxa.com/support/download/download.php3>
ftp://ftp.moxa.com/drivers/linux
(also from Taiwan at www.moxa.com.tw/...) where ... is the same as
above)
http://www.sdlcomm.com
ftp://ftp.sdlcomm.com/pub/drivers
sales@stallion.com
or
http://www.stallion.com
ftp://ftp.stallion.com/drivers/ata5/Linux
and
included in linux kernel since 1.3.27. Moved: it's now at ?.
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 Review: Intelligent Multiport Serial Boards Besides the listing of various brands of multiports found above in this HOWTO there is Gary's Encyclopedia - Serial Cards. It's not as complete, but may have some different links.
The following brands that formerly made boards for with Linux support don't mention any Linux support as of 1 Jan. 2000. Let me know if this changes.