web-dev-qa-db-ja.com

どの/ dev / ttyS *が私のシリアルポートであるかをどうやって知るのですか?

シリアルポートが1つしかないラップトップを持っています。

私は入りました:

/dev 

ディレクトリ、そして私は見つけました:

ttyS0
ttyS1
ttyS2
ttyS3

それらの「ttyS」のどれが私のシリアルポートを指しているかをどうやって知るのですか?

33
sivabudh

私はそれがこのコマンドだと思います:

dmesg | grep tty

これを自分のLinuxボックス(シリアルポートが1つしかない)で実行すると、ttyS0出力ラインが1つ生成されます。自分で試してみてください。意味がわかります。

35
sivabudh

/proc/tty/driver/serialで検出されたUARTを確認します。 uart:unknownのある行は、何も検出されなかった(おそらく存在しない)ことを意味します。

# cat /proc/tty/driver/serial 
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:111780 rx:1321 RTS|DTR|DSR
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3

何かが接続されていて、CTS、DSR、またはCDのライン(これらは入力ラインです)を駆動している場合は、実際に何かが存在することを確認することもできます... rx-byte-countについても同様です。

14
Robert Siemer

プログラムでこれを行う必要がある場合、dmesgからの出力の読み取りは問題になる可能性があります。代わりに、フォルダー/ dev/serial/by-idには、デバイスの識別可能なデータにちなんで名付けられ、特定の/ dev/tty *を指すシンボリックリンクがありますに接続されています。

これがディストリビューション固有の特別なudevルールであるかどうかはわかりませんが、Ubuntuでうまく機能します。機能するかどうかをお知らせください。

7
santileortiz

ttyS0 使って 3 対応する COM1 使って 4、それぞれ。それらは通常、同じハードウェアリソースを持ち、常に検出できるわけではないため、常に存在します。

データを取得するために/proc/tty/driver/serialを使用するコマンドsetserialもあります。

# setserial -g /dev/ttyS[0123]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
1