Finden Sie heraus, welchem ​​Geräteknoten ein Eintrag in der Ausgabe von lsusb entspricht

1246
Melab

Ich muss verwenden lsusb, um die Art der USB-Verbindung zu ermitteln, die mein USB wissen muss, wenn dder mit voller Geschwindigkeit arbeitet. Ich habe das gelesen, um dies zu tun, was ich verwenden muss lsusb -t, aber die Ausgabe sagt mir nicht, zu welchem ​​Geräteknoten jeder Eintrag gehört. Wie finde ich das heraus?

0
Wenn dies mit "make dd schneller" verbunden ist: Die Grenze ist die Schreibgeschwindigkeit des Speichermediums, die * viel * langsamer ist als die meisten USB-Geschwindigkeiten. Selbst wenn Sie irgendwie sicherstellen könnten, dass die USB-Geschwindigkeit in Ordnung ist, würde dies Ihnen nicht helfen: Das Limit ist immer noch die Schreibgeschwindigkeit des Speichermediums. dirkt vor 7 Jahren 0

4 Antworten auf die Frage

1
davidgo

lsusb -t scheint einen Baum bereitzustellen, der "Dev X" auflistet - dies entspricht dem Gerät "00X" in einer Standardauflistung "lsusb".

Eine andere Alternative wäre die Verwendung von lsusb -v, das "Konfigurationsbeschreibungen für die aktuelle Geschwindigkeit der Geräte enthält".

Sie sollten erwähnen, dass "lsusb -t" die Geschwindigkeit des jeweiligen Geräts am Ende (480M / 12M / 5000M) beinhaltet. dirkt vor 7 Jahren 0
0
fpmurphy1

Soweit ich weiß, gibt es keinen einzigen Befehl oder Dienstprogramm, der Ihnen die Informationen liefert. Sie müssen für die Informationen unter stöbern /sys. Weitere Informationen finden Sie unter https://stackoverflow.com/questions/3493858/linux-how-to-map-a-blockdevice-to-a-usb-device .

0
MariusMatutiae

Dies ist die Ausgabe von lsusb -t für mein System:

 # lsusb -t /: Bus 04.Port 1: Dev 1, Klasse = root_hub, Treiber = ehci-pci / 2p, 480M | __ Port 1: Dev 2, Wenn 0, Klasse = Hub, Treiber = Hub / 6p, 480M /: Bus 03.Port 1: Dev 1, Klasse = root_hub, Treiber = ehci-pci / 2p, 480M | __ Port 1: Dev 2, Wenn 0, Klasse = Hub, Treiber = Hub / 6p, 480M | __ Port 3: Dev 3, Wenn 0, Klasse = Drahtlos, Treiber = Btusb, 12M | __ Port 3: Dev 3, If 1, Class = Wireless, Driver = Btusb, 12M  /: Bus 02.Port 1: Dev 1, Klasse = root_hub, Treiber = xhci_hcd / 4p, 5000M | __ Port 3: Dev 2, If 0, Class = Mass Storage, Driver = USB-Speicher, 5000M /: Bus 01.Port 1: Dev 1, Klasse = root_hub, Treiber = xhci_hcd / 4p, 480M | __ Port 1: Dev 2, Wenn 0, Klasse = Human Interface Device, Treiber = usbhid, 12M | __ Port 1: Dev 2, If 1, Klasse = Human Interface Device, Treiber = usbhid, 12M | __ Port 1: Dev 2, If 2, Class = Human Interface Device, Treiber = usbhid, 12M | __ Port 2: Dev 3, Wenn 0, Klasse = Herstellerspezifische Klasse, Treiber = Asix, 480M 

Das einzige Massenspeichergerät befindet sich an Bus 02, Port 03, und es wird vom Treiber xhci_hcd bereitgestellt, der der richtige Linux-Treiber für USB3.0-Geräte ist. Nach meinem besten Wissen ist dies der einzige Hinweis, den Sie hier finden werden.

Das Obige kann wie folgt überprüft werden. Da Sie nach einem Blockgerät suchen, gehen Sie zu / sys / class / block, wo Sie Folgendes finden:

# cd /sys/class/block/ root@debS:/sys/class/block# ls loop0 loop2 loop4 loop6 sda sda2 sda6 sdb loop1 loop3 loop5 loop7 sda1 sda5 sda7 sdb1 

Angenommen, Sie interessieren sich für das Blockgerät sdb, bestimmen Sie nun die Busadresse wie folgt:

# cd sdb; cd $(realpath $PWD); echo $PWD /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/host6/target6:0:0/6:0:0:0/block/sdb 

Dies (Bus2, Port 3) stimmt mit dem obigen überein.

0
Joe

I've been fiddling with this for a while, here's a script I came up with to map the lsusb output to /sys. It seems to work for me but I haven't tested it extensively yet.

(Note: I'm not having much luck formatting this, so you might have to add some newlines or whatever)

#!/bin/bash # # usb2sys - find lsusb device in /sys file system # die() { echo "$@" exit 1 } [[ $# -lt 1 ]] && die "need vendor and product ids (from lsusb) as dddd:dddd" vendor=$ product=$ sys=/sys/bus/usb/devices/ cd $sys for d in *; do path=$sys/$d if [ -f $path/idProduct ]; then prod=$( cat $path/idProduct ) vend=$( cat $path/idVendor ) if [ $prod = $product -a $vend = $vendor ]; then echo prod = $prod echo vend = $vend echo /sys device is $path cat $path/power/wakeup echo "" fi fi done 
Die Verwendung von [… -a…] wird nicht empfohlen. Sie sollten `if [" $ prod "=" $ product "] && [" $ vend "=" $ vendor "]` sagen. G-Man vor 6 Jahren 1
seufz ... der sprachpolizistenstreik wieder. Joe vor 6 Jahren 0