суббота, 20 ноября 2010 г.

Настойка 3G модема Huawei E1550 в Fedora14.


Недавно было приобретено для нескольких сотрудников данное устройство (Huawei E1550) для работы из дому. Но, поскольку один из сотрудников уже провел себе кабельный интернет, один из модемов оказался не у дел. Я решил настроить его на своем стареньком домашнем компьютере. Установка будет проходить на Fedora14, думаю на других Redhat-based дистрибутивах не будет сильно отличаться.
Итак, открываем коробочку с модемом и читаем инструкции, из которых убеждаемся в необходимости вставить SIM-карточку для начала работы. Подключаем в USB-разъем компьютера, в трее KDE лезет окошечко с логотипом похожим на CDROM, т.е. Данное устройство было опознано Linux не как модем, а как CD-ROM. Это не удивительно, ведь модем рассчитан на работу в среде Windows, где он автоматически устанавливает программное обеспечение необходимое для его работы. Именно благодаря эмуляции CD-ROM'а и возможна автоматическая установка. Модем виден в папке Windows "Мой компьютер" как CD-ROM и как съемный диск. Виртуальный CD, содержащий Windows программы, бесполезен под Linux и мешает определиться модему, поэтому его необходимо отключить.
Далее даем команду lsusb, убеждаемся что устройство присутствует в системе:
$ lsusb
....
Bus 003 Device 004: ID 12d1:1446 Huawei Technologies Co., Ltd.
....

Отключение эмуляции CD-ROM

Отключение будет проходить в 2 этапа: деактивация cdrom-устройства, дополнительная настройка модема.

Этап 1:
Устанавливаем утилиту usb_modeswitch, предназначенной для дополнительной настройки 3G-модемов под Linux, конкретно она деактивирует cdrom-устройства и активирует модем, поддерживает устройства следующих производителей — Huawei, T-Mobile, Vodafone, Option, ZTE, Novatel.
$ sudo yum -y install usb_modeswitch

Настраиваем файл конфигурации программы usb_modeswitch
cat << EOF >> /etc/usb_modeswitch.conf

DefaultVendor = 0x12d1
DefaultProduct = 0x1446 MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000000000000000"
EOF

Теперь переключаем устройство в режим модема:
$ sudo usb_modeswitch -H -v 12d1 -p 1001

После этого значок CD-ROM пропадает на некоторое время, а через 30-60 секунд снова появляется. Команда отключила эмуляцию CD-ROM, udev распознал собственно модем, а затем снова произошла эмуляция CD-ROM.
Но этого достаточно чтобы в директории /dev появились три новых устройства: ttyUSB0-ttyUSB2.
$ ls -1 /dev/ttyUSB*
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Этап 2:
Отключаем эмуляцию CDROM насовсем с помощью minicom. Для начала установим пакет.
$ sudo yum -y install minicom

Затем даем команду:
$ sudo minicom -s
  1. Выбираем пункт «Настройка последовательного порта», далее в строке: "Какую настройку изменить?" печатаем А. Курсор перейдет в верхнюю строку "А - Последовательный порт: /dev/modem". Вместо /dev/modem пишем /dev/ttyUSB0.
  2. нажимаем ENTER, верхнее окно пропадает, и нажимаем ESC чтобы выйти из режима конфигурации.
  3. Появится окошко "Инициализируется модем", затем на экране выведется ответ на команду инициализации.
  4. Введите команду AT и нажмите ENTER. Появится ответ - OK.
  5. Далее нужно ввести команду AT^U2DIAG=0 и нажать ENTER.
  6. Теперь нажимаем CTRL+A потом Z. Выбираем команду "Выход без сброса"- Q и подтверждаем выход.

Чтобы убедиться в этом, вытащим его из гнезда USB, а затем снова включим (лучше в другое гнездо). Если никакого CD-ROM'а не появляется, повторим команду:
$ ls -1 /dev/ttyUSB*
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2

Настройка модемного соединения с Интернет

Настраивать модемное соединение можно двумя основными способами: писать скрипты ррр (Point-to-Point-Protocol), либо использовать программы-посредники. В моем случае дозвон осуществлялся с помощью wvdial. Установим программу:
$ sudo yum -y install wvdial

Настроим конфигурацию в файле /etc/wvdial.conf
[Dialer pin]
Modem = /dev/ttyUSB0
Baud = 9600
Init1 = AT+CPIN="0000"

[Dialer Defaults]
Modem = /dev/ttyUSB0

[Dialer ogo]
Modem = /dev/ttyUSB0
ISDN = off
Modem Type = Analog
Modem Baud = 460800
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","3g.utel.ua"
Init3 =
Phone = *99***1#
Phone1 =
Phone2 =
Dial Prefix =
Dial Attempts = 1
Dial Command = ATDT
Ask Password = off
Password = xxx
Username = xxx
Auto Reconnect = on
Abort on Busy = off
Carrier Check = off
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on

Набираем в консоли следующую команду. Она необходима для введения PIN-кода (по умолчанию на карточке стоит защита PIN-кодом). Если модем упорно не хочет соединяться, можно убрать проверку PIN-кода с помощью мобильного телефона.
$ sudo wvdial pin

--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: AT+CPIN="0000"
AT+CPIN="0000"
OK
--> Modem initialized.
--> Configuration does not specify a valid phone number.
--> Configuration does not specify a valid login name.
--> Configuration does not specify a valid password.

Собственно дозвон.
$ sudo wvdial ogo

ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","3g.utel.ua"
AT+CGDCONT=1,"IP","3g.utel.ua"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Sun Nov 21 17:32:32 2010
--> Pid of pppd: 2222
--> Using interface ppp0

Чтобы прервать соединение, нужно нажать CTRL+C. Если просто закрыть окно терминала, то соединение будет продолжать работать, и чтобы его разорвать придется убивать процесс командой kill.

Нерешенные вопросы:

Запуск wvdial от обычного пользователя.
При попытке запуска от обычного пользователя ругается «Cannot open /dev/ttyUSB0: Device or resource busy».
С помощью strace стало понятно, что необходимы права на запись в каталог /var/lock — добавляем пользователя в группу lock.
Далее pppd вылетает с кодами ошибок err=2 и err=3, что решается изменением прав доступа к файлам /etc/ppp/peers/wvdial, /etc/ppp/*-secrets.
После этого pppd вылетел в ошибкой err=8 (The connect script failed (returned a non-zero exit status).) Пришлось временно отложить разбирательства с pppd.

Литература:

Команды управление режимами устройства:
AT^U2DIAG=0 (устройство в режиме только модем)
AT^U2DIAG=1 (устройство в режиме модем + CD-ROM)
AT^U2DIAG=255 (устройство в режиме модем + CD-ROM + Card Reader)
AT^U2DIAG=256 (устройство в режиме модем + Card Reader).
man wvdial, wvdial.conf, pppd