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