web-dev-qa-db-ja.com

使用中のシリアルポートを見つける方法は?

質問:

シリアルポート(RS-232とも呼ばれます)を介してデバイス(GSMモデムなど)を接続しました。このデバイスが/dev/ファイルシステム内のどのファイルと関連付けられているかを確認して、通信できるようにする必要があります。残念ながら、新しく作成されたファイルは/dev/にはなく、dmesg出力にも何も表示されません。したがって、これは難しい質問のようです。

背景:

私はシリアルデバイスを使ったことがなかったので、昨日、必要が生じたときにGoogleで試してみましたが、役に立たないものでした。私は数時間シークに費やしましたが、誰かの役に立つかもしれないので、見つけた答えを共有したいと思います。

35
Hi-Angel

残念ながらシリアルポートは非​​プラグインプレイなので、カーネルはどのデバイスが接続されたかを認識しません。HowToチュートリアルを読んだ後私は実用的なアイデアを持っています。

UNIXのようなOSの_/dev/_ディレクトリには、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_。

それらの1つは、デバイスが接続されたときに 正の電圧になる です。そのため、ファイル_/proc/tty/driver/serial_のコンテンツを、デバイスが接続された状態と接続されていない状態で比較することで、ttySデバイスに関連しています。だから、今やる:

_$ Sudo cat /proc/tty/driver/serial> /tmp/1
_

(un)デバイスを接続する

_$ Sudo cat /proc/tty/driver/serial> /tmp/2
_

次に、2つのファイルの違いを確認します。以下は私のPCの出力です:

_$ 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_であり、ミッションは達成されました!

37
Hi-Angel