С сентября прошлого года компания Ростелеком предлагает своим абонентам брендированный USB-модем Sense R41 для доступа в интернет через мобильные сети третьего поколения. Заявлена поддержка операционных систем Windows, MacOS X и Linux-дистрибутива Ubuntu. Причём для всех поддерживаемых операционных систем драйвера представлены на виртуальном компакт-диске, появляющемся в системе при подключении модема.
Нас интересует в первую очередь поддержка Linux. Для Linux-предлагаются два deb-пакета: для аппаратной архитектуры i386 и amd64. После установки пакета автоматически при подключении модема поднимается соединение с интернет. Но что делать если такое поведение не нужно? Или если по какой-то причине невозможно установить deb-пакет (например в RPM-based системах)? Можно настроить подключение и без установки этого пакета. Как это сделать? Об этом и будет рассказано далее.
Внешний вид модема Sense R41
Для начала немного о модеме: модем построен на чипе MediaTek MT6225 и поддерживает работу в сетях 2G (850/900/1800/1900MHz) и 3G (UMTS/HSPA 2100MHz). В сетях третьего поколения модем позволяет получать данные на скоростях до 14.4 мбит/с и отдавать на скорости до 5.76 мбит/с. В комплекте с модемом идёт SIM-карта с предоплаченым пакетом трафика. Поддерживается работа только с SIM-картами Ростелекома. По lsusb модем виден как "2020:4000".
Внешний вид модема Sense R41 со снятой крышкой
Переходим к настройке нашего модема. Все описанные действия проверены на дистрибутиве Kubuntu 13.10 i386, однако данная инструкция (возможно с небольшими изменениями) применима для большинства дистрибутивов Linux.
Сразу после подключения модема в dmesg можно наблюдать следующее:
[Ср. апр. 16 14:47:02 2014] usb 2-1.3: new high-speed USB device number 50 using ehci-pci [Ср. апр. 16 14:47:02 2014] usb 2-1.3: New USB device found, idVendor=2020, idProduct=0002 [Ср. апр. 16 14:47:02 2014] usb 2-1.3: New USB device strings: Mfr=2, Product=3, SerialNumber=4 [Ср. апр. 16 14:47:02 2014] usb 2-1.3: Product: MT6225 [Ср. апр. 16 14:47:02 2014] usb 2-1.3: Manufacturer: Network Connect [Ср. апр. 16 14:47:02 2014] usb 2-1.3: SerialNumber: 531598306601190 [Ср. апр. 16 14:47:02 2014] usb-storage 2-1.3:1.0: USB Mass Storage device detected [Ср. апр. 16 14:47:02 2014] scsi42 : usb-storage 2-1.3:1.0 [Ср. апр. 16 14:47:03 2014] scsi 42:0:0:0: CD-ROM UsbModem Storage Disk 6225 PQ: 0 ANSI: 0 CCS [Ср. апр. 16 14:47:03 2014] sr0: scsi3-mmc drive: 0x/0x caddy [Ср. апр. 16 14:47:03 2014] sr 42:0:0:0: Attached scsi CD-ROM sr0 [Ср. апр. 16 14:47:03 2014] sr 42:0:0:0: Attached scsi generic sg1 type 5 [Ср. апр. 16 14:47:03 2014] usb 2-1.3: USB disconnect, device number 50 [Ср. апр. 16 14:47:04 2014] usb 2-1.3: new high-speed USB device number 51 using ehci-pci [Ср. апр. 16 14:47:04 2014] usb 2-1.3: New USB device found, idVendor=2020, idProduct=4000 [Ср. апр. 16 14:47:04 2014] usb 2-1.3: New USB device strings: Mfr=9, Product=10, SerialNumber=0 [Ср. апр. 16 14:47:04 2014] usb 2-1.3: Product: MT6225 [Ср. апр. 16 14:47:04 2014] usb 2-1.3: Manufacturer: Network Connect [Ср. апр. 16 14:47:04 2014] cdc_mbim 2-1.3:1.0: cdc-wdm0: USB WDM device [Ср. апр. 16 14:47:04 2014] cdc_mbim 2-1.3:1.0 wwan0: register 'cdc_mbim' at usb-0000:00:1d.0-1.3, CDC MBIM, 46:fa:62:d9:85:c0 [Ср. апр. 16 14:47:04 2014] usb-storage 2-1.3:1.6: USB Mass Storage device detected [Ср. апр. 16 14:47:04 2014] scsi43 : usb-storage 2-1.3:1.6 [Ср. апр. 16 14:47:05 2014] scsi 43:0:0:0: Direct-Access UsbModem Storage Disk 6225 PQ: 0 ANSI: 0 CCS [Ср. апр. 16 14:47:05 2014] sd 43:0:0:0: Attached scsi generic sg1 type 0 [Ср. апр. 16 14:47:05 2014] sd 43:0:0:0: [sdb] Attached SCSI removable disk
Видно что никаких tty-устройств не создаётся. Обычно эта проблема решается с помощью usb_modeswitch, однако в данном случае он нам не помошник, так как он совершенно ничего не знает про устройство 2020:4000. Однако изучение скриптов, идущих с модемом, показало что для создания необходимых устройств достаточно загрузить модуль ядра usbserial с параметрами vendor=0x2020 и product=0x4000. Значит нам необходимо при подключении модема выгружать модуль и загружать обратно с нужными параметрами.
Для начала создадим скрипт "/etc/udev/scripts/3g_modem.sh" следующего содержания:
#!/bin/sh # Проверяем параметры скрипта if [ "$1" != "" -a "$2" != "" ]; then # Выгружаем модуль usbserial и другие модули, которые могут помешать выгрузке /sbin/modprobe -r option usb_wwan usbserial # Загружаем usbserial с нужными параметрами /sbin/modprobe usbserial vendor=0x$1 product=0x$2 fi
Далее создадим правило для udev, которое будет запускать скрипт с нужными параметрами при подключении модема:
ACTION=="add",ATTRS{idVendor}=="2020",ATTRS{idProduct}=="4000",RUN+="/etc/udev/scripts/3g_modem.sh %s{idVendor} %s{idProduct}"
Его необходимо сохранить в файле "/etc/udev/rules.d/60-modemswitch-3g.rules", после чего udev должен перечитать правила. Это можно сделать командой:
udevadm control --reload
Теперь при подключении модема будут создаваться tty-устройства:
[Ср. апр. 16 15:15:14 2014] usbserial: USB Serial support registered for generic [Ср. апр. 16 15:15:14 2014] usbserial_generic 2-1.3:1.2: generic converter detected [Ср. апр. 16 15:15:14 2014] usb 2-1.3: generic converter now attached to ttyUSB0 [Ср. апр. 16 15:15:14 2014] usbserial_generic 2-1.3:1.3: generic converter detected [Ср. апр. 16 15:15:14 2014] usb 2-1.3: generic converter now attached to ttyUSB1 [Ср. апр. 16 15:15:14 2014] usbserial_generic 2-1.3:1.4: generic converter detected [Ср. апр. 16 15:15:14 2014] usb 2-1.3: generic converter now attached to ttyUSB2 [Ср. апр. 16 15:15:14 2014] usbserial_generic 2-1.3:1.5: generic converter detected [Ср. апр. 16 15:15:14 2014] usb 2-1.3: generic converter now attached to ttyUSB3
С одной стороны победа, но не всё так просто: с помощью NetworkManager так и не удалось настроить соединение. В лог падают такие сообщения:
Apr 17 03:35:30 note ModemManager[922]: <info> Creating modem with plugin 'Generic' and '6' ports Apr 17 03:35:30 note ModemManager[922]: <warn> Could not grab port (tty/ttyUSB3): 'Cannot add port 'tty/ttyUSB3', unhandled serial type' Apr 17 03:35:30 note ModemManager[922]: <warn> Could not grab port (tty/ttyUSB2): 'Cannot add port 'tty/ttyUSB2', unhandled serial type' Apr 17 03:35:30 note ModemManager[922]: <info> Modem for device at '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3' successfully created Apr 17 03:35:30 note ModemManager[922]: [/dev/cdc-wdm0] Queried max control message size: 512 Apr 17 03:35:30 note ModemManager[922]: <warn> (ttyUSB0): port attributes not fully set Apr 17 03:35:30 note ModemManager[922]: <warn> Modem couldn't be initialized: Couldn't check unlock status: SIM failure Apr 17 03:35:30 note ModemManager[922]: <info> Modem: state changed (unknown -> failed)
В итоге желаемый результат удалось получить правильно настроив pppd. К сожалению идущий в комплекте с pppd chat-скрипт для модемов пришлось немного изменить (модем не работает если ему не передать AT+CFUN=1). Но обо всём по порядку.
Первым делом создадим файл "/etc/ppp/peers/rostelecom", описывающий конфигурацию соединения для pppd:
/dev/ttyUSB0 connect '/usr/sbin/chat -v -f /etc/chatscripts/3g_rostelecom -T internet' defaultroute replacedefaultroute usepeerdns unit 100 persist chap-interval 60 ipparam rostelecom noauth lcp-echo-interval 2 lcp-echo-failure 3 noipdefault
Далее создадим chat-скрипт "/etc/chatscripts/3g_rostelecom":
ABORT BUSY ABORT VOICE ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "NO DIAL TONE" ABORT "NO ANSWER" ABORT "DELAYED" ABORT "ERROR" ABORT "+CGATT: 0" "" AT TIMEOUT 30 OK ATH OK ATE1 OK AT+CFUN=1 OK AT+CGATT? OK AT+CGDCONT=1,"IP","\T" OK ATD*99# TIMEOUT 22 CONNECT ""
Всё! Теперь соединение можно устанавливать командой:
sudo pon rostelecom
А разрывать соответственно:
sudo poff rostelecom
Так же можно использовать wvdial. Больших проблем настройка не вызывает, но важно добавить в конфигурацию параметр "Stupid mode = 1". В итоге соединение успешно поднимается вот с такими настройками в "/etc/wvdial.conf":
[Dialer Rostelecom] Init1 = AT Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CFUN=1 Modem Type = Analog Modem Baud = 9600 New PPPD = yes Modem = /dev/ttyUSB0 Stupid mode = 1 ISDN = 0 Phone = *99# Password = ncc Username = ncc
Для установки соединения в этом случае надо использовать команду:
wvdial rostelecom
После настройки модема была протестирована скорость передачи и приёма данных. Использовался популярный сервис speedtest.net. Были получены следующие результаты:
То есть средняя скорость получения данных близка к 12 мбит/с что во-первых близко к предельной для модема (14.4 мбит/с), а во-вторых в принципе не плоха для мобильных сетей третьего поколения. Дополнительным бонусом является низкое время отклика (ping): около 60 мс.
На этом всё. Приятной работы!
Ladm 2014-04-18 07:45:44 (#)
Спасибо за статью, давно ничего не писал, особо времени нет наверное.