【问题标题】:Ubuntu/Debian How to identify USB port of deviceUbuntu/Debian 如何识别设备的 USB 端口
【发布时间】:2017-02-23 07:58:50
【问题描述】:

如何识别单个 USB 设备以解除绑定和绑定它们?具体来说,鼠标、键盘、加密狗等非存储设备。

例如,在 Debian(本例中为 Raspbian GNU/Linux v8.0)上,我在 /sys/bus/usb/drivers/usbhid/ 中列出了一些设备:

ls /sys/bus/usb/drivers/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 Wireless1-1.4:2.2 来自猜测。

然后我可以通过运行 echo -n '1-1.4:2.2' > /sys/bus/usb/drivers/usbhid/unbindecho -n '1- 来重置它1.4:2.2' > /sys/bus/usb/drivers/usbhid/bind

如果有一种明显的方法可以识别它并在 bash 脚本中重置它,那就太好了。另外,如果不同端口上有多个相同的硬件,如何识别和重置设备?

【问题讨论】:

    标签: ubuntu raspberry-pi debian usb


    【解决方案1】:

    两条信息都在/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),@ 987654333@, ...

    对于任何 USB 设备,ls - l /sys/class/xxx 将输出 USB 端口和 udev 路径

    您的 Novatel Wireless(USB 以太网)将位于 sys/class/ǹet。 您还可以使用vendoridproductID 识别设备。

    如果您需要更多信息,可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2015-03-07
      • 1970-01-01
      • 2013-05-13
      相关资源
      最近更新 更多