Найдите, какому устройству узла соответствует запись в выводе lsusb

Мне нужно использовать lsusb чтобы определить тип USB-соединения, мой USB должен знать, dd работает на полной скорости. Я прочитал, что для этого мне нужно использовать lsusb -t, но вывод не говорит мне, какому узлу устройства соответствует каждая запись. Как мне это понять?

4 ответа

lsusb -t seems to provide a tree which lists "Dev X" - this corresponds to device "00X" in a standard "lsusb" listing.

Another alternative would be to use lsusb -v which "includes configuration descriptors for the devices current speed".

Некоторое время я возился с этим, вот сценарий, который я придумал, чтобы отобразить вывод lsusb в /sys. Кажется, это работает для меня, но я еще не проверил это подробно.

(Примечание: мне не очень повезло, форматируя это, так что вам, возможно, придется добавить несколько новых строк или что-то еще)

#!/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=${1%:*}
product=${1##*:}

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

Это вывод команды lsusb -t для моей системы:

    # lsusb -t
    /: Шина 04.Порт 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Порт 1: Dev 2, если 0, класс = концентратор, драйвер = концентратор /6p, 480M
    /: Шина 03. Порт 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Порт 1: Dev 2, если 0, класс = концентратор, драйвер = концентратор /6p, 480M
            |__ Порт 3: Dev 3, если 0, класс = беспроводной, драйвер =btusb, 12M
            |__ Порт 3: Dev 3, If 1, Class = Wireless, Driver = btusb, 12M
 /: Шина 02.Порт 1: Dev 1, Class = root_hub, Driver = xhci_hcd / 4p, 5000M 
         | __ Порт 3: Dev 2, если 0, класс = запоминающее устройство, драйвер =usb-память, 5000M
    /: Шина 01. Порт 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
        |__ Порт 1: Dev 2, если 0, класс = устройство интерфейса пользователя, драйвер =usbhid, 12M
        |__ Порт 1: Dev 2, If 1, Class= Устройство интерфейса пользователя, Driver=usbhid, 12M
        |__ Порт 1: Dev 2, If 2, Class= Устройство интерфейса пользователя, Driver=usbhid, 12M
        |__ Порт 2: Dev 3, если 0, класс = класс, специфичный для поставщика, драйвер =asix, 480M

Единственное устройство хранения данных находится на шине 02, порт 03 и обслуживается драйвером xhci_hcd, который является подходящим драйвером Linux для устройств USB3.0. Насколько мне известно, это единственное упоминание о скорости здесь.

Выше может быть перепроверено следующим образом. Поскольку вы ищете блочное устройство, перейдите в / sys / class / block, где вы можете найти:

# 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

Предполагая, что вас интересует блочное устройство sdb, теперь вы определяете адрес шины следующим образом:

# 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

Это (bus2, порт 3) соответствует приведенному выше.

Насколько я знаю, нет единой команды или утилиты, которая даст вам информацию. Вы должны искать информацию под /sys, См. https://stackoverflow.com/questions/3493858/linux-how-to-map-a-blockdevice-to-a-usb-device для получения дополнительной информации.

Другие вопросы по тегам