我有一台只有一个串行端口的笔记本电脑。
我去了:
/dev
目录,我发现:
ttyS0
ttyS1
ttyS2
ttyS3
我怎么知道哪一个“ttyS”指的是我的串行端口?
答案1
我认为是这个命令:
dmesg | grep tty
在我自己的 Linux 机器上运行该程序(只有 1 个串行端口)会产生一条 ttyS0 输出线。自己尝试一下,您就会明白我的意思。
答案2
查看在 中检测到了哪些 UART /proc/tty/driver/serial
。带有 的行uart:unknown
表示:未检测到任何内容(并且可能不存在)。
# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:111780 rx:1321 RTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
如果您看到任何 CTS、DSR、(D)CD 或 RI 标志(这些是输入信号),如上面的 UART 1 上所示,您甚至可以相当肯定确实有东西连接并驱动这些线路。rx-byte-count 也是如此。
看到正的 tx-byte-count、RTS 和/或 DTR 仅表明某些软件访问了该设备并命令它设置这些信号或在此处发送字节,但不表明是否有东西在监听。
注意:您可能会看到硬件中可用的端口比以连接器形式到达计算机外部的端口更多。
答案3
如果您需要以编程方式执行此操作,则读取 dmesg 的输出可能会很麻烦,相反,文件夹 /dev/serial/by-id 具有以设备的可识别数据命名的符号链接,并指向它们所连接的特定 /dev/tty*。
我不确定这是否是某些特定于发行版的特殊 udev 规则,但它在 Ubuntu 上运行良好,如果它有效,请告诉我。
答案4
还有setserial
用于/proc/tty/driver/serial
获取其数据的命令。
# setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3