无法声明接口 0:设备或资源忙

Failed to claim interface 0: Device or resource busy

我正在尝试使用 WEBUSB API 与 USB 设备通信。但是当我试图声明接口时它显示

"DOMException: Unable to claim interface"

bConfigurationvalue1,接口号是0。我在

下面添加命令 lsusb -v 的输出
~$ lsusb -v
Bus 001 Device 005: ID 0930:6544 Toshiba Corp. TransMemory-Mini / Kingston DataTraveler 2.0 Stick (2GB)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0930 Toshiba Corp.
  idProduct          0x6544 TransMemory-Mini / Kingston DataTraveler 2.0 Stick (2GB)
  bcdDevice            1.00
  iManufacturer           1 TOSHIBA 
  iProduct                2 TransMemory     
  iSerial                 3 C412F52D6C84CFC0A0012AEF
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              200mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval             255
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval             255
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)

为什么显示设备或资源繁忙。如何认领接口?

设备显示为忙碌,因为这是一个 USB 大容量存储 class 设备,并且 Linux 将在连接时自动加载声明接口 0 的内核驱动程序。

您可以manually unbind the USB device driver使用以下命令:

echo -n "1-1:1.0" > /sys/bus/usb/drivers/usb-storage/unbind

"1-1:1.0" 指定 USB 存储驱动程序应解除绑定的设备和接口。 “1-1”表示总线1,端口1,“1.0”表示配置1,接口0。这样连接设备时,内核日志中会打印此信息,

usb-storage 1-1:1.0: USB Mass Storage device detected

您设备的总线和端口号可能会有所不同。

虽然这应该允许您将此设备与 WebUSB 一起使用,但由于涉及手动步骤,它不太可能用作长期解决方案。 WebUSB 专为没有内置操作系统驱动程序的设备而设计。

我遇到了设备问题,发现 usb_modeswitch 命令很有用。给定供应商和产品 ID,可以重置设备。例如:

usb_modeswitch -v 0x1d50 -p 0x60e3 --reset-usb