I bought a
Conrad 6 port serial card,
thinking that any non intelligent card should be 'supported'. As it turns out,
the nmos 9835 is supported by a 2.4 kernel, but the 9845 isn't. What this means
is that the kernel won't automatically recognise the card (2.6 kernels recognise
9835, 9845 and 9855).
According to the documentation that comes with the card, Linux supports no more
then four serial ports. According to '/usr/src/linux/Documentation/devices.txt'
however, Linux supports 192 serial ports.
So what you need to do, is to configure it with setserial;
A 'lspci -vv' shows;
0000:00:0d.0 Serial controller: NetMos Technology PCI 9845 Multi-I/O Controller (rev 01) (prog-if 02 [16550])
Subsystem: LSI Logic / Symbios Logic 0P6S (6 port 16550a serial card)
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 11
Region 0: I/O ports at c400 [size=8]
Region 1: I/O ports at c800 [size=8]
Region 2: I/O ports at cc00 [size=8]
Region 3: I/O ports at d000 [size=8]
Region 4: I/O ports at d400 [size=8]
Region 5: I/O ports at d800 [size=16]
On a Brazilian website I found that it's a good idea to tell setserial that
this card isn't a fourport;
/dev/ttyS4 uart 16550A port 0xc400 irq 11 spd_normal ^fourport ^skip_test /dev/ttyS5 uart 16550A port 0xc800 irq 11 spd_normal ^fourport ^skip_test /dev/ttyS6 uart 16550A port 0xcc00 irq 11 spd_normal ^fourport ^skip_test /dev/ttyS7 uart 16550A port 0xd000 irq 11 spd_normal ^fourport ^skip_test /dev/ttyS8 uart 16550A port 0xd400 irq 11 spd_normal ^fourport ^skip_test /dev/ttyS9 uart 16550A port 0xd800 irq 11 spd_normal ^fourport ^skip_testOf course, if lspci gives you different values you enter those instead.
These ttySs probably don't exist in /dev/, so you need to create them with makedev. I chowned them all root:dialout mode 660;
0 crw-rw---- 1 root dialout 4, 68 Jan 28 18:35 /dev/ttyS4 0 crw-rw---- 1 root dialout 4, 69 Jan 29 16:23 /dev/ttyS5 0 crw-rw---- 1 root dialout 4, 70 Jan 28 18:45 /dev/ttyS6 0 crw-rw---- 1 root dialout 4, 71 Jan 29 15:36 /dev/ttyS7 0 crw-rw---- 1 root dialout 4, 72 Jan 29 15:39 /dev/ttyS8 0 crw-rw---- 1 root dialout 4, 73 Jan 29 15:39 /dev/ttyS9The above applies to a classic /dev/ with a 2.4 kernel or lower. Apparently, with older 2.6 kernels the above table starts with ttyS14.
T4:23:respawn:/sbin/getty ttyS4 38400 vt420 T5:23:respawn:/sbin/getty ttyS5 38400 vt420 T6:23:respawn:/sbin/getty ttyS6 38400 vt420 T7:23:respawn:/sbin/getty ttyS7 38400 vt420 T8:23:respawn:/sbin/getty ttyS8 38400 vt420 T9:23:respawn:/sbin/getty ttyS9 38400 vt420The above mentioned quirk however makes it necessary to run 'init q' after plugging the terminal into an other 232 port.
I also tested with a minicom Z-modem filetransfer at 115200 bps over a
null modem cable.
This works OK.
I then tested it with two 28k8 modems with the port speed at 115200 bps in order
to check flow control. This also seems to work fine.
# kopt=root=/dev/hda3 ro 8250.nr_uarts=8Then run update-grub.
0 crw-rw---- 1 root dialout 4, 64 2009-01-04 01:11 /dev/ttyS0 0 crw-rw---- 1 root dialout 4, 65 2009-01-04 01:11 /dev/ttyS1 0 crw-rw---- 1 root dialout 4, 66 2009-01-04 03:38 /dev/ttyS2 0 crw-rw---- 1 root dialout 4, 67 2009-01-04 01:32 /dev/ttyS3 0 crw-rw---- 1 root dialout 4, 68 2009-01-04 01:27 /dev/ttyS4 0 crw-rw---- 1 root dialout 4, 69 2009-01-04 01:28 /dev/ttyS5 0 crw-rw---- 1 root dialout 4, 70 2009-01-04 01:32 /dev/ttyS6 0 crw-rw---- 1 root dialout 4, 71 2009-01-04 01:32 /dev/ttyS7If you still want to tweak things with setserial, you can find the info you need in /proc/tty/driver/serial