Devices
如何找到正在使用的串口?
問題:
我通過串列埠(又名 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
,任務完成!