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
しかし、私は関係を得ることができません。
私はあなたのハードウェアを持っていないので、正確な答えをすることはできません。
たとえば、問題のデバイスにアクセスすることをお勧めします。
ls -l /dev/ttyUSB0
メジャーおよびマイナーノード番号を取得します。彼らは116、7だとしましょう
次に移動します:
ls -l /sys/dev/char/116:7
(char
、ttyはキャラクターデバイスであるため、ディスクデバイスをトレースダウンする場合は、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
/dev/ttyUSB0
のようなキャラクターデバイスを対応するUSBデバイスとバス番号にマッピングするgood方法は本当にありません。 ただし、可能です!
このような何かが動作する可能性があります:
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;}'`
以下のコマンドを使用して、ノードに関するすべての情報を見つけることができます。
udevadm info -a -p /sys/bus/usb-serial/devices/ttyUSB0/