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

4 ответа4

1

Похоже, lsusb -t предоставляет дерево со списком "Dev X" - это соответствует устройству "00X" в стандартном списке "lsusb".

Другой альтернативой может быть использование lsusb -v, который "включает дескрипторы конфигурации для текущей скорости устройств".

0

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

0

Некоторое время я возился с этим, вот сценарий, который я придумал, чтобы отобразить вывод 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
0

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

    # lsusb -t
    /:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
    /:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
        |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
            |__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
            |__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
    /:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
        |__ Port 3: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
    /:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
        |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 1: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 2: Dev 3, If 0, Class=Vendor Specific Class, Driver=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) соответствует приведенному выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .