Использование модема Sense R41 в Linux

()

С сентября прошлого года компания Ростелеком предлагает своим абонентам брендированный USB-модем Sense R41 для доступа в интернет через мобильные сети третьего поколения. Заявлена поддержка операционных систем Windows, MacOS X и Linux-дистрибутива Ubuntu. Причём для всех поддерживаемых операционных систем драйвера представлены на виртуальном компакт-диске, появляющемся в системе при подключении модема.

Нас интересует в первую очередь поддержка Linux. Для Linux-предлагаются два deb-пакета: для аппаратной архитектуры i386 и amd64. После установки пакета автоматически при подключении модема поднимается соединение с интернет. Но что делать если такое поведение не нужно? Или если по какой-то причине невозможно установить deb-пакет (например в RPM-based системах)? Можно настроить подключение и без установки этого пакета. Как это сделать? Об этом и будет рассказано далее.

Sense R41
Внешний вид модема Sense R41

Для начала немного о модеме: модем построен на чипе MediaTek MT6225 и поддерживает работу в сетях 2G (850/900/1800/1900MHz) и 3G (UMTS/HSPA 2100MHz). В сетях третьего поколения модем позволяет получать данные на скоростях до 14.4 мбит/с и отдавать на скорости до 5.76 мбит/с. В комплекте с модемом идёт SIM-карта с предоплаченым пакетом трафика. Поддерживается работа только с SIM-картами Ростелекома. По lsusb модем виден как "2020:4000".

Sense R41 со снятой крышкой
Внешний вид модема 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/ppp/peers/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).

На этом всё. Приятной работы!

Ключевые слова: 3g, pppd, wvdial, rostelecom, ростелеком, sense r41.

Комментарии:

Ladm 2014-04-18 07:45:44 (#)

Теперь Лось мобильный и с быстрым откликом?

Спасибо за статью, давно ничего не писал, особо времени нет наверное.

MooSE 2014-04-18 15:03:57 (#)

Цитата:

Теперь Лось мобильный и с быстрым откликом?

Спасибо за статью, давно ничего не писал, особо времени нет наверное.

Для мобильности у меня есть М150-1, воткнутый в MR3020. Оба ношу в сумке с ноутом. Там же есть ещё аккумулятор. А в машине можно это дело воткнуть в прикуриватель:)

А сабж взял скорее просто "потыкать". Ну и ещё на даче с покрытием 4G проблемы, думаю попробовать 3G с внешней антенной и 3G от ростелекома в первом приближении неплох.

А про "не писал": времени действительно совсем нет. У меня ещё лежат черновики про мониторинг различных RAID-контроллеров, надеюсь всё-таки найти время и оформить.

Anonymous 2014-09-14 12:03:12 (#)

Добрый человек, а не подскажите, как подружить Sense R41 с TL-MR3420?

MooSE 2014-09-25 02:37:38 (#)

Цитата:

Добрый человек, а не подскажите, как подружить Sense R41 с TL-MR3420?

К сожалению не подскажу. Тут либо накатывать OpenWRT, либо менять модем.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE