どのシリアルポートが使用されているのか、どうすればわかりますか?

どのシリアルポートが使用されているのか、どうすればわかりますか?

質問:

/dev/シリアルポート(RS-232とも呼ばれます)を介して接続されているデバイス(GSMモデムなど)があり、通信できるようにするには、デバイスがバインドされているファイルシステムのファイルを確認する必要があります。残念ながら、新しく作成されたファイルがないため、出力結果には何も/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​​ttyS4ttyS5

その一つは正の電圧があります。/proc/tty/driver/serialしたがって、デバイスが接続されているときと接続されていないときのファイルの内容を比較することで、簡単に見つけることができます。端末私たちの機器に関連しています。次に、次のようにします。

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

(プラグを抜く) デバイスを接続する

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

次に、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

これらの3つの数字を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生きる

関連情報