Ich muss ein Skript schreiben, um USB-Dongles neu zu starten. Ich habe alle Tools, aber ich kann mein / dev / ttyUSBx nicht mit dem physischen BUS und DEVICE verknüpfen. Ein Problem ist, dass ich drei Dongles mit demselben ID-Anbieter und demselben ID-Produkt habe.
Wenn ich lsusb mache, ist die Ausgabe:
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
Und ich habe es angehängt an:
/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5
Aber ich möchte wissen, welches Gerät mit welchem Busgerät zusammenhängt. Zum Beispiel muss ich Folgendes bekommen:
/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007
Ich benutze Ubuntu Server 10.04 und habe die Tools getestet:
lsusb
hal
lsmod
Aber ich kann die Beziehung nicht bekommen.
Es gibt wirklich keine gute Möglichkeit, Zeichengeräte
/dev/ttyUSB0
den entsprechenden USB-Geräte- und Busnummern zuzuordnen . ABER es ist möglich!So etwas könnte funktionieren:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
Von dort erhalten Sie eine Reihe von Informationen über das Gerät und seine übergeordneten Geräte. Jetzt geht es nur noch darum, diese Daten zu analysieren, um das zu erhalten, was Sie wollen. Ich habe das in der Vergangenheit benutzt:
Wenn das kein Bissen ist, weiß ich nicht, was ist! Lassen Sie es uns aufschlüsseln:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
- Gibt Informationen über das Gerät und seine übergeordneten Geräte zurücksed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'
- analysiert diese Daten und gibt alle Zeilen zurück, die das Attribut "devnum" oder "busnum" enthalten. Wir gehen davon aus, dass "busnum" zuerst aufgeführt wird ... und in diesem Fall können wir nur die ersten beiden Zeilen der Ausgabe abrufen.head -n 2
- Nehmen Sie die ersten 2 Zeilen der Ausgabe. Wir könnten hier etwas ausgefallener sein, gehen aber nur davon aus, dass das "Busnum" und "Devnum" der nächstgelegenen Eltern zuerst aufgeführt werden.awk '{$1 = sprintf("%03d", $1); print}'
- Nimmt diese Ziffern und füllt sie mit Nullen auf.echo /dev/bus/usb
... - all dieser Jazz ist in einecho
Statement eingepackt , um die Zeilenumbrüche durch Leerzeichen zu ersetzen. Sie können das-n
to hinzufügen ,echo
wenn Sie die abschließende Newline abschneiden möchten.tr " " "/"
- Ersetzen Sie die Leerzeichen in der Ausgabe durch SchrägstricheDies wird ungefähr so aussehen:
... das ist natürlich das Gerät. Wenn Sie möchten, können Sie ganz einfach etwas
busnum:001 devnum:011
mit ein paar Änderungen ausgeben :quelle
Sie können alle Informationen über den Knoten mit dem folgenden Befehl finden:
quelle