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) нужно заслать некую последоветельность байт
и тогда как по мновению палочки в системе появится новое устройство.
Говорим:
и создаем 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
|
Выбираем нашего провайдера:
Если все прошло удачно, светодиод поменяет цвет (у 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 ""
|
Осталось сказать магическое заклинание
и спокойно юзать мобильный интернет.
Удачноко коннекта!
Tags: debian linux USB ppp
Назад
|