首先,我先说一句,我觉得问这样的问题很愚蠢。这些信息应该是在线的,但我似乎无法在任何地方找到它。我觉得我看起来很努力,但似乎没有什么能让我得到我想要的东西。
情况是这样的。我有两个 Linux 迷你电脑板。它们的制造商和一切都完全相同。该板有 12 个串口。问题是,在一块板上,所有串行端口都工作正常,但在另一块板上,它们都乱七八糟。大多数不在 /dev 目录中,我找不到它们,等等。
所以我想我可以通过找到工作板上端口的IO地址(也可能是IRQ,假设它们没有改变)来解决我的问题,然后获取这些信息并在/dev中创建新条目,因为我假设制造商不会更改板上引脚映射到的地址。看起来很合理,对吧?我没想到的是,实际从工作系统中获取这些信息时遇到了问题。
所以真正的问题是这样的:我在 /dev 中有 12 个条目,它们都映射到串行端口并且都可以工作,但是所有从中获取信息的工具都无法工作。这是我尝试过的:
过滤 dmesg:
root@linaro-ubuntu:/dev# dmesg | grep tty
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:off video=mxcfb2:off fbmem=28M vmalloc=400M
bootconsole [ttymxc0] enabled
imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
console [ttymxc0] enabled, bootconsole disabled
imx-uart.1: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX
imx-uart.2: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX
imx-uart.3: ttymxc3 at MMIO 0x21f0000 (irq = 61) is a IMX
imx-uart.4: ttymxc4 at MMIO 0x21f4000 (irq = 62) is a IMX
init: tty1 main process (5754) killed by TERM signal
好的,这个信息看起来不错。我知道 ttymxc0 是一个终端。其余的人正在使用串行端口。这些 IO 地址看起来不错,并且 IRQ 不与 /proc/interrupts 中的任何内容冲突。但是等等,其他串行端口在哪里?他们不应该也在这儿吗?只要我能在其他地方找到它,这并没有让我太烦恼。
setserial命令:
下一个合乎逻辑的步骤是搞乱setserial。
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc1
/dev/ttymxc1, UART: undefined, Port: 0x0000, IRQ: 59
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc2
/dev/ttymxc2, UART: undefined, Port: 0x0000, IRQ: 60
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc3
/dev/ttymxc3, UART: undefined, Port: 0x0000, IRQ: 61
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc4
/dev/ttymxc4, UART: undefined, Port: 0x0000, IRQ: 62
恶心,不喜欢这个。我的意思是,这是有道理的,因为我知道 setserial 不与硬件通信,只是读取驱动程序信息,但我希望至少在解析 dmesg 时看到的那些信息能够正确显示。至少 IRQ 是正确的,即使这只是巧合。但是当我在其他串行端口上尝试此操作时:
root@linaro-ubuntu:/dev# setserial -g /dev/ttyHBA1
/dev/ttyHBA1, UART: undefined, Port: 0x0000, IRQ: 0
root@linaro-ubuntu:/dev# setserial -g /dev/ttyHBA2
/dev/ttyHBA2, UART: undefined, Port: 0x0000, IRQ: 0
这只是全面的一大堆。没有地址,IRQ 设置为零(不确定这是否只是系统一无所知的设备的默认设置,或者它是否实际上设置为 IRQ 0。如果是这种情况,那么很糟糕,我必须更改那。)
所以 setserial 没有给我任何东西。我听说有一种方法可以让 setserial 尝试直接与硬件对话,但我在网上找不到任何相关文档。手册页也没有真正帮助我。这里有人能帮我吗?
现在我有点不知所措了。我认为 stty 没有提供我想要的信息。
我发现了一些关于从文件中读取的内容,例如/proc/tty/driver/serial
和/proc/ioports
。我的系统上不存在第一个文件,第二个文件为空。我在网上找到了一些其他文件建议,但同样没有任何用处。
我还看到了有关 Ubuntu 的“scanport”的参考?但我在存储库或谷歌上找不到它。
啊啊啊。这是怎么回事?我有可用的串行端口,我只想了解有关它们的信息。这是Linux,一般这样的系统信息可以横向、向后、上下颠倒地找到。为什么我会遇到这样的问题?