Мне нужно использовать lsusb
чтобы определить тип USB-соединения, которое должен знать мой USB, если dd
работает на полной скорости. Я прочитал, что для этого мне нужно использовать lsusb -t
, но вывод не говорит мне, какому узлу устройства соответствует каждая запись. Как мне это понять?
4 ответа
Похоже, lsusb -t предоставляет дерево со списком "Dev X" - это соответствует устройству "00X" в стандартном списке "lsusb".
Другой альтернативой может быть использование lsusb -v, который "включает дескрипторы конфигурации для текущей скорости устройств".
Насколько я знаю, нет ни одной команды или утилиты, которая даст вам информацию. Вы должны порыться в поисках информации в /sys
. См. Https://stackoverflow.com/questions/3493858/linux-how-to-map-a-blockdevice-to-a-usb-device для получения дополнительной информации.
Некоторое время я возился с этим, вот сценарий, который я придумал, чтобы отобразить вывод 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 /: 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) соответствует приведенному выше.