Установка Asterisk+chan_dongle на роутер dir-320 с прошивкой OpenWRT

В предыдущем посте описан процесс установки asterisk+chan_dongle на роутер dir-320 с прошивкой от Олега. Попробовал, настроил — не понравилось. Да, большим плюсом является возможность собрать модуль донгла прямо на роутере, но лично мне не понравилась сама прошивка — неудобный веб-интерфейс, странности при настройке, внешний носитель монтируется «на соплях» и периодически отваливается модем. Поэтому было решено попробовать собрать все тот же паровоз, но на прошивке OpenWRT (даже несмотря на крики умных людей «акстись, отрок! не соберешь ты донгл на опенврт»).

Но мы упорные »

Итак, первым делом для сбора кастомной прошивки нам потребуется Linux. Сразу оговорюсь, Ubuntu 12.04 не подходит (во всяком случае при компиляции на ней модуль донгла у меня так и не собрался), поэтому я использовал Debian Squeeze, довольно-таки старую сборку, стоящую на одном из удаленных серверов (а чего мощностям простаивать, лучше нагрузить компиляцией Core Quad, чем домашний Celeron Dual Core)

Сборка

Итак, первым делом убеждаемся, что у нас есть 5 гиг свободного места (да-да, нужно не менее 4.5 гиг, сам офигел). Я собирал в папке /tmp, т.к. в /home у меня свободного места не нашлось =)

Итак, сперва установим все необходимые пакеты:

sudo apt-get install subversion g++ ncurses-dev zlib-bin gawk make

Далее, скачиваем Buildroot OpenWrt:

 mkdir ~/openwrt && cd ~/openwrt
 svn co svn://svn.openwrt.org/openwrt/branches/backfire

Скачиваем и устанавливаем дополнительные пакеты и патчи:

 cd backfire
 ./scripts/feeds update && ./scripts/feeds install -a

Собираем tools и toolchain необходимой архитектуры:

make prereq && make tools/install && make toolchain/install

На этом этапе заодно проверится все ли нужные пакеты у нас установлены, если нет-доустанавливаем.

Добавляем к конфигу модуль донгла:

mkdir package/feeds/packages/asterisk-chan-dongle

cd package/feeds/packages/asterisk-chan-dongle

wget http://asterisk-chan-dongle.googlecode.com/svn/trunk/contrib/openwrt/asterisk18-chan-dongle/Makefile

В скачанном мейкфайле меняем версию астериска на устанавливаемую (глянуть какая будет ставиться можно в feeds/net/asterisk1.8.x/Makefile)

Тут есть еще 1 момент: на момент написания статьи на сайте OpenWRT последняя версия астера 1.8.8.0, но собранные пакеты — только для 1.8.7.1. Поэтому я поменял в Makefile версию с 1.8.8.0 на 1.8.7.1 и переписал MD5SUM на a732a608ce60fd523646be618e9da616

После этого я смог устанавливать пакеты с репозитариев, не сломав модуль донгла.

Конфигурируем прошивку:

 make menuconfig

В процессе конфигурирования, нужно выбрать систему, пакеты, и настроить будущую прошивку.

Выбираем систему:

Target System -> BCM947xx/953xx -- выбираем вариант для нашего BCM5354 с ядром 2.6

Выбирать пакеты можно как для установки в прошивку, так и просто для сборки. Пакеты, собранные без установки образуют наш мини-репозиторий, из которого их можно будет устанавливать уже после заливки прошивки в роутер. Памяти в DIR-320 всего 4 МБ, причём обязательно должно остаться немного свободного места для использования JFFS2. Так что будем устанавливать минимально необходимый набор пакетов, а остальное соберём для последующей установки на внешний носитель. Чтобы выбрать пакет для установки в прошивку, нужно нажать Y. Я добавил в прошивку пакеты, требуемые для монтирования флешки:

Kernel Modules -> USB Support -> core, usb2, ohci -- для поддержки контроллеров USB 2.0
Kernel Modules -> USB Support -> storage -- для поддержки USB-накопителей
Kernel Modules -> Filesystems -> ext3 -- выбираем нужные файловые системы
Base System -> block-mount -- для монтирования через fstab
Utilities -> disc ->; block-extroot -- для монтирования поверх файловой системы

Остальные пакеты ( в том числе астериск) будем ставить модулями. Кроме того, в главном меню появится пункт Asterisk Telephony dongle driver — это наш модуль донгла, не забываем собрать его.

