usb_modeswitch с USB-ключом 3G на QEMU
Я пытаюсь использовать ключ 3G в QEMU с OpenWRT среде. Код ключа: HUAWEi - K4605.
Сначала у меня есть патч ядра в option.c:
--- option.c 2010-12-09 22:29:45.000000000 +0100
+++ option.c 2012-11-12 17:39:17.000000000 +0100
@@ -165,6 +165,7 @@
#define HUAWEI_PRODUCT_E143D 0x143D
#define HUAWEI_PRODUCT_E143E 0x143E
#define HUAWEI_PRODUCT_E143F 0x143F
+#define HUAWEI_PRODUCT_E14C6 0x14C6
#define HUAWEI_PRODUCT_K4505 0x1464
#define HUAWEI_PRODUCT_K3765 0x1465
#define HUAWEI_PRODUCT_E14AC 0x14AC
@@ -477,6 +478,7 @@
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14C6, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
Я также установил модуль ядра как kmod-usb-serial-option или kmod-usb-uhci. Затем я отключил автоматический usb_modeswitch на хост-компьютере в /etc/usb_modeswitch.conf.
У моего ключа есть два идентификатора продукта / поставщика: 12d1:14c1, когда мы используем его в моде хранения, и 12d1:14c6 в моде ключа 3G. Я запускаю свой QEMU с опцией USB:
-usb -usbdevice host:12d1:14c6 -usbdevice host:12d1:14c1
Я обнаруживаю свое устройство на моей машине qemu с lsusb в моде хранения. Теперь я должен переключить это с: /usr/bin/usb_modeswitch -v 12d1 -p 14c1 -W -M "55534243123456780000000000000011062000000100000000000000000000"
Этот шаг не работает. После помещения некоторого кода отладки в usb_modeswitch.c я вижу, что usb_bulk_write работает, но usb_bulk_read никогда не отвечает. Я изменил источники usb_modeswitch, чтобы убрать безграничное ожидание usb_bulk_read. Благодаря этой модификации я вижу с lsusb, что мой ключ успешно переключается, но запись dev ttyUSB0 не создается в /dev...
След от usb_modeswitch:
root@OpenWrt:~# /usr/bin/usb_modeswitch -v 12d1 -p 14c1 -W -M "55534243123456780000000000000011062000000100000000000000000000" scsi 2:0:0:0: CD-ROM Vodafone CD ROM (Huawei) 2.31 PQ: 0 ANSI: 2 scsi 3:0:0:0: Direct-Access Vodafone Storage (Huawei) PQ: 0 ANSI: 2 sd 3:0:0:0: [sdb] Attached SCSI removable disk Taking all parameters from the command line usb_modeswitch: handle USB devices with multiple modes Version 1.2.3 (C) Josua Dietze 2012 Based on libusb0 (0.1.12 and above) PLEASE REPORT NEW CONFIGURATIONS ! DefaultVendor= 0x12d1 DefaultProduct= 0x14c1 TargetVendor= not set TargetProduct= not set TargetClass= not set TargetProductList="" DetachStorageOnly=0 HuaweiMode=0 SierraMode=0 SonyMode=0 QisdaMode=0 GCTMode=0 KobilMode=0 SequansMode=0 MobileActionMode=0 CiscoMode=0 MessageEndpoint= not set MessageContent="55534243123456780000000000000011062000000100000000000000000000" NeedResponse=0 ResponseEndpoint= not set InquireDevice enabled (default) Success check disabled System integration mode disabled Looking for default devices ... searching devices, found USB ID 1d6b:0001 searching devices, found USB ID 0409:55aa searching devices, found USB ID 12d1:14c1 found matching vendor ID found matching product ID adding device Found device in default mode, class or configuration (1) Accessing device 003 on bus 001 ... Getting the current device configuration ... OK, got current device configuration (1) Using first interface: 0x00 Using endpoints 0x01 (out) and 0x81 (in) Inquiring device details; driver will be detached ... Looking for active driver ... OK, driver found; name unknown, limitation of libusb1 OK, driver "unkown" detached Could not get INQUIRY response (error -110) USB description data (for identification) ------------------------- Manufacturer: Vodafone Group (Huawei) Product: Vodafone Mobile Broadband (Huawei) Serial No.: not provided ------------------------- Looking for active driver ... No driver found. Either detached before or never attached Setting up communication with interface 0 Using endpoint 0x01 for message sending ... Trying to send message 1 to endpoint 0x01 ... OK, message successfully sent Resetting response endpoint 0x81 libusb:error [op_clear_halt] clear_halt failed error -1 errno 32 Could not reset endpoint (probably harmless): -34 Resetting message endpoint 0x01 libusb:error [op_clear_halt] clear_halt failed error -1 errno 32 Could not reset endpoint (probably harmless): -34 usb 1-2.1: USB disconnect, address 3 Device is gone, skipping any further commands -> Run lsusb to note any changes. Bye.
У кого-то есть решение? Нужно ли настраивать qemu определенным образом, чтобы отправлять сообщения в мой ключ через оконечную точку?
Спасибо,