Linux. Сага о 3G USB модемах

Intro

Рассказка как подключить 3G USB модем а Linux'е.
Как обычно для того чтобы найти информацию и разобраться как это работает потребовалось довольно много времени. Показалось разумным сжато записать в копилку.

Как это работает (разборки со "свистком")

Основная идея большинства таких модемов в том, что с одной стороны они используют подписку на услугу оператора связи (SIM карточка, UMTS сети),а с другой стороны стыкуются с обычным компьютером через USB. Такие модемы часто называют "свистками" за внешнее сходство, но в принципе они достаточно нормально работают.
Некоторые модемы, которые продаются вместе с пакетом услуг могут быть залочены на работу с конкретным оператором, это значит, что поставить SIM карточку другого оператора так просто не получится (разлочка возможна, но дело не простое и не гарантирующее 100% результат).

После подключения к компьютеру модем прикидывается внешним CD-ROM, на котором есть софтина для работы. Конечно чаще всего только под винюки, хотя бывают и исключения, например Nokia CS-15 содержит все необходимое для работы Linux. Я расскажу про CS-15, но в том же Huawei все абсолютно идентично.

Для перевода модема в режим именно модема можно вручную использовать usb_modeswitch или же использовать udev. Во втором случае при подключении "свистка" он будет автоматически переключаться в режим модема.

Запуск через usb_modeswitch

Нужен usb_modeswitch, который берем отсюда.
Далее создаем файл конфигурации /etc/usb_modeswitch.setup:
#
# Nokia CS-15
#
# Contributors: Razvan Dragomirescu, Antti Turunen
#
DefaultVendor= 0x0421
DefaultProduct= 0x0610

MessageEndpoint=0x01

MessageContent="5553424312345678000000000000061b000000020000000000000000000000"
   
Я утащил этот файл отсюда. Для Huawei можно сюда заглянуть.

Идея в том, что для некого vendor'а и model (Nokia CS-15 = 0x0421-0x0610) нужно заслать некую последоветельность байт и тогда как по мновению палочки в системе появится новое устройство.

Говорим:
# usb_modeswitch
   
и создаем searial устройство:
# insmod usbserial vendor=0x421 product=0x612 maxSize=4096
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^ те же самые значения       
   

После этого syslog появится нечто вроде (для devfs это будет /usb/tts/0):
Generic converter now attached to ttyUSB0
   
Затем можно сказать (если устройства нет в /dev/)
# mknod /dev/usb/ttyUSB0 c 188 0
   
и все в порядке - имеем реальный модем.

Вышеописанный способ единственный на дистрибутивах без udev (например перешитый DIR-320), но работает на ура.

Запуск через udev

Как сказано выше есть другой способ запуска через настройку правил udev. К Нокии, как уже говорил, прилагается все необходимое.

При установке пакета в набор правил udev добавляется /etc/udev/rules.d/25-nokia-zerocd.rules (символы \ показаны для наглядности, на самом деле нужно писать одной строкой!):
BUS=="usb", SUBSYSTEM=="block", SYSFS{idVendor}=="0421", \
  SYSFS{idProduct}=="0610", ACTION=="add",  \
  PROGRAM=="nokia-testcd %M %s{bcdDevice}", \ 
  RUN+="/usr/bin/eject -s %N", OPTIONS+="last_rule"
   
Скрипт nokia-testcd проверяет версию "CD-ROM" и если все ok, то дает добро на переключение в режим модема.

После перезагрузки правил udev
# udevadm control reload_rules
   
Syslog:
kernel: [32213.396571] usb 5-7: USB disconnect, address 4
kernel: [32218.312033] usb 5-7: new high speed USB device using ehci_hcd and address 5
kernel: [32218.444957] usb 5-7: configuration #1 chosen from 1 choice
kernel: [32218.445721] usb 5-7: New USB device found, idVendor=0421, idProduct=0612
kernel: [32218.445727] usb 5-7: New USB device strings: Mfr=2, Product=1, SerialNumber=3
kernel: [32218.445730] usb 5-7: Product: Nokia Datacard
kernel: [32218.445732] usb 5-7: Manufacturer: Nokia
kernel: [32218.445734] usb 5-7: SerialNumber: 0.0.1
kernel: [32218.769537] cdc_acm 5-7:1.1: ttyACM0: USB ACM device
kernel: [32218.769995] cdc_acm 5-7:1.3: ttyACM1: USB ACM device
kernel: [32218.770247] usbcore: registered new interface driver cdc_acm
   
Модем готов к работе.

В результате всех манипуляций мы получили новое serial устройство ttyUSB0 или ttyACM0 (ttyACM1 не интересует).

Что дальше?

Чтобы не возиться с вводом PIN кода всякий раз проще его отключить, вставляем SIM карточку в любой телефон и снимаем блокировку. В принципе можно сделать ввод PIN'а при дозвонке, добавив команду AT+CPIN="1234" (1234 = PIN) в скрипт дозвонки.

Врубаем модем, запускаем терминальную программу, например minicom, указываем наше устройство (/dev/ttyACM0 или /dev/ttyUSB0). Скорость и flow control по барабану.

AT                                                                           
OK                                                                           
AT+COPS=?
^^^^^^^^^ поиск операторов может занять пару минут
+COPS: (1,"mts","mts","23091",2),(1,"Beeline","beeline","24398",2)...
                                                                             
OK
   
Выбираем нашего провайдера:
AT+COPS=1,0,"mts"                       
OK 
   
Если все прошло удачно, светодиод поменяет цвет (у Nokia CS-15 с красного на голубой).
Необходимо отметить, что при слабом уровне сигнала со станции поиск может закончиться неудачно, поэтому можно сразу попробовать выбрать оператора (если известно имя сети, конечно).

Еще один ньюанс есть в установке так называемого APN, параметры можно спросить у оператора. К примеру, для эстонского EMT нужно будет сказать:
AT+CGDCONT=1,"IP","internet.emt.ee"
OK 
   
Если оператор не использует APN, то все записанные значения игнорируются.
Если APN не указан, но используется оператором, то все будет внешне нормально, но после дозвонки ppp будет разрывать соединение.

После выключения модема настройка на оператора и APN сохраняются.

Теперь имеем обычный модем, на котором нужно просто поднять PPP.

Создаем /etc/ppp/peers/3g:
connect "/usr/sbin/chat -v -f /etc/chatscripts/3g -T *99#"
/dev/ttyACM0            
921600       
noipdefault
defaultroute
persist     
noauth 
updetach
novj    
nodeflate
replacedefaultroute
   
И /etc/chatscripts/3g (вот сюда можно прикрутить ввод PIN):
ABORT           BUSY
ABORT           VOICE
ABORT           "NO CARRIER"
ABORT           "NO DIALTONE"
ABORT           "NO DIAL TONE"
""              ATZ
OK              ATDT*99#
CONNECT         ""
   

Осталось сказать магическое заклинание
# pppd call 3g
   
и спокойно юзать мобильный интернет.

Удачноко коннекта!



Tags: debian linux USB ppp


Назад


[Home] [TTL] [Unix] [Sdictionary] [ROW Programmer] [Symbian] [Misc] [News] [Search] [Contacts] [Guestbook]


Copyright (c) 1999-2017 Alexey Semenoff