2017-02-23 89 views
2

Как вы можете идентифицировать отдельные USB-устройства для их развязывания и привязки? В частности, такие устройства, как мыши, клавиатура, ключи и т. Д., Которые не хранятся.Ubuntu/Debian Как определить USB-порт устройства

Например, на Debian (Raspbian GNU/Linux v8.0 в данном случае), у меня есть несколько устройств, перечисленных в/SYS/автобус/USB/драйверов/usbhid /:

Ls/SYS/автобус/USB/драйверы/usbhid/ показывает USB устройства:

1-1.2:1.0 1-1.2:1.1 1-1.2:1.2 1-1.3:1.0 1-1.3:1.1 1-1.4:2.2 

lsusb показывает:

Bus 001 Device 006: ID 1410:9020 Novatel Wireless 
Bus 001 Device 009: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0 
Bus 001 Device 008: ID 046d:c52b Logitech, Inc. Unifying Receiver 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter 
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 

lsusb -t показывает:

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M 
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M 
     |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M 
     |__ Port 2: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 12M 
     |__ Port 2: Dev 8, If 1, Class=Human Interface Device, Driver=usbhid, 12M 
     |__ Port 2: Dev 8, If 2, Class=Human Interface Device, Driver=usbhid, 12M 
     |__ Port 3: Dev 9, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M 
     |__ Port 3: Dev 9, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M 
     |__ Port 4: Dev 6, If 0, Class=Communications, Driver=cdc_ether, 480M 
     |__ Port 4: Dev 6, If 1, Class=CDC Data, Driver=cdc_ether, 480M 
     |__ Port 4: Dev 6, If 2, Class=Human Interface Device, Driver=usbhid, 480M 

Я знаю, что Novatel Wireless является 1-1,4: 2.2 от угадывания.

можно затем сбросить его, запустив эхо -n '1-1,4: 2,2'>/SYS/автобус/USB/драйверы/usbhid/отвязать и эхо -n '1-1,4: 2,2'>/sys/bus/usb/drivers/usbhid/bind

Было бы здорово, если бы был очевидный способ идентифицировать его и сбросить его в сценарии bash. Кроме того, как можно идентифицировать и перезагрузить устройство, если на разных портах имеется более одного оборудования?

ответ

0

обе информации находятся в каталоге /dev или /sys/class.

вы можете использовать ls -l /sys/class/xxx где xxx заменяет категорию устройства вы хотите запросить

ls -l /sys/class/block:

/sys/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/host251/target251:0:0/251:0:0:0/block/sdb/sdb1 

проблема является, что вы должны знать, какие устройства вы ищете, то есть имя или номер шины, однако вы можете получить эту информацию с помощью lsusb или команд, используемых для определенного класса устройства, то есть ip link (модем LTE обычно реализуется как хост RNDIS и отображается в ip link как usb0), lsblk --output NAME,KNAME,FSTYPE,MOUNTPOINT,RM,UUID, ...

для любого USB устройства ls - l /sys/class/xxx будет выводить USB порт и Udev путь

ваш Novatel Wireless (Ethernet поверх USB) будет sys/class/ǹet вы также можете идентифицировать устройства с помощью vendorid и productID

если вам нужно больше информации вы можете использовать udevadm

sudo udevadm info --query=all --attribute-walk --path=/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/host251/target251:0:0/251:0:0:0/block/sdb/sdb1

looking at device '/devices/pci0000:00/0000:00:12.2/usb1/1-3/1-3:1.0/host237/target237:0:0/237:0:0:0/block/sdb/sdb1': 
    KERNEL=="sdb1" 
    SUBSYSTEM=="block" 
    DRIVER=="" 
    ATTR{partition}=="1" 
    ATTR{start}=="64" 
    ATTR{size}=="62517184" 
    ATTR{ro}=="0" 
    ATTR{alignment_offset}=="0" 
    ATTR{discard_alignment}=="0" 
    ATTR{stat}=="  156  7  1304  132  0  0  0  0  0  128  128" 
    ATTR{inflight}=="  0  0" 

другая возможность использовать бег udevadm monitor, а затем прикрепить устройство

(https://unix.stackexchange.com/questions/116664/map-physical-usb-device-path-to-bus-device-number-returned-by-lsusb, https://unix.stackexchange.com/questions/74513/udev-how-do-you-identify-the-physical-device-that-a-sys-device-belongs-to)

для мыши (устройства ввода) попробовать

sudo udevadm info --query=all --attribute-walk --name=/dev/input/mouse0