无法在异常 io 端口地址初始化/检测 16550A UART

Mr *_*nky 6 linux drivers linux-kernel

我有一个基于 Vortex86DX CPU 的板子,它是一个基于 x86 的微控制器。它有五个 16550A UART,其中四个 (COM1-COM4) 位于通常的 io 端口地址 (0x3f8, 0x2f8, 0x3e8, 0x2e8) 但第五个 (COM9) 位于 0x010, irq 9。

涡86DX

检测到前四个UARTS,我对它们没有问题。问题是我无法让第五个 (COM9) 在 Linux 中工作。COM9 在独立的 DOS 应用程序中工作,但我什至无法从 Linux 中检测到它。

到目前为止我所做的:

结果:内核无法探测地址 0x010 处的 UART

所以我写了一个io端口探测实用程序直接从io端口0x010读取,在0x010到0x017区域检测不到任何16550A寄存器。那里似乎什么都没有。我一直在尝试从暂存寄存器(偏移量 +7)写入和读取数据,但在地址 0x017 处什么也没得到。

CPU的数据表并没有说太多。它表示南桥寄存器中有一个控制位为 COM9 做“某事”。我写了一个 PCI 实用程序来写入这个位,但是当我进行 io 端口探测时,它似乎没有启用 COM 端口或更改任何内容。

在这一点上,任何帮助将不胜感激!

War*_*ung 1

我不明白你为什么不辞辛劳地更改内核源代码来添加对这个非标准串行 I/O 端口和 IRQ 的支持。该setserial(8)程序应该能够为您进行配置。像这样的东西:

# setserial ttyS4 address 0x10 irq 9
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Linux 串行 HOWTO 。