Документация по ОС FreeBSD Среда, 08.05.2024, 23:10
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Работа с железом

Установка и настройка huawei 162 [2009]
Задача: подключить купленый недавно за 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://www.lissyara.su/?id=1928
Категория: Работа с железом | Добавил: oleg (24.04.2009) | Автор: vp
Просмотров: 1147 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024