Использование Yota Router в Linux в качестве USB сетевого адаптера
Mon 21 May 2012 * A Tracepoint Blog * Gadgets * Scripts * In Gadgets * tags: yotalinuxpatch
К сожалению, Yota Router не работает в Linux в качестве USB сетевого адаптера "из коробки" (см. Изменение режимов работы USB порта
Yota Router (Quanta 1QDLZZZ0ST2)) и для решения этой проблемы удобнее всего воспользоваться открытыми драйверами от Qualcomm:
https://www.codeaurora.org/patches/quic/gobi/Gobi3000/.
Если вы пользуетесь Ubuntu 12.04 - есть готовый PPA с доработанными для Yota Router драйверами в формате DKMS:
Code:
$ sudo add-apt-repository ppa:ivoronin/gobi
$ sudo apt-get update
$ sudo apt-get install gobinet-dkms gobiserial-dkms
$ sudo modprobe gobinet
$ sudo modprobe gobiserial
Если нет - придётся поправить их исходные файлы вручную:
GobiNet (драйвер, отвечающий за работу сетевого интерфейса):
gobinet.patch https://gist.github.com/ivoronin/2703457
Code:
Index: gobinet-dkms-20110729~1026/GobiUSBNet.c
===================================================================
--- gobinet-dkms-20110729~1026.orig/GobiUSBNet.c 2012-05-09 23:11:33.000000000 +0400
+++ gobinet-dkms-20110729~1026/GobiUSBNet.c 2012-05-13 03:22:02.748985833 +0400
@@ -66,11 +66,15 @@
#define DRIVER_AUTHOR "Qualcomm Innovation Center"
#define DRIVER_DESC "GobiNet"
+ // Quanta 1QDLZZZ0ST2 (Yota Router), Old firmware
+ {
+ USB_DEVICE( 0x0408, 0xd00a ),
+ .driver_info = (unsigned long)&GobiNetInfo_intf2
+ },
+ // Quanta 1QDLZZZ0ST2 (Yota Router)
+ {
+ USB_DEVICE( 0x0408, 0xd009 ),
+ .driver_info = (unsigned long)&GobiNetInfo_intf3
+ },
//Terminating entry
После его загрузки должен появиться интерфейс usb0.
GobiSerial (драйвер последовательного порта, необходимый для управления состоянием Wi-Fi точки доступа):
gobiserial.patch https://gist.github.com/ivoronin/2480119
Code:
Index: gobiserial-dkms_20110729~1026/GobiSerial.c
===================================================================
--- gobiserial-dkms_20110729~1026.orig/GobiSerial.c 2012-05-09 23:11:02.000000000 +0400
+++ gobiserial-dkms_20110729~1026/GobiSerial.c 2012-05-13 04:08:50.930148737 +0400
{ USB_DEVICE( 0x05c6, 0x920c ) }, // Gobi 3000 QDL device
{ USB_DEVICE( 0x05c6, 0x920d ) }, // Gobi 3000 Composite Device
+ { USB_DEVICE( 0x0408, 0xd00a ) }, // Quanta 1QDLZZZ0ST2 (Yota Router), Old firmware
+ { USB_DEVICE( 0x0408, 0xd009 ) }, // Quanta 1QDLZZZ0ST2 (Yota Router)
//---------------------------------------------------------------------------
// USB serial core overridding Methods
//---------------------------------------------------------------------------
nInterfaceNum = pSerial->interface->cur_altsetting->desc.bInterfaceNumber;
DBG( "This Interface = %d\n", nInterfaceNum );
- if (nNumInterfaces == 1)
+ // Dirty hack for Quanta 1QDLZZZ0ST2
+ if (nNumInterfaces == 1 || ( pID->idVendor == 0x0408 && pID->idProduct == 0xd00a ))
// QDL mode?
if (nInterfaceNum == 1 || nInterfaceNum == 0)
// Calling kernel module to init our driver
После его загрузки должен появиться последовательный порт /dev/ttyUSB0.
QMI В качестве альтернативы в ядрах версии 3.4 (и выше) можно использовать драйвер qmi_wwan (drivers/net/usb/qmi_wwan.c),
для поддержки Yota Router придётся изменить его исходный код: qmi_wwan.patch https://gist.github.com/ivoronin/2761926
Code:
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -365,6 +365,24 @@ static const struct driver_info qmi_wwan_force_int4 = {
.data = BIT(4), /* interface whitelist bitmap */
/* Sierra Wireless provide equally useless interface descriptors
* Devices in QMI mode can be switched between two different
* configurations:
@@ -475,6 +493,26 @@ static const struct usb_device_id products[] = {
.bInterfaceProtocol = 0xff,
.driver_info = (unsigned long)&qmi_wwan_sierra,
+ /* Yota Router (Quanta 1QDLZZZ0ST2) Old firmware */
+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO,
+ .idVendor = 0x0408,
+ .idProduct = 0xd00a,
+ .bInterfaceClass = 0xff,
+ .bInterfaceSubClass = 0xff,
+ .bInterfaceProtocol = 0xff,
+ .driver_info = (unsigned long)&qmi_wwan_force_int2,
+ /* Yota Router (Quanta 1QDLZZZ0ST2) */
+ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO,
+ .idVendor = 0x0408,
+ .idProduct = 0xd009,
+ .bInterfaceClass = 0xff,
+ .bInterfaceSubClass = 0xff,
+ .bInterfaceProtocol = 0xff,
+ .driver_info = (unsigned long)&qmi_wwan_force_int3,
После его загрузки должен появиться интерфейс wwan0.
Serial Для подключения к модему через последовательный порт можно воспользоваться драйвером option (drivers/usb/serial/option.c),
который для поддержки Yota Router также придётся модифицировать: option.patch https://gist.github.com/ivoronin/2761974
Code:
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -164,6 +164,8 @@ static void option_instat_callback(struct urb *urb);
#define QUANTA_PRODUCT_GLX 0xEA04
#define QUANTA_PRODUCT_GKE 0xEA05
#define QUANTA_PRODUCT_GLE 0xEA06
+#define QUANTA_PRODUCT_YOTA_ROUTER_OLD 0xD00A
+#define QUANTA_PRODUCT_YOTA_ROUTER 0xD009
#define NOVATELWIRELESS_VENDOR_ID 0x1410
@@ -559,6 +561,15 @@ static const struct option_blacklist_info zte_mf626_blacklist = {
.reserved = BIT(4),
+static const struct option_blacklist_info quanta_yota_router_old_blacklist = {
+ .reserved = ~(BIT(0) | BIT(1)),
+static const struct option_blacklist_info quanta_yota_router_blacklist = {
+ .reserved = ~(BIT(1) | BIT(2)),
static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -590,6 +601,10 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) },
{ USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
+ { USB_DEVICE_AND_INTERFACE_INFO(QUANTA_VENDOR_ID, QUANTA_PRODUCT_YOTA_ROUTER_OLD, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t)&quanta_yota_router_old_blacklist },
+ { USB_DEVICE_AND_INTERFACE_INFO(QUANTA_VENDOR_ID, QUANTA_PRODUCT_YOTA_ROUTER, 0xff, 0xff, 0xff),
+ .driver_info = (kernel_ulong_t)&quanta_yota_router_blacklist },
После его загрузки должен появиться последовательный порт /dev/ttyUSB0.
httр://blog.tracepoint.ru/using-yota-router-in-linux.html
Code:
lsusb -d0408:d00a -v
Bus 001 Device 096: ID 0408:d00a Quanta Computer, Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0408 Quanta Computer, Inc.
idProduct 0xd00a
bcdDevice 0.00
iManufacturer 3
iProduct 2
iSerial 4
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 115
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 1
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 500mA