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


33

質問:

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

バックグラウンド:

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


1
これらのビットを使用してデバイスを検出するのが好きです-おそらくそれを使用しますが、Tx / Rxピンのみを使用するデバイスはたくさんありますが、おそらくそれらをハッキングしてCTSラインを高く保持することができます。
ダニーステープル14

回答:


34

カーネルが接続されたデバイスを知らないので、残念ながら、シリアルポートは、非PlugNPlayです。A読んだ後手引きチュートリアルを私が働くアイデアを持っています。

/dev/OSのような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の出力例です。いくつかのシリアルポートの初期化を確認できます。

ttyS0ttyS1ttyS4ttyS5

そのうちの1つは、プラグインされたデバイスに正の電圧を持ちます。したがって/proc/tty/driver/serial、デバイスのプラグインの有無にかかわらずファイルの内容を比較することで、デバイスに関連するttySを簡単に見つけることができます。だから、今やる:

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

デバイスの(アン)プラグ

$ 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、ミッション達成です!


1
dmesg出力にデバイスが表示されない場合はどうすればよいですか?
user3019105

2
@ user3019105申し訳ありませんが、このような問題に直面したことはありません。私が理解しdmesgていることから、irqをシリアルデバイスに割り当てることについてのメッセージが必要です。そして、もしそうでなければ、ハードウェアの問題があると思います。これは単なる仮定であり、間違っている可能性がありますが、このような問題をデバッグする場合は、シリアルポートを初期化する必要があることを念頭に置いて調査を開始します。
ハイエンジェル

1
マシンからマシンに移動するため、このマシンのシリアルポートを表示するエイリアスを定義しました。systemdを使用するUbuntuファミリシステムで動作します。エイリアスports = 'udevadm info --export-db | grep -i "^ n:ttyu"'
DDay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.