Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  UPS APC-1500
  NetMos NM9845
  cisco & syslog
  LAN card`s test
  HDD & UDMA100
  S.M.A.R.T.
  D-Link DE-200TP
  Marvell 88E8053
  D-Link DGE530T
  КПК + FreeBSD
  D-Link DWL-G520
  SkyLink-CDMA
  Atheros AR5007EG
  BlueTooth mouse
  Asus Eee PC
  atacontrol
  SkyStar-2+SlonAx
  TT budget S-1401
  SiS*Mirage*1 на D201GLY2
  NetXtreme BCM5722
  snd_hda
  Peoplenet + C-motech (3G)
  freebsd + huawei 162 gsm modem
  tw_cli
  pc_speaker
  Canon/gphotofs
  Охранная система на FreeBSD+LPT
  Даешь 220 в LPT
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Шелезяки —> freebsd + huawei 162 gsm modem

Установка и настройка huawei 162

Автор: vp.


Задача: подключить купленый недавно за 2000 в магазине usb gsm модем huawei eg162 к корпоративному серверу для отправки с него смс.

Проблема, собственно, заключается в том, что модемы серии huawei просто так не воспринимаются freebsd.
Первый и довольно-таки важный шаг - проверить, снят ли пин-код на симкарте! Мною было потрачено пару часов на разбор, почему не работает отправка и прием смс, оказывается, стоял пин-код. Пин не сложно указать потом в конфигурационном файле(если требуется).

Особенности подключения внешних модемов - они изначально подключаются как сменный накопитель(или как внешний cdrom), после установки драйверов с которых флешка переключается в режим модема.
Для того, чтобы впоследствии корректно обрабатывать флешку мне пришлось подклюить модуль ubsa (usb-rs232(компорт)):
# kldload ubsa

чтобы потом модуль загружался автоматичеси, можно добавить его в /boot/loader.conf
ubsa_load="YES"

Возможно, может потребоваться подключение модулей ucom и umodem. Технология подключения точно такая же.

Итак, подключаем устройство и смотрим, подключилось ли:
# usbdevs -v

Controller /dev/usb0:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x0000), rev 1.00
port 1 addr 2: full speed, power 500 mA, config 1, HUAWEI Mobile(0x1001), HUAWEI Technologies(0x12d1), rev 0.00
port 2 powered

Есть контакт! Посвятим немного времени обзору:
HUAWEI Technologies(0x12d1) - это код производителя
HUAWEI Mobile(0x1001) - номер модели(меняется в случае разных huawei'ев)

Однако, для работы нам нужен порт, который, как правило, обозначается в freebsd как /dev/cuaU0, цифра на конце может менятся в зависимости от уже подключенных устройств.
Проверяем, активен ли наш модем:
# ls /dev | grep cuaU

Ответ пуст, модем еще не активен.

В 7 ветке freebsd(а возможно и в более ранних) уже есть поддержка модемов huawei, необходимо лишь включить нужный режим.
Большинство мануалов в интернете относятся к моделям huawei e220, нам подходит т.к. принцип работы у них тот же.
В частности, предлагается внести следующие изменения в ядро:

--- ubsa.c.orig Sat Dec 15 22:36:22 2007
+++ ubsa.c      Sat Dec 15 23:39:07 2007
@@ -383,6 +383,23 @@
                printf("%s: Could not find interrupt in\n",
                    USBDEVNAME(ucom->sc_dev));
                ucom->sc_dying = 1;
+
+               if (uaa->vendor == USB_VENDOR_HUAWEI &&
+                   uaa->product == USB_PRODUCT_HUAWEI_E220) {
+
+                       usb_device_request_t req;
+                       usbd_status err;
+
+                       req.bmRequestType = UT_WRITE;;
+                       req.bRequest = UR_SET_FEATURE;
+                       USETW(req.wValue, 1);
+                       USETW(req.wIndex, 2);
+                       USETW(req.wLength, 0);
+                       printf("Resetting port\n");
+                       err = usbd_do_request(dev, &req, 0);
+                       printf("Port resetted\n");
+               }
+
                goto error;
        }

Я привожу этот код для того, чтобы если кто-то ищет подобные материалы, находил эту статью.
Нам не придется перекомпилировать ядро, не нужно даже подключать дополнительных модулей. Все что требуется для включения работы модема - это послать ему сигнал на переключение режима, чем и занимается вышеприведенный код драйвера, но есть простая программа, проделывающая то же самое изменение:

#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <dev/usb/usb.h>

int main(int argc, char **argv)
{
  struct usb_ctl_request ucr = { /* zero */ };
  int f;

  if (argc < 3) {
      printf("Usage: %s /dev/usb1 <addr>\n", argv[0]);
      return 1;
  }

  f = open(argv[1], O_RDWR);
  if (f < 0) {
      return 1;
  }

  ucr.ucr_addr = atoi(argv[2]);
  ucr.ucr_request.bmRequestType = 0;
  ucr.ucr_request.bRequest = 3; /* SET_FEATURE */
  ucr.ucr_request.wValue[0] = 1;

  if (ioctl(f, USB_REQUEST, &ucr)) {
      printf("Error!\n");
  }

  close (f);

  return 0;
}

(с) Hans Petter Selasky http://lists.freebsd.org/pipermail/freebsd-questions/2007-December/164404.html

Для использования создаем файл: huawei.c, переносим в него код программы, а затем создаем исполняемый файл:
# cc -o huawei huawei.c

запускаем:
# ./huawei /dev/usb0 2

где /dev/usb0 и 2 - это цифры из usbdevs -v ("Controller /dev/usb0" и "port 1 addr 2")
Если возвращает "Error!" - что-то в параметрах указано неверно. Если все верно нужно попробовать запустить программу еще раз. Верным результатом будет пустая строка.
В дальнейшем можно добавить эту строчку в автозапуск системы.

Проверяем, активен ли наш модем:
# ls /dev | grep cuaU

В данном случае вывод должен содержать:
cuaU0
cuaU0.init
cuaU0.lock

В зависимости от модели портов может быть несколько.

Все! Теперь можно работать с нашим модемом. Если требуется подключение к сети интернет, нужно поискать статью о подключении к интернет с помощью gsm модема, мне требовалось подключить обработу смс, поэтому ставим smstools:
# pkg_add -r smstools

Теперь внимание: модель huawei eg162, а, возможно, и другие модели huawei'ов, почему-то не поддерживает аппаратного управления хэндшейком... И плюс к тому, не поддерживает строку преинициализации и не работал у меня без ATZ.
Таким образом после минимальной подстройки рабочий конфиг /usr/local/etc/smsd.conf:
devices = GSM1
logfile = /var/log/smsd.log
loglevel = 7

[GSM1]
device = /dev/cuaU0
pre_init = no
init = ATZ
init2 = AT+CPMS="ME","ME","ME"
incoming = yes
rtscts = no
mode = new
#pin = 1234

Если возникнут трудности с конфигурационным файлом, вот ссылка на подробное описание параметров: http://smstools3.kekekasvi.com/index.php?p=configure

Все, что осталось - запустить и проверить работу
Добавляем smsd_enable="YES" в /etc/rc.conf
запускаем сервис:
# /usr/local/etc/rc.d/smsd start

смотрим лог:
# tail -f /var/log/smsd.log

если нет файла, создаем его командой:
# touch /var/log/smsd.log

2009-04-21 13:25:35,2, smsd: Smsd v3.1 started.
2009-04-21 13:25:35,2, smsd: Running as root:wheel.
2009-04-21 13:25:35,6, smsd: File mode creation mask: 022 (0644, rw-r--r--).
2009-04-21 13:25:35,6, smsd: Outgoing file checker has started. PID: 1700.
2009-04-21 13:25:35,6, GSM1: Modem handler 0 has started. PID: 1701.
2009-04-21 13:25:35,6, GSM1: Checking device for incoming SMS
2009-04-21 13:25:35,6, GSM1: Checking if modem is ready
2009-04-21 13:25:35,7, GSM1: -> AT
2009-04-21 13:25:35,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- AT OK
2009-04-21 13:25:36,6, GSM1: Initializing modem
2009-04-21 13:25:36,7, GSM1: -> ATZ
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- TZ OK
2009-04-21 13:25:36,7, GSM1: -> AT+CPMS="ME","ME","ME"
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:36,7, GSM1: <- T+CPMS="ME","ME","ME" +CPMS: 0,255,0,255,0,255 OK
2009-04-21 13:25:36,6, GSM1: Checking if Modem is registered to the network
2009-04-21 13:25:36,7, GSM1: -> AT+CREG?
2009-04-21 13:25:36,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CREG? +CREG: 0,1 OK
2009-04-21 13:25:37,6, GSM1: Modem is registered to the network
2009-04-21 13:25:37,6, GSM1: Selecting PDU mode
2009-04-21 13:25:37,7, GSM1: -> AT+CMGF=0
2009-04-21 13:25:37,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CMGF=0 OK
2009-04-21 13:25:37,6, GSM1: Checking memory size
2009-04-21 13:25:37,7, GSM1: -> AT+CPMS?
2009-04-21 13:25:37,7, GSM1: Command is sent, waiting for the answer
2009-04-21 13:25:37,7, GSM1: <- T+CPMS? +CPMS: "ME",0,255,"ME",0,255,"ME",0,255 OK
2009-04-21 13:25:37,6, GSM1: Used memory is 0 of 255
2009-04-21 13:25:37,6, GSM1: No SMS received

Примерно так выглядит здоровый рабочий лог. В продакшене можно выставить в smsd.conf loglevel=5 и все.

Есть множество тем по настройке и работе smstools, в т.ч. и на этом сайте, поэтому дальше описывать не стану, главное - все работает!



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?p=115550.

размещено: 2009-04-22,
последнее обновление: 2009-04-24,
автор: vp

оценить статью:

Dog, 2009-04-22 в 18:14:46

Однако, для работы нам нужен порт, который, как правило, обозначается в freebsd как /dev/cuaU0 или /dev/ttyU0, цифра на конце может менятся в зависимости от уже подключенных устройств.

В данном случае некорректное определение, не "или", а "и". Чуть подробней, почему именно такой тип терминала: см. man 4 ucom и man 4 sio (раздел FILES):
...
    /dev/ttyd?       for callin ports
...
    /dev/cuad?       for callout ports
...


Для USB-консолей - да, будут соответственно ttyU? и cuaU?, но не "как правило", а конкретно для входящих и исходящих подключений. В данном случае подключение будет исходящим, поэтому именно cuaU?.

udaff, 2009-04-23 в 15:18:14

Для ввода пин кода я использую команду:
AT+CPIN=<pin>

А вообще нужно читать AT commad manual....

vp, 2009-04-23 в 16:54:11

Поправил статью всоответствии с комментариями.
Что касается пина, да, действительно, такая команда работает. Правда в smstools она представлена в виде pin=####(у меня в конфиге эта строчка закомментирована)
Вот полезные команды AT:
ATZ - инициализация, если не срабатывает, модем не работает
AT+CREG - зарегистрирована ли сеть
AT+CSQ - качество приема
AT+CPIN=№№№№ - ввод пин-кода
AT+CPMS="SM" - где хранить смс: "SM" - память сим-карты, "ME" память устройства(бывает полезно)

kyym, 2009-05-17 в 20:20:40

ну просто преогромнейшее спасибо за статью, совершенно случайно нашел сегодня на кухне вот именно такой модем - подрубил проверил - все работает как описано..))))))
единственное обо что спотыкнулся - не проверил снят ли пон код на симке)))

gocool, 2009-07-03 в 16:21:06

Если не удается считать SMS из этого модема, попробуйте добавить
memory_start=0
в smsd.conf

iceman, 2009-12-14 в 22:32:30

к статье не хватает команды uname , а то с патчем ubsa лажа выходит : )


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 43 чел.
За последние 30 мин было: 176 человек
За сегодня было
2758 показов,
686 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1169 секунд
Из них PHP: 52%; SQL: 48%; Число SQL-запросов: 77 шт.
Исходный размер: 111401; Сжатая: 21955