среда, 19 февраля 2014 г.

USB 3g модем на базе чипа Sierra SL8082 и Linux

Оставлю себе напоминание об этом периоде.
Linux 3.2.18, buildroot 05-2013.
В первую очередь - мне не надо переключать модем в режим модема) потому что он сразу в нем и нет всякой ерунды типа сидирома и флэшки.
Просто появляется четыре устройства (типично - ttyUSB0-3).
ttyUSB0 - предназначен для обмена с модемом по двоичному протоколу (полезно, чтобы не разрывать текущее соединение)
ttyUSB3 - обмен классическими AT-командами.
Однако для того, чтобы увидеть эти самые устройства, нам надо конечно же настроить ядро (make linux-menuconfig):
* Device drivers
    * USB Support
        * USB Serial converter support
            * USB Generic serial driver
            * USB friver for GSM and CDMA modems
            * USB Sierra wireless driver
В принципе, теперь на загрузке должно появится упоминание о ttyUSB* устройствах.
Можно даже и соединятся напрямую посылая команды в ttyUSB3, но удобнее для этого использовать pppd, а чтобы использовать для начала надо установить (make menuconfig):
* Packages
    * Network applications
        * pppd
После установки настраиваем pppd:
1.  Создаем файл /etc/ppp/peers/имя_соединения такого содержания:
 /dev/ttyUSB3 115200
 nobsdcomp
 nodeflate
 connect '/usr/sbin/chat -v -f /etc/ppp/chat-gprs'
 noauth
 noipdefault
 usepeerdns
 defaultroute
 debug
 nodetach
2. Напишем файл /etc/ppp/chat-имя_соединения:
  TIMEOUT         5
  ECHO            ON
  ABORT           '\nBUSY\r'
  ABORT           '\nERROR\r'
  ABORT           '\nNO ANSWER\r'
  ABORT           '\nNO CARRIER\r'
  ABORT           '\nNO DIALTONE\r'
  ABORT           '\nRINGING\r\n\r\nRINGING\r'
  ''                       \rAT
  TIMEOUT         12
  OK              ATE1
  OK              'AT+cgdcont=1,"IP","m2mstatic.beeline.ru"'
  OK              ATD*99#
После таких манипуляций мы уже можем проверить соединение: pppd call имя_соединения
На этом бы можно было и закончить но есть проблема раз - соединение периодически разрывается. Раз проблема решается добавлением в файл /etc/inittab строки :::respawn:pppd call имя_соединения.
Однако стала проявляться проблема номер два - обрыв может произойти из-за аппаратной проблемы в модеме, и вот тут и всплывает, что после такого обрыва файл порта ВНЕЗАПНО становится ttyUSB4 и соединиться мы уже ни с кем, понятно, не сможем( Грусть-печаль, помогает тут передергивание провода USB. Но как-то это не технологично, поэтому думаем, как программно отключать USB-хабы, додумываемся до такого:
echo 0 > /sys/bus/usb/devices/usb2/1-1/1-1.2/authorized (отключить)
echo 1 > /sys/bus/usb/devices/usb2/1-1/1-1.2/authorized (включить)
Удобно все это засунуть в отдельный скрипт:
echo 0 > /sys/bus/usb/devices/usb2/authorized sleep 5 echo 1 > /sys/bus/usb/devices/usb2/authorized sleep 5 echo 0 > /sys/bus/usb/devices/usb1/authorized sleep 5 echo 1 > /sys/bus/usb/devices/usb1/authorized sleep 5 date >> /var/gprs echo "gprs connect" >> /var/gprs pppd call gprs
И уже этот скрипт вызывать для создания соединения.
Ну и напоследок важный момент - маршрутизация. После создания тоннеля надо его прописать маршрутом по умолчанию. Для этого создаем файл /etc/ppp/ip-up с таким содержимым:
#!/bin/sh
route del default
route add default ppp0
А теперь точно все.

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

Отправить комментарий