1. 概要

この記事では、Linuxですべてのシリアルデバイスを開くことなく検索する方法について説明します。 これにより、システムに搭載されているデバイスが表示されます。これは、システムを診断したり、新しいデバイスをセットアップしたりするときに役立ちます。

2. 問題文

/ dev / ディレクトリには、特定のシステムの各デバイスのファイルが含まれています。 シリアルデバイスの場合、ボーレートとRTS/CTSフロー制御の両方をサポートするデバイスに制限します。これはRS-232通信での送信要求/送信クリアの略です。標準。

しばらく時間がかかり、エラーが返される可能性があるため、デバイスを開きたくありません。 デバイスを開こうとすると、接続が試行されます。 この動作の例は、システムのドライバーがデバイスを接続したいときにBluetoothを介して提供されるシリアルデバイスで発生します。

3. ソリューション

さまざまなファイルを調べ、いくつかのツールを使用して、前述の問題に対する4つの解決策について説明します。

3.1. / sys / class/ディレクトリ

/ sys / class / ディレクトリの下のファイルシステムは、システムに接続されているデバイスに関する情報を提供します。 その中のディレクトリ/sys/ class / ttyは、シリアルデバイス、仮想端末、および疑似端末を示し、は特定のシリアルデバイスグループのサブディレクトリを持っています。

たとえば、シリアルUSBデバイスを入手しましょう。

$ ls /sys/class/tty/ttyUSB*
/sys/class/tty/ttyUSB0
/sys/class/tty/ttyUSB1

いずれかのデバイスのディレクトリの1つにアクセスすると、さまざまなファイルが表示されます。

$ ls /sys/class/tty/ttyUSB0/
dev
device
power
subsystem
uevent

シリアルデバイス(端末ではなく)を扱っていることを示すファイルは、デバイス/ドライバーです。 したがって、これらのディレクトリツリーを持つデバイスのみを調べることができます。

$ ls /sys/class/tty/*/device/driver
/sys/class/tty/ttyS0/device/driver
/sys/class/tty/ttyS1/device/driver
/sys/class/tty/ttyUSB0/device/driver
/sys/class/tty/ttyUSB1/device/driver

単純で誤ったアプローチの1つは、 / dev / ttyS * ディレクトリのみを反復処理することです。これは、他のインターフェイスを介してシリアルデバイスに到達することもできるためです。 USB-RS-232アダプターの場合、シリアルデバイスは例のように / dev / ttyUSB *、の下にあります。 同様に、他の名前空間には他のシリアルデバイスが含まれる場合があります。

3.2. dmesgツール

dmesgツールを使用すると、システムに接続されているデバイスのドライバーによって生成されたすべての情報を格納するカーネルのログを画面に表示できます。 関心のあるシリアルデバイスであるdmesgからメッセージバッファ全体を検索する必要があります。

$ dmesg | grep tty

スーパーユーザー権限で前のコマンドを実行する必要がある場合があります。

3.3. HALソフトウェア

ハードウェアアブストラクションレイヤー( HAL )は、udevを優先して廃止されたツールです。 ただし、ツールは、2008年以前の古いLinuxリリースでも引き続き使用できます。これは、最も一般的に古いシリアルインターフェイス規格を備えているリリースでもあります。

使用可能なすべてのポートから、シリアル転送が可能なポートを取得できます。

$ hal-find-by-capability --capability serial

これにより、一意のデバイス識別子のリストが返されます。 UDIの値を次のようにプラグインできます。

$ hal-get-property --udi UDI --key serial.device

すべてのシリアルデバイスを調べたい場合は、2つのコマンドをforループと組み合わせることができます。

$ for device in $(hal-find-by-capability --capability serial) ; do
hal-get-property --udi "${device}" --key serial.device
done

3.4. / dev / serial/ディレクトリ

新しいLinuxカーネルを扱っている場合、HALツールは使用できなくなります。 ただし、 udev を利用することはできます(2.5より古いリリースがある場合に限ります)。 インストール済み)。

/ dev / serial /ディレクトリ内に、使用可能なすべてのシリアルポートのリストがあります。これらは、適切な / dev/ファイルを指すシンボリックリンクです。 シリアルポートの2つのグループがあります。

$ ls /dev/serial/
by-id/
by-path/

これらの2つのグループは同じシリアルポートを参照しますが、ポートの異なる情報に基づいて編成されています。 それぞれがどのように見えるか見てみましょう:

$ ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 2010-02-10 09:03 tty-WM_Gmbh._Serial_Controller-port0 -> ../../ttyS0
lrwxrwxrwx 1 root root 13 2010-02-10 09:03 tty-WM_Gmbh._Serial_Controller-port1 -> ../../ttyS1
lrwxrwxrwx 1 root root 13 2015-07-20 04:03 usb-PTechnology_Inc._USB-Serial_Controller-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 2015-07-20 04:04 usb-PTechnology_Inc._USB-Serial_Controller-if00-port1 -> ../../ttyUSB1

パスグループには、次のものがあります。

$ ls -l /dev/serial/by-path/
total 0
lrwxrwxrwx 1 root root 13 2010-02-10 09:03 pci-0000:00:0a.0-tty-1:1:1.0-port0 -> ../../ttyS0
lrwxrwxrwx 1 root root 13 2010-02-10 09:03 pci-0000:00:0a.0-tty-1:1:1.0-port1 -> ../../ttyS1
lrwxrwxrwx 1 root root 13 2015-07-20 04:03pci-0000:00:0b.0-usb-0:3:1.0-port0-> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 2015-07-20 04:04 pci-0000:00:0b.0-usb-0:3:1.1-port1 -> ../../ttyUSB1

システムにシリアルポートがない場合、 / dev / serial/ディレクトリはファイルシステムに存在しません。

4. 結論

この記事では、システムに接続されている利用可能なすべてのシリアルデバイスを見つけるための4つの異なる方法について説明しました。 デバイスを開く必要なしにそうしました。