8 Port Serial Cards in Linux
From Kyle's Wiki
So you want to use a fancy 8 Port serial card in linux? The first thing you need to know is that most distros come hard coded to only initialize 4 serial ports. Add this to your grub/bootloader:
8250.nr_uarts=8
Adjust if you have more ports. The next thing to check is your lspci -v, look for your serial card:
01:00.0 Serial controller: Oxford Semiconductor Ltd Device c308 (prog-if 02) Subsystem: Oxford Semiconductor Ltd Device c308 Flags: bus master, fast devsel, latency 0, IRQ 16 Memory at fe9fc000 (32-bit, non-prefetchable) [size=16K] Memory at fe600000 (32-bit, non-prefetchable) [size=2M] Memory at fe400000 (32-bit, non-prefetchable) [size=2M] Capabilities: [40] Power Management version 3 Capabilities: [70] Express Endpoint, MSI 00 Capabilities: [b0] MSI-X: Enable- Mask- TabSize=16 Capabilities: [100] Device Serial Number 00-03-00-11-11-e0-30-00 Capabilities: [110] Power Budgeting <?> Kernel driver in use: serial
Setserial
Next is the setserial command. A good output looks like this:
root@ubuntu:~# setserial -g /dev/ttyS* /dev/ttyS0, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS1, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS2, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS3, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS4, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS5, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS6, UART: 16950/954, Port: 0x0000, IRQ: 16 /dev/ttyS7, UART: 16950/954, Port: 0x0000, IRQ: 16
This would be a bad output (you can see it just guessing at the uart, irq, etc):
[root@centos ~]# setserial -g /dev/ttyS* /dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4 /dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3 /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4 /dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3 /dev/ttyS4, UART: unknown, Port: 0x0000, IRQ: 0 /dev/ttyS5, UART: unknown, Port: 0x0000, IRQ: 0 /dev/ttyS6, UART: unknown, Port: 0x0000, IRQ: 0 /dev/ttyS7, UART: unknown, Port: 0x0000, IRQ: 0
To fix this, stick this in your rc.local:
setserial /dev/ttyS0 port 0xec00 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS1 port 0xe880 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS2 port 0xe800 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS3 port 0xe480 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS4 port 0xe400 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS5 port 0xe080 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS6 port 0xe000 irq 217 uart 16550a baud_base 115200 ^fourport setserial /dev/ttyS7 port 0xdc00 irq 217 uart 16550a baud_base 115200 ^fourport