如何查找正在使用哪个串口?

如何查找正在使用哪个串口?

问题:

我通过串行端口(又名 RS-232)插入设备(即 GSM 调制解调器),我需要查看/dev/该设备与文件系统中的哪个文件绑定,以便能够与其通信。不幸的是,没有新创建的文件,/dev/也看不到dmesg输出中的任何内容。所以这似乎是一个很难的问题。

背景:

我从未使用过串行设备,所以昨天,当出现需要时,我尝试用谷歌搜索,但找不到任何有用的东西。我花了几个小时寻找,我想分享找到的答案,因为它可能对某人有帮助。

答案1

不幸的是,串行端口是非PlugNPlay,因此内核不知道插入了哪个设备。在读取如何教程我已经有了工作的想法。

类似 UNIX 的操作系统的目录/dev/包含名为蒂斯 (n 是一个数字)。其中大多数与现有设备不对应。要查找哪些执行此操作,请发出命令:

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

上面是我的电脑的示例输出。可以看到几个串口的初始化:

ttyS0, ttyS1, ttyS4, ttyS5.

其中之一是将有正电压/proc/tty/driver/serial因此,通过比较插入设备和未插入设备时的文件内容,我们可以轻松找到终端与我们的设备相关。所以,现在做:

$ sudo cat /proc/tty/driver/serial> /tmp/1

(拔出)插入设备

$ sudo cat /proc/tty/driver/serial> /tmp/2

接下来检查两个文件之间的差异。以下是我的电脑的输出:

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

通过将这三个数字与 dmesg 输出进行比较,我们可以确定哪个是端口:

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

因此,我们的设备的/dev/ttyS0任务完成了!

答案2

setserial除了 之外,您还可以用于获取和设置串行端口信息dmesg

在 Ubuntu 18.04 上测试:

setserial

# install it
sudo apt update
sudo apt install setserial

# Display (and sort) serial information for all /dev/ttyS* devices
setserial -g /dev/ttyS* | sort -V
# Display (and sort) serial information for all /dev/ttyUSB* devices
setserial -g /dev/ttyUSB* | sort -V

# To see extra info. such as the baud rate too, add `-G`:
setserial -g -G /dev/ttyS* | sort -V
setserial -g -G /dev/ttyUSB* | sort -V

示例运行和输出。请注意,这/dev/ttyS4是唯一看起来处于活动状态且不是“未知”(无论这意味着什么)的端口。 (这个/dev/ttyS4设备也出现在 Arduino IDE 中,尽管它不是 Arduino,而且我不知道它是什么。):

$ setserial -g -G /dev/ttyS* | sort -V
/dev/ttyS0 uart unknown port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart unknown port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart unknown port 0x03e8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart unknown port 0x02e8 irq 3 baud_base 115200 spd_normal
/dev/ttyS4 uart 16550A port 0x3060 irq 19 baud_base 115200 spd_normal skip_test
/dev/ttyS5 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS6 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS7 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS8 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS9 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS10 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS11 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS12 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS13 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS14 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS15 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS16 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS17 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS18 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS19 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS20 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS21 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS22 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS23 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS24 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS25 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS26 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS27 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS28 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS29 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS30 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS31 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal

dmesg

使用dmesg还可以查看其中一些信息:

# Show UART information, incl. baudrate, for /dev/ttyS* devices.
dmesg | grep ttyS

# Show UART information, incl. baudrate, for /dev/ttyUSB* devices.
dmesg | grep ttyUSB

示例运行和输出:

$ dmesg | grep ttyS
[    1.624447] 0000:00:16.3: ttyS4 at I/O 0x3060 (irq = 19, base_baud = 115200) is a 16550A

更好的是,观察dmesg内核环形缓冲区输出居住-w选项:

dmesg -wH

现在,拔下您尝试识别的 USB 设备,然后将其重新插入,根据输出中显示的消息查看它是哪个设备dmesg居住

相关内容