简体   繁体   中英

Ubuntu/Debian How to identify USB port of device

How can you identify individual USB devices to unbind and bind them? Specifically, devices like mice, keyboard, dongles, etc. which are not storage.

For example, on Debian (Raspbian GNU/Linux v8.0 in this case), I have a few devices listed in /sys/bus/usb/drivers/usbhid/:

shows USB devices: 显示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

shows: 显示:

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

shows: 显示:

/:  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

I know that the is from guessing. 猜测是

I can then reset it by running and 重置它

It would be great if there was an obvious way to identify it and reset it in a bash script. Also, how can a device be identified and reset if there are more than one of the same hardware on different ports?

Both pieces of information are in the /dev or /sys/class directory.

You can use ls -l /sys/class/xxx , where xxx substitutes the device category you want to query.

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

The problem is that you have to know which device you are looking for, ie, have a name or bus number. However, you can get this information by lsusb or commands used for the specific device class, ie, ip link (an LTE modem is normally implemented as an RNDIS host and shows up in ip link as usb0 ), lsblk --output NAME,KNAME,FSTYPE,MOUNTPOINT,RM,UUID , ...

For any USB device, ls - l /sys/class/xxx will output USB port and udev path

Your Novatel Wireless (Ethernet over USB) will be in sys/class/ǹet . You can also identify devices using vendorid and productID .

If you need more information, you can use 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"

Another possibility is to use run udevadm monitor and then attach the device.

( 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 )

For a mouse (input device), try:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM