我有一张“Moschip PCIe 9922 多 I/O 控制器”2x 串行 PCI-E 卡,我正在尝试让它在 Ubuntu 13.04 上运行。
lspci 显示控制器正常,但“dmesg | grep tty”没有显示它们。
$ lspci
01:00.0 Serial controller: MosChip Semiconductor Technology Ltd. PCIe 9922 Multi-I/O Controller
01:00.1 Serial controller: MosChip Semiconductor Technology Ltd. PCIe 9922 Multi-I/O Controller
..
$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
..
$ sudo setserial -g /dev/ttyS*
/dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS11, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS12, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS13, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS14, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS15, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS16, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS17, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS18, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS19, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS20, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS21, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS22, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS23, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS24, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS25, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS26, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS27, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS28, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS29, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
/dev/ttyS30, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS31, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS4, UART: unknown, Port: 0x3008, IRQ: 28
/dev/ttyS5, UART: unknown, Port: 0x3000, IRQ: 29
/dev/ttyS6, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS7, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS8, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS9, UART: unknown, Port: 0x0000, IRQ: 0
我是不是遗漏了什么?我只需要用 setserial 来设置它吗?我该怎么做?
我在 12.10 机器上有几乎相同的端口,似乎检测正常,并且它将转到 ttyS4/ttyS5。
谢谢!
答案1
我在同一品牌的卡上遇到了类似的问题。我想出了一个解决方案。
首先,我的 UEFI BIOS 完全忽略了该卡,因此我不得不更改一些与旧式 PCI 选项 ROM 相关的设置,或者让它完全显示在 lspci 上。然后,发出“lspci -v”并查找卡上的 IRQ 以及 I/O 端口。
# lspci -v
我的卡是 6 端口串行卡,显示为 3 个 PCI 设备,一个有 4 个端口,另外 2 个各有一个端口。有 4 个端口的 PCI 设备列出了 IRQ 19 和位于 d000、d010、d020 和 d030 的 I/O 端口。其余两个端口分别位于 d040 和 d050 上,IRQ 为 18 和 17。我将在下面的示例中使用它:
setserial /dev/ttyS0 uart none
setserial /dev/ttyS1 uart none
setserial /dev/ttyS2 uart none
setserial /dev/ttyS3 uart none
setserial /dev/ttyS4 uart none
setserial /dev/ttyS5 uart none
(这可以防止使用可能被错误自动检测的设置时出现错误,并让您可以根据需要分配设备:)
setserial /dev/ttyS0 uart 16550A port 0xd000 irq 19
setserial /dev/ttyS1 uart 16550A port 0xd010 irq 19
setserial /dev/ttyS2 uart 16550A port 0xd020 irq 19
setserial /dev/ttyS3 uart 16550A port 0xd030 irq 19
setserial /dev/ttyS4 uart 16550A port 0xd040 irq 18
setserial /dev/ttyS5 uart 16550A port 0xd050 irq 17
我仍然需要弄清楚如何避免在 rc.local 中需要这个,而是在 modprobe.d 中执行它(如果有人愿意的话,可以启发我们!谢谢!)
另外,能够更改 IRQ 也很好,但我认为这是由 BIOS 处理的 - 或者可能是 UEFI(如果我能在任何地方找到文档!?)(假设它不是硬连线在卡上,这也是可能的)。
答案2
看起来是该卡在该特定主板上无法正常工作。我猜是驱动程序无法正常工作。