В данном списке много нужных пакетов, я установил модулем еще mc, nano, LuCI (веб-интерфейс, позже пригодится)

Сохраняем конфиг, выходим, собираем:

make V=99 j=5

Параметр j определяет количество потоков, которые мы сможем использовать для сборки. Эксперты советуют ставить этот параметр равным кол-ву ядер+1.

Этот процесс, пожалуй, самый длительный-у меня он занял пару часов.

После завершения сборки, в папке bin будут находиться созданные образы прошивки в различном формате и собранные пакеты. Нам понадобится образ прошивки в формате squashfs — openwrt-brcm47xx-squashfs.trx.

Прошивка

О там, как прошить кастомную прошивку на дир320, написано миллион тем, останавливаться на этом подробно не буду.

Вкратце:

  1. Устанавливаем на нашем компьютере с windows ip 192.168.0.2
  2. Подключаем сетевым кабелем к компьютеру наш DIR-320. Кабель подключаем не в WAN-порт,а в 1-й.
  3. Создаем на диске c: папку bin
  4. Копируем туда нашу прошивку openwrt-brcm47xx-squashfs.trx
  5. Переименовывем ее в firmware.bin
  6. Скачиваем по ссылке в папку c:bin пакетный файл для прошивки
  7. Отключаем DIR-320 от питания
  8. Запускаем пакетный файл flashing.cmd
  9. Скрипт попросит нажать любую клавишу. Нажимаем пробел или ENTER
  10. Включаем питание роутера

Должен начаться процес прошивки и в итоге мы должны получить сообщение

*** Start Flashing ****
Успешная передача: 3092480 байт за 11 сs, 281134 байт/с

После того, как загорится индикатор статуса (~2-3 мин.), можно менять сетевые настройки на получение IP по DHCP и подключаться к маршрутизатору по адресу 192.168.1.1

Перенос системы на внешний носитель

Делал все по этой статье, взлетело с первого раза

Тюнинг

Если предыдущий пункт выполнен по инструкции — у нас есть доступ на роутер по SSH. Заходим любым SSH-клиентом (я использовал верный Putty) и делаем

opkg install vsftpd
opkg install luci*

У нас имеется установленный FTP-клиент и веб-интерфейс. Подключаемся к FTP и заливаем папку Packages, в которую у нас собрались доп. модули.

Переходим в нее и выполняем

opkg install asterisk18-1.8.7.1-1_brcm47XX.ipk
opkg install asterisk-chan-dongle_1.1.r10-18_brcm47XX.ipk

Остальные пакеты устанавливаем по необходимости.

Я доставил codec_alaw,codec_ulaw,chan_local.

Также, благодаря нашему шаманству с мейкфайлами, мы теперь можем устанавливать модули для астерискане из локального репозитария, а с net-repository openwrt (очень удобно кстати из свежеустановенного веб-интерфейса LuCI, там есть вкладка где это можно сделать 1 щелчком мыши)

Дальше все как всегда при работе с донглом — проверяем чтобы в системе появились /dev/ttyUSBx, если нету-проверяем взлетел ли модуль kmod-usb-serial, kmod-usb-serial-option, если не взлетел-делаем:

opkg install kmod-usb-serial
opkg install kmod-usb-serial-option
opkg install usb-modeswitch
opkg install usb-modeswitch-data

Проверяем VID & PID модема (для настроенного Huawei e1550 это 12d1 & 1001)

делаем:

usb-modeswitch -d 12d1 -p1001

Устройство появляется в /dev как /dev/ttyUSB0-2

Настраиваем модуль dongle:

nano /etc/asterisk/dongle.conf

[SIMCARD]
audio=/dev/ttyUSB1
data=/dev/ttyUSB0

#asterisk -vvvvr
CLI>dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number
SIMCARD      0     Free       31   3    3       life:)         E1550      11.608.14.11.174  3560520XXXXX  2550620508XXXX  38093XXXXXXX

если не взлетает — подобрать /dev/ttyUSB для data-порта.

Как только определится-можно привязывать модем не портом, а IMEI-модема

nano /etc/asterisk/dongle.conf

[SIMCARD]
imei=356052047147922
dtmfmode=rfc2833
context=dongle-incoming; контекст
group=0
rxgain=3; увеличение громкости
txgain=3; увеличение громкости
resetdongle=yes; сбрасывать карту при инициализации
u2diag=-1
usecallingpres=yes
callingpres=allowed_passed_screen

asterisk -vvvvr
CLI>dongle reload now
CLI>dongle show devices
ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number
SIMCARD      0     Free       31   3    3       life:)         E1550      11.608.14.11.174  3560520XXXXX  2550620508XXXX  38093XXXXXXX

Источники, откуда я черпал вдохновение:
Раз
Два
Три
Четыре

Comments

  1. Вы не могли бы объяснить мне-идиоту: что нужно для организации IP-телефонии? (не для офиса, а для дома; обычный телефон пришлось отключить, в виду того, что им практически не пользуюсь, а деньги за него постоянно списывают). То есть: какой минимум оборудования нужен для реализации ip-телефонии?

  2. Дело в том, что я посмотрел на маркете и очумел от такого выбора оборудования: какие то адаптеры FXO ? Зачем они вообще нужны, ведь на вашей картинке только роутер и юсб-модем?

    1. Для минимальной IP-телефонии достаточно компьютера и логина у провайдера IP-телефонии.
      FXo-шлюз же нужен если у Вас есть логин у провайдера телефонии, и Вы хотите использовать обычный аналоговый телефонный аппарат.
      Данная статья скорее является гайдом по расширению функционала «домашней АТС» — то есть подразумевается, что Вы знаете, что Вам нужно, у Вас есть аккаунт и сип-провайдера, либо Вы хотите, чтобы в отпуске Ваша сим-карта переадресовалась в корпоративный коллцентр.

  3. У меня есть роутер с openWRT, соответственно есть и интернет, есть sip- и skype-аккаунты, есть обычный DECT-телефон и есть заветная флешечка хуавей. Но я не понимаю, зачем она вообще здесь впринципе ? Насколько до меня дошло, то она должна принимать звонки и звонить, но разве это дешевле?
    Понятно, что все зависит от целей. А цели следующие: заменить аналоговый домашний телефон за 180 рублей, на Ip-телефон и оплачивать только за исходящие звонки.

    1. в модем Huawei вставляется сим-карта, и с помощью нехитрых манипуляций таким образом можно завести мобильный номер на сеть IP-телефонии. На Украине с этим строго — мобильные операторы официально не приземляют мобильные номера на ip-сеть. Приходится либо покупать GSM-шлюз (недешевая затея), либо использовать то, что есть под рукой.
      Для Ваших целей есть навскидку 5 вариантов:
      — SIP-клиент на компьютере. Ввели настройки от sip-провайдера, подключили гарнитуру к компьютеру-и вперед, можно звонить
      — SIP-клиент на мобильном устройстве. Установили программу на мобильный\\планшет\\айпод\\любой другой номсимый девайс с вайфаем ил 3g (GPRS работает, но со звуком могут быть проблемы), вводим настройки от sip-провайдера — и звоним

      Если есть острая необходимость именно в стационарном телефоне, тут опять же 2 варианта:
      — АТА — аналоговый телефонный адаптер. С одной стороны у него RJ45 (сетевой разъем, вход), с другой- RJ11 (телефонный разъем, выход). Подключаем девайс к инету, прописываем в него настройки sip-провайдера, подключаем Ваш DECT-телефон — и у Вас как будто обычный телефон.
      — SIP-телефон. Это телефон, в который АТА уже встроена. В остальном-аналогичен.
      -Роутер со встроенной АТА.

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

  4. Прошу пояснить подробнее объяснить первые два предложения. Я не совсем понимаю, каким образом будут осуществляться звонки.
    1. Пункт отпадает, поскольку часто меня нет дома.
    2. Второй пункт отпадает, потому что в моей российской провинции далеко не везде есть 3джи. А тот 3джи, что и есть все равно не обеспечивает нормальным качеством связи.
    3. Стоимость у этого адаптера, как у роутера; хотя может я ошибаюсь?
    4. Уже интереснее. Соединить ip-телефон с роутером необходимо посредством патч-корда ? А всякие FXO-дырки нужны только для соединения обычных телефонных аппаратов, так?

  5. А как система понимает, что надо ставить пакеты на USB flash
    #opkg install vsftpd
    #opkg install luci*

    И как флешка с USB донглом от huawei работает вместе, через какой-то USB сплиттер(коммутатор, концентратор, забыл как правильно обзывать этот тройник для USB), на борту вроде один USB.

    1. В Е1550 есть слот под MicroSD
      Как понимает? См статью о переносе системы на флешre/

  6. Ещё нет feeds/net/asterisk1.8.x/Makefile в feeds нет net, есть packages, там есть net , но нет ни чего с словом asterisk. Есть кое что в feeds/xwrt/webif-asterisk, к сожалению, что это я не помнимаю, там в основном sh скрипты.
    Можно ли скажем собрать Астериск 1.10 ? Если да, то куда скачать, как скомпилить, хотя бы ориентировочно.

  7. Уважаемый sigillite!

    Спасибо за Ваши статьи, очень информативно и понятно даже для меня «чайника». Собственно я уже пару недель пытаюсь решить задачу, которую Вы уже вполне успешно решили. Мне нужно создать GSM-SIP шлюз на Asus WL-520GU (по железу аналог DIR-320A) используя пресловутый Huawei e1550. Перепробовал разные прошивки и от Олега и энтузиастов, и DD-WRT, и Tomato толком ничего хорошего не получилось. Видимо руки у меня не той прямоты. Соотвественно дальще добрался я до OpenWRT и столкнулся с проблемой отсутствия модуля донгла в прошивке. Оговорюсь, основная прошивка у меня такая же как у Вас openwrt-brcm47xx-squashfs.trx. Но в первоначальном так сказать варианте, поэтому из затеи «сразу с наскока» ничего не получилось… Сам собрать модифицированную прошивку я не могу — не хватает знаний и нет соотвествующего оборудования. К сожалению, не могу поставить *nix систему на свой дохлый ноут.
    Поэтому одна надежда на Вас. Отсюда и моя просьба — поскольку наши с Вами железяки в принципе одинаковы, не могли бы Вы поделиться скомпанованной Вами прошивкой с модулем донгла? А дальше по Вашим инструкциям я бы наверное все же смог победить эту задачу..
    Заранее Вам благодарен.

  8. Всем привет, По данной инструкции пытаюсь собрать Asterisk+chan_dongle на DIR-320 nru, для этого маршрутизатора возможна сборка только в trunk, прошивка отдельно от chan_dongle собирается без проблем. При попытке собрать с chan_dongle материться на рекурсивную зависимость на сам Asterisk и еще несколько программ. Решил эту проблему путем деления в макефайле строки определяющую зависимости, однако донгл так и не собираеться(ниже вывод ошибки).

    Я подумал, что возможно проблема в ветке «trunk», поэтому я решил попробовать собрать Asterisk+chan_dongle для TP-Link MR3020. Нашел инструкцию для сборки Open-WRT под него, там кстати те же самые шаги, тотлько надо выбрать соответствующий процессор и плату. Ошибка всё та же(только уже для «backfire»). В гугле ничего толком не нашел по этому поводу. Собирать пробовал на Ubuntu 12.04, 13,10 и на CentOS 5(сервер на работе).

    Позже попробую собрать уже под Вашу версию DIR-320 (дабы убедиться оттуда ли у меня руки растут), надеюсь проблема не в том, под какой процессор собирать.

    make[4]: *** [app.o] Error 1
    make[4]: Leaving directory `/home/openwrt/backfire/build_dir/target-mips_r2_uClibc-0.9.30.1/chan_dongle-1.1.r10′
    make[3]: *** [/home/openwrt/backfire/build_dir/target-mips_r2_uClibc-0.9.30.1/chan_dongle-1.1.r10/.built] Error 2
    make[3]: Leaving directory `/home/openwrt/backfire/package/feeds/packages/asterisk-chan-dongle’
    make[2]: *** [package/feeds/packages/asterisk-chan-dongle/compile] Error 2
    make[2]: Leaving directory `/home/openwrt/backfire’
    make[1]: *** [/home/openwrt/backfire/staging_dir/target-mips_r2_uClibc-0.9.30.1/stamp/.package_compile] Error 2
    make[1]: Leaving directory `/home/openwrt/backfire’
    make: *** [world] Ошибка 2

  9. Имеем в наличии: роутер DIR-412 прошитый под OPEN WRT, пару CDMA модемов Хуавей EС122 / EС1260-2 У роутера постоянный белый IP адрес в инете/ Могу дать доступ через SSH. кто то может помочь (за денюжку) настроить Asterisk под мои цели???
    Цели: из инета звонить со своего «свистка»….

    1. Добрый день.

      Какими конкретно файлами?
      Статье 2 года, не уверен, что файлы непосредственно прошивки остались в наличии.

Добавить комментарий

Войти с помощью: