Не удалось запросить интерфейс 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