Devices

如何找到正在使用的串口?

  • January 31, 2022

問題:

我通過串列埠(又名 RS-232)插入設備(即 GSM 調製解調器),我需要查看/dev/該設備與文件系統中的哪個文件綁定,以便能夠與之通信。不幸的是,沒有新創建的文件,/dev/也沒有在dmesg輸出中看到任何內容。所以這似乎是一個很難的問題。

背景:

我從來沒有使用過串列設備,所以昨天,當出現需要時,我嘗試用Google搜尋,但找不到任何有用的東西。我花了幾個小時尋找,我想分享一個找到的答案,因為它可能對某人有幫助。

不幸的是,串列埠不是 PlugNPlay,所以核心不知道插入了哪個設備。在閱讀了*HowTo*教程後,我有了工作的想法。

類似 OSes的/dev/unix 目錄包含名為ttySn的文件 (其中 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

以上是我的 PC 的範例輸出。可以看到幾個串口的初始化:

ttyS0, ttyS1, ttyS4, ttyS5.

其中一個將在插入設備時產生正電壓/proc/tty/driver/serial。因此,通過比較插入和未插入設備的文件內容,我們可以輕鬆找到與我們的設備相關的ttyS。所以,現在做:

$ 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,任務完成!

引用自:https://unix.stackexchange.com/questions/125183