Не удалось запросить интерфейс 0: устройство или ресурс заняты

Я пытаюсь связаться с USB-устройством, используя WEBUSB API, НО, когда я пытаюсь получить интерфейс, который он показывает

"DOMException: невозможно запросить интерфейс"

bConfigurationvalue является 1 и номер интерфейса 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)

Почему это показывает устройство или ресурсы заняты. Как получить интерфейс?

2 ответа

Решение

Устройство отображается как занятое, поскольку это устройство класса USB Mass Storage, и Linux автоматически загружает драйвер ядра, когда он подключен, который запрашивает интерфейс 0.

Вы можете вручную отсоединить драйвер устройства USB с помощью следующей команды:

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

      usb_modeswitch -v 0x1d50 -p 0x60e3 --reset-usb
Другие вопросы по тегам