I installed a 2 port serial PCI card on a system running CentOS 4.3, but I can't get the additional serial ports to work. The card I used is from StarTech (http://www.startech.com/Product/ItemDetail.aspx? productid=PCI2S550&c=US). When it is detected by kudzu, it shows up as a "NetMos Technologies PCI 9835 Multi I/O Controller". I've included the output of "lspci" and "cat /proc/pci" below.
The (very sparse) instructions for Linux support for this card state that you should look for the string "serial port x" in the contents of /proc/pci, and then use that information with the setserial command to configure the port as follows:
# setserial /dev/ttyS2 port 0xc000 uart 16550 irq 11 baud_base 115200
The problem is that I can't find the equivalent of the "0xc000" and the IRQ on my system in the contents of /proc/pci. Here is what the built-in, working serial port looks like:
# setserial -a /dev/ttyS0 /dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4 Baud_base: 115200, close_delay: 500, divisor: 0 closing_wait: 30000 Flags: spd_normal skip_test auto_irq
Any ideas how to get these serial ports working?
Thanks, Alfred
# lspci 00:00.0 Host bridge: Intel Corporation 945G/GZ/P/PL Express Memory Controller Hub (rev 02) 00:02.0 VGA compatible controller: Intel Corporation 945G/GZ Express Integrated Graphics Controller (rev 02) 00:02.1 Display controller: Intel Corporation 945G/GZ Express Integrated Graphics Controller (rev 02) 00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01) 00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01) 00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01) 00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 01) 00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 01) 00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 01) 00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 01) 00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01) 00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1) 00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01) 00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE (rev 01) 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01) 02:00.0 Ethernet controller: Intel Corporation 82573E Gigabit Ethernet Controller (Copper) (rev 03) 0a:0a.0 Serial controller: NetMos Technology PCI 9835 Multi-I/O Controller (rev 01) # cat /proc/pci PCI devices found: Bus 0, device 0, function 0: Class 0600: PCI device 8086:2770 (rev 2). Bus 0, device 2, function 0: Class 0300: PCI device 8086:2772 (rev 2). IRQ 5. Non-prefetchable 32 bit memory at 0xd0100000 [0xd017ffff]. I/O at 0x30c0 [0x30c7]. Prefetchable 32 bit memory at 0xc0000000 [0xcfffffff]. Non-prefetchable 32 bit memory at 0xd0180000 [0xd01bffff]. Bus 0, device 2, function 1: Class 0380: PCI device 8086:2776 (rev 2). Non-prefetchable 32 bit memory at 0xd0200000 [0xd027ffff]. Bus 0, device 27, function 0: Class 0403: PCI device 8086:27d8 (rev 1). IRQ 11. Non-prefetchable 64 bit memory at 0xd01c0000 [0xd01c3fff]. Bus 0, device 28, function 0: Class 0604: PCI device 8086:27d0 (rev 1). IRQ 10. Master Capable. No bursts. Min Gnt=4. Bus 0, device 28, function 1: Class 0604: PCI device 8086:27d2 (rev 1). IRQ 5. Bus 0, device 29, function 0: Class 0c03: PCI device 8086:27c8 (rev 1). IRQ 11. I/O at 0x3000 [0x301f]. Bus 0, device 29, function 1: Class 0c03: PCI device 8086:27c9 (rev 1). IRQ 9. I/O at 0x3020 [0x303f]. Bus 0, device 29, function 2: Class 0c03: PCI device 8086:27ca (rev 1). IRQ 11. I/O at 0x3040 [0x305f]. Bus 0, device 29, function 3: Class 0c03: PCI device 8086:27cb (rev 1). IRQ 5. I/O at 0x3060 [0x307f]. Bus 0, device 29, function 7: Class 0c03: PCI device 8086:27cc (rev 1). IRQ 11. Non-prefetchable 32 bit memory at 0xd03c4000 [0xd03c43ff]. Bus 0, device 30, function 0: Class 0604: PCI device 8086:244e (rev 225). Master Capable. No bursts. Min Gnt=4. Bus 0, device 31, function 0: Class 0601: PCI device 8086:27b8 (rev 1). Bus 0, device 31, function 2: Class 0101: PCI device 8086:27c0 (rev 1). IRQ 9. I/O at 0x30b0 [0x30bf]. Bus 0, device 31, function 3: Class 0c05: PCI device 8086:27da (rev 1). IRQ 9. I/O at 0x3080 [0x309f]. Bus 2, device 0, function 0: Class 0200: PCI device 8086:108c (rev 3). IRQ 5. Non-prefetchable 32 bit memory at 0xd0080000 [0xd009ffff]. Non-prefetchable 32 bit memory at 0xd0000000 [0xd007ffff]. I/O at 0x4000 [0x401f]. Bus 10, device 10, function 0: Class 0700: PCI device 9710:9835 (rev 1). IRQ 11. Master Capable. Latency=32. I/O at 0x5030 [0x5037]. I/O at 0x5028 [0x502f]. I/O at 0x5020 [0x5027]. I/O at 0x5018 [0x501f]. I/O at 0x5010 [0x5017]. I/O at 0x5000 [0x500f].
On Fri, 2006-06-23 at 13:46 -0400, Alfred von Campe wrote:
I installed a 2 port serial PCI card on a system running CentOS 4.3, but I can't get the additional serial ports to work. The card I used is from StarTech (http://www.startech.com/Product/ItemDetail.aspx? productid=PCI2S550&c=US). When it is detected by kudzu, it shows up as a "NetMos Technologies PCI 9835 Multi I/O Controller". I've included the output of "lspci" and "cat /proc/pci" below.
The (very sparse) instructions for Linux support for this card state that you should look for the string "serial port x" in the contents of /proc/pci, and then use that information with the setserial command to configure the port as follows:
# setserial /dev/ttyS2 port 0xc000 uart 16550 irq 11 baud_base
115200
The problem is that I can't find the equivalent of the "0xc000" and the IRQ on my system in the contents of /proc/pci. Here is what the built-in, working serial port looks like:
# setserial -a /dev/ttyS0 /dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4 Baud_base: 115200, close_delay: 500, divisor: 0 closing_wait: 30000 Flags: spd_normal skip_test auto_irq
Any ideas how to get these serial ports working?
First look at /var/log/dmesg and see if it's found there. If it is, should should see some accurate numbers. Also /var/log/messages might have something.
A reported IRQ and startmem address should be shown and might not match the instructions, which a very likely examples only. Hopefully those will give clues you need.
If that fails, watch the screen at reboot (with settings that slow things down) and observe the ESCD display that lists the ports, controllers, etc. You might see a real address and IRQ there.
Make sure there is a real /dev/ttyS2 in /dev. This presumes that it is the 3rd serial port. 2nd would be ttyS1. It must have the right minor device for the nth serial card. That is usually (nth - 1) + some-magic.
Results like 64, 65, 66, ... for minor device. And maybe ttyS* is not right for this card? It's been so long since I read up on that stuff... S means wait for carrier detect before allowing open? This is, "blocking read". Others don't need that, "non-blocking read". Like a dumb terminal hooked up with a badly made null-modem cable or adapter.
Thanks, Alfred
<snip>
HTH
On Jun 23, 2006, at 14:40, William L. Maltby wrote:
First look at /var/log/dmesg and see if it's found there. If it is, should should see some accurate numbers. Also /var/log/messages might have something.
Arrgh, I thought I looked in the output of dmesg before (I must have grep'ed for ttyS1 and not seen anything). But saving the output of dmesg to a file, and looking at it line by line, I found that the ports are there, but not as ttyS{1,2} as I expected, but rather as ttyS{4,5}! A quick test confirms that these ports are working just fine.
Thanks, Alfred