如何获取可用物理串行端口的数量

如何获取可用物理串行端口的数量

如何获取 Linux 机器中物理可用串行端口的总数。

有没有什么特别的命令可以做到这一点?

答案1

您可以使用setserial带有 -g 标志的命令来获取此信息:

[{0} 20:18:12] $ sudo setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

该方法的前提是它们配置正确,并且设备在 /dev/ 中创建了链接。这是很典型的情况,但您总是有可能拥有一些多端口串行卡,这些卡以非标准方式公开其串行端口。在这台机器上,我只有一个物理端口,并且它与 16550A 样式 UART 相关联;因此您只需使用 grep 过滤输出即可:

[{0} 20:18:45] $ sudo setserial -g /dev/ttyS* | grep "16550A"
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

如果您确实想要计数,那么请使用带有 grep 的 -c 标志:

[{0} 20:18:45] $ sudo setserial -g /dev/ttyS* | grep -c "16550A"
1

您可能不需要使用 sudo;这取决于您串行端口的权限;我不使用这个,也没有更改它们。setserial大多数发行版默认不安装,但应该可以从您的包管理器中获得。如果没有,这里有一个替代方案(假设您的 dmesg 日志没有从启动时轮换消息)。

[{0} 20:19:13] $ dmesg | grep "16550A"
[    0.962785] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

如果您有一个基于 systemd 的发行版,则也有类似的选项:

[{0} 20:19:43] $ sudo journalctl | grep 16550A
Apr 22 20:59:44 lenny kernel: 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

相关内容