I bought a 4 port RS232 serial card for my box, the supplier said it was Linux supported.
Though as you can see before it wasn't that clear cut, some fiddling was needed - pretty much like how most devices needed setting in the old Linux days... before user friendly linux distros.
It said it has Sun1040 chips??? Does that mean anything to anyone? LOL As you can see below Linux thinks it is "LSI Logic / Symbios Logic" so not Sun 1040...
Look for the card...
Look for the card...
Check the IRQ and port addresses
# lspci -vv -d 5372:6873
05:06.0 Communication controller: Device 5372:6873 (rev 01)
Subsystem: LSI Logic / Symbios Logic Device 0004
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=slow >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 255
Region 0: I/O ports at 9000 [size=8]
Region 1: I/O ports at 9400 [size=8]
Region 2: I/O ports at 9800 [size=8]
Region 3: I/O ports at 9c00 [size=8]
Region 4: I/O ports at a000 [size=8]
Region 5: I/O ports at a400 [size=16]
'I/O+' means it is enabled in the PCI bus.
See what kernel options are set for the serial ports
# grep SERIAL /boot/config-2.6.35-23-server | grep -v USB
CONFIG_SERIAL_8250_NR_UARTS=48
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
4 devices created at boot time (RUNTIME), so increase this by editing grub
vim /etc/default/grub
Make sure we have enough serial ports created by the kernel 8250.nr_uarts=X
GRUB_CMDLINE_LINUX_DEFAULT="quiet 8250.nr_uarts=5"
I rebooted here so the OS created some more devices in /dev/ttySx
The next bit based on http://www.outer-place.com/ (thanks) :)
*** MOST IMPORTANT enable PCI serial device - wot a crock
echo -n "5372 6872" > /sys/bus/pci/drivers/serial/new_id
i'm not happy with irq=0, but the pci output shows irq=255, 'INTx-' might mean it doesnt use IRQs
# grep SERIAL /boot/config-2.6.35-23-server | grep -v USB
CONFIG_SERIAL_8250_NR_UARTS=48
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
4 devices created at boot time (RUNTIME), so increase this by editing grub
vim /etc/default/grub
Make sure we have enough serial ports created by the kernel 8250.nr_uarts=X
GRUB_CMDLINE_LINUX_DEFAULT="quiet 8250.nr_uarts=5"
I rebooted here so the OS created some more devices in /dev/ttySx
The next bit based on http://www.outer-place.com/ (thanks) :)
*** MOST IMPORTANT enable PCI serial device - wot a crock
echo -n "5372 6872" > /sys/bus/pci/drivers/serial/new_id
i'm not happy with irq=0, but the pci output shows irq=255, 'INTx-' might mean it doesnt use IRQs
Physical positioning on the back of my computer
# top right - ymmv
setserial /dev/ttyS1 port 0x9000 uart 16550A irq 0
# top left
setserial /dev/ttyS2 port 0x9400 uart 16550A irq 0
# bottom left
setserial /dev/ttyS3 port 0x9800 uart 16550A irq 0
# bottom right - wouldn't set by hand so used parameter
# set from setserial -G /dev/ttyS3 to get it to work
# change port and dev obviously, maybe port and uart are
# wrong way around
setserial /dev/ttyS4 port 0x9c00 uart 16550A irq 0
Use setserial -G to get a full working parameter set
$ setserial -g -G /dev/ttyS*
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart 16550A port 0x9000 irq 0 baud_base 115200 spd_normal skip_test auto_irq
/dev/ttyS2 uart 16550A port 0x9400 irq 0 baud_base 115200 spd_normal skip_test auto_irq
/dev/ttyS3 uart 16550A port 0x9800 irq 0 baud_base 115200 spd_normal skip_test auto_irq
/dev/ttyS4 uart 16550A port 0x9c00 irq 0 baud_base 115200 spd_normal skip_test auto_irq
Then save setup with
dpkg-reconfigure setserial
select >> "autosave once"
*** BUG https://bugs.launchpad.net/debian/+source/setserial/+bug/46994 ***
*** doesnt work , so copy in the setserial -g -G /dev/ttyS* output by hand ***
vi /var/lib/setserial/autoserial.conf
Make sure pci device is initailsed at startup
vi /etc/init.d/setserial
Find the start function, and add
## add in 4 port serial device
echo -n "5372 6872" > /sys/bus/pci/drivers/serial/new_id
## done add 4 port serial device
Reboot and check
# setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x9000, IRQ: 0
/dev/ttyS2, UART: 16550A, Port: 0x9400, IRQ: 0
/dev/ttyS3, UART: 16550A, Port: 0x9800, IRQ: 0
/dev/ttyS4, UART: 16550A, Port: 0x9c00, IRQ: 0
Check #2
# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR
1: uart:16550A port:00009000 irq:0 tx:11 rx:5 RTS|DTR
2: uart:16550A port:00009400 irq:0 tx:0 rx:0
3: uart:16550A port:00009800 irq:0 tx:16 rx:5 RTS|DTR
4: uart:16550A port:00009C00 irq:0 tx:13 rx:4 RTS|DTR
Check #3
Join pins 2 &3 together on ports - minicom to test - turn off flow-control else no text seen
minicom -o -D /dev/ttyS1
Thanks so much! This tip really helped me.
ReplyDeleteThank you so much!
ReplyDeleteThank yo so much!
ReplyDeleteGreat post and really helpful blog as whole.