Использование модема Sense R41 в Linux
С сентября прошлого года компания Ростелеком предлагает своим абонентам брендированный 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/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).
На этом всё. Приятной работы!
http://www.ylsoftware.com/news/673
|