/ dev / ttyUSBのバスとデバイスの関係を取得する方法


14

USBドングルを再起動するためのスクリプトを作成する必要があります。すべてのツールがありますが、/ dev / ttyUSBxを物理BUSおよびDEVICEにリンクできません。問題は、IDベンダーとID製品が同じ3つのドングルがあることです。

lsusbを実行すると、出力は次のようになります。

Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

そして、私はそれを添付しました:

/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5

しかし、どのデバイスがどのバスデバイスに関連しているかを知りたいです。例として、次のものを取得する必要があります。

/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007

Ubuntu Server 10.04を使用しており、ツールをテストしました。

lsusb
hal
lsmod

しかし、私は関係を得ることができません。

回答:


11

あなたのハードウェアを持っていないので、正確な答えを出すことはできません。

たとえば、問題のデバイスにアクセスすることをお勧めします。

ls -l /dev/ttyUSB0

メジャーおよびマイナーノード番号を取得します。彼らは116、7だとしましょう

次に移動します:

ls -l /sys/dev/char/116:7

charttyはキャラクターデバイスであるため、ディスクデバイスをトレースダウンする場合は、のblock代わりに指定しますchar

コマンドの出力には、次のようなものが表示されます。

lrwxrwxrwx 1 root root 0 Sep 6 00:17 116:7 -> ../../devices//sys/devices/pci0000:00/0000:00:13.5/pci0000:00/0000:00:13.5/usb1/1-3/1-3:1.1/sound/card1/pcmC1D0c

ディレクトリ/sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/とそのサブディレクトリには、デバイスに関する多くの情報があります。例として、/sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/busnumそして/sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/devnum。私のシステムでは、これらは/ var / log / syslogのデバイスホットプラグエントリに記載されているバスとデバイス番号に一致します。

/ dev / video0のシステムで動作する他の何か:

find /sys/dev -lname '*video0' -exec cat {}/device/busnum {}/device/devnum \; 2>/dev/null

どうもありがとうございました!、私はこれと長い間戦っています。さらなる訪問者のみ:Ubuntu Ubuntu 10.04.2 LTSでは、デバイスディレクトリは/ sys / char /ではなく/ sys / dev / char /です
Ernesto Campohermoso

修正していただきありがとうございます。その変更を含む回答を編集し、情報を出力するための検索コマンドを追加しました。
ジョンSグルーバー

@JohnSGruberわかりました、しかしそれをマウントする方法?!
Dr.jacky

1
@ Mr.Hyde:/ dev / ttyUSBをマウントすることはできません。ディスクドライブのように動作する一部のデバイスのみをマウントできます。
ジョンSグルーバー

10

キャラクターデバイスを対応するUSB​​デバイスとバス番号にマッピングする良い方法は本当にありません/dev/ttyUSB0しかし、それは可能です!

このような何かが動作する可能性があります:

udevadm info --name=/dev/ttyUSB0 --attribute-walk

そこから、デバイスとその親デバイスに関する多くの情報を取得します。さて、あなたが望むものを得るためにそれらのデータを解析することがすべてです。私は過去にこれを使用しました:

echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p' | head -n 2 | awk '{$1 = sprintf("%03d", $1); print}'` | tr " " "/"

さて、それが一口ではない場合、私は何がわからない!分解しましょう:

udevadm info --name=/dev/ttyUSB0 --attribute-walk -デバイスとその親デバイスに関する情報を返します

sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'-これらのデータを解析し、「devnum」または「busnum」属性を含む行を返します。「busnum」が最初にリストされていると仮定します...そしてその場合は、出力の最初の2行を取得するだけです。

head -n 2-出力の最初の2行を取得します。ここでもっと空想を得ることができますが、最も近い親の「busnum」と「devnum」が最初にリストされると仮定しています。

awk '{$1 = sprintf("%03d", $1); print}' -これらの数字を取得し、ゼロで埋めます。

echo /dev/bus/usb...-このすべてのジャズはecho、改行をスペースに置き換えるステートメントにまとめられています。末尾の改行を切り捨てたい場合は、-nに追加できechoます。

tr " " "/" -出力のスペースをスラッシュに置き換えます

これは次のようなものを出力します:

/dev/bus/usb/001/011

...もちろん、これはデバイスです。必要にbusnum:001 devnum:011応じて、いくつかの調整を行うことで、簡単に次のようなものを出力できます。

echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\1\ \4/p' | head -n 2 | awk '{$1 = sprintf("%s:%03d", $1, $2); print $1;}'`

1

以下のコマンドを使用して、ノードに関するすべての情報を見つけることができます。

udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/

末尾のスラッシュを削除してください。「syspathが見つかりません」と表示されます。
-nvd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.