===== Трансляция COM-порта с устройства Moxa Nport 5610 в виртуальную машину с Linux Debian 8 (Jessie) ===== В этой статье описан пример того, как **GSM**-модем, подключенный к физическому **COM**-порту (**RS-232**) устройства **Moxa NPort** транслировать в виртуальную машину с гостевой ОС **Linux Debian 8 (Jessie)**. В данном примере используется устройство **Moxa NPort 5610 8-Port RS-232 Device Server** (с прошивкой версии **3.8 Build 17030709**). {{ :moxa:pasted:20170915-113830.png }} К одному из **COM**-портов устройства (в нашем примере это будет порт **2**) подключаем **GSM**-модем. В данном случае в качестве модема используется терминал **Siemens TC35i Terminal**. {{ :moxa:pasted:20170915-113434.png }} \\ ==== Настройка COM-порта на устройстве Moxa Nport ==== Переходим в веб-консоль управления устройства **Moxa NPort** и в разделе **Serial Settings** > **Port 2** настраиваем параметры порта в соответствии со спецификацией поддерживаемых режимов работы подключенного к порту устройства: {{ :moxa:pasted:20170915-114207.png }} Затем переходим в раздел веб-консоли **Operating Settings** > **Port 2** и устанавливаем режим работы порта как **Real COM Mode** {{ :moxa:pasted:20170915-114456.png }} Далее переходим в раздел веб-консоли **Accessible IP Settings**, включаем опцию **Enable the accessible IP list** и в табличной части указываем IP-адресы хостов, которые могут подключаться к нашему устройству **Moxa NPort** для трансляции **COM**-портов по сети. То есть, в нашем случае, здесь указывается IP-адрес виртуального Linux-сервера, в который мы в дальнейшем будем подключать транслируемые **COM**-порты. Дополнительно о настройке данного ограничивающего доступ списка можно почитать в [[https://www.moxa.com/support/faq/faq_detail.aspx?id=257|Moxa FAQ]]. {{ :moxa:pasted:20170915-115055.png }} **Внимание**! \\ Если на устройстве опция **Enable the accessible IP list** ранее не была включена, то при её включении после нажатия кнопки **Submit** устройство **Moxa NPort** будет автоматически перезагружено. \\ ==== Поиск и получение драйвера Moxa Nport для Linux ==== Все драйверы, которые должны устанавливаться в систему, принимающую по сети транслируемые **COM**-порты можно найти на официальном сайте Moxa в разделе **Support**. В частности для Linux-систем драйвер для нашей модели доступен [[https://www.moxa.com/support/sarch_result.aspx?type=soft&prod_id=57&type_id=9|по ссылке]] {{ :moxa:pasted:20170915-120247.png }} На данный момент нам доступен старый драйвер: **NPort Real TTY Driver for Linux - Edition 1.18 - Released on Mar 20, 2012** \\ В заметках к драйверу, которые доступны [[https://www.moxa.com/support/download.aspx?type=support&id=952 |по ссылке]] есть информация о том, что данная версия драйвера поддерживает ядро **Linux Kernel** до версии **3.1.0-7**. В нашем же случае используется более новая версия ядра, установленная из официальных репозиториев **Debian Jessie**:
# uname -a Linux ... SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
Сразу скажу, что драйвер со страницы загрузки у меня даже не установился. Поэтому пришлось воспользоваться более свежей версией драйвера, которую удалось обнаружить на форуме Moxa в ветке [[https://www.moxa.ru/forum/index.php?/topic/25155-ustanovka-real-tty-driver-v-debian/|Установка Real TTY Driver в Debian]]. Действующая на данный момент ссылка на файл, опубликованная в этой ветке: [[https://www.moxa.ru/forum/index.php?app=core&module=attach§ion=attach&attach_id=2107|npreal2_1.18.65_build_17062316.tgz]] \\ ==== Установка драйвера Moxa Nport на стороне Linux Debian ==== Переходим на наш виртуальный сервер с **Debian Jessie**, и распаковываем в отдельный каталог загруженный по указанной ранее ссылке драйвер:
# mkdir MoxaNPort # cd MoxaNPort/ # tar zxf npreal2_1.18.65_build_17062316.tgz -C ~/MoxaNPort/
Ознакомится с документацией, поставляемой с драйвером можно в файле ''README.TXT'' в распакованном подкаталоге с драйвером:
# nano ~/MoxaNPort/moxa/README.TXT
В этом файле перечислены пакеты, которые могут потребоваться в системе для сборки и установки драйвера. Чтобы установить все сборочные зависимости выполним:
# apt-get install build-essential # apt-get install linux-headers-`uname -r`
Переходим в каталог с распакованным драйвером и запускаем скрипт установки с ключом ''m64'', так как в нашем случае используется 64-битная ОС Linux:
# cd ~/MoxaNPort/moxa/kernel3.x/ # ./mxinst m64
Вывод скрипта установки будет примерно таким:
=============================================================================== Copyright (C) 2002-2015 Moxa Inc. All Rights Reserved. MOXA NPort Server Real TTY Driver Ver1.18.65 Installation. System Information: Kernel 3.16.0-4-amd64; Machine x86_64. =============================================================================== Building driver... If you want to use secure communication with target, you might choose [y] to enable the SSL function. Note: This function support RealCOM with secure mode only. Do you want to enable secure function? [y/N]. n make -C /lib/modules/3.16.0-4-amd64/build SUBDIRS=/root/MoxaNPort/moxa/kernel3.x modules make[1]: Entering directory '/usr/src/linux-headers-3.16.0-4-amd64' make[1]: Entering directory `/usr/src/linux-headers-3.16.0-4-amd64' CC [M] /root/MoxaNPort/moxa/kernel3.x/npreal2.o /root/MoxaNPort/moxa/kernel3.x/npreal2.c: In function ‘npreal_net_write’: /root/MoxaNPort/moxa/kernel3.x/npreal2.c:3674:16: warning: ignoring return value of ‘copy_from_user’, declared with attribute warn_unused_result [-Wunused-result] copy_from_user(k_buf, buf, count); ^ Building modules, stage 2. MODPOST 1 modules CC /root/MoxaNPort/moxa/kernel3.x/npreal2.mod.o LD [M] /root/MoxaNPort/moxa/kernel3.x/npreal2.ko make[1]: Leaving directory '/usr/src/linux-headers-3.16.0-4-amd64' cp -p npreal2.ko /lib/modules/3.16.0-4-amd64/kernel/drivers/char/ depmod -a cc -c npreal2d.c cc npreal2d.o -o npreal2d strip npreal2d cc -c redund_main.c cc -c redund.c cc redund_main.o redund.o -lpthread -o npreal2d_redund strip npreal2d_redund cc -o mxaddsvr mxaddsvr.c strip mxaddsvr cc -o mxdelsvr mxdelsvr.c strip mxdelsvr cc -o mxcfmat mxcfmat.c strip mxcfmat cc -o mxloadsvr mxloadsvr.c strip mxloadsvr cc -o mxsetsec mxsetsec.c strip mxsetsec Check Driver... Copying configurations files ... OK! Copying driver files ... OK! Load driver... OK! Loading TTY Driver... Complete. =============================================================================== Installation process is completed. The all driver files are installed on /usr/lib/npreal2/driver. Now you can cd /usr/lib/npreal2/driver and run ./mxaddsvr to add tty port. ===============================================================================
После успешного окончания установки все инструменты управления драйвером мы можем найти в каталоге ''/usr/lib/npreal2/driver''. В частности, нам могут быть полезны утилиты: * **mxaddsvr** (Add Server, map tty port) * **mxsetsec** (Set secure communication mode) * **mxdelsvr** (Delete Server, un-map tty port) * **mxloadsvr** (Reload Server) * **mxuninst** (Remove tty port and driver files) Обратите внимание на то, что в в последующем, в случае обновления ядра Linux, может потребоваться повторное выполнение утилиты **mxinst**, так как модуль ядра **npreal2** может перестать загружаться. \\ ==== Подключение портов Moxa Nport на стороне Linux Debian ==== Итак, давайте подключим **COM**-порт c устройства **Nport** с помощью утилиты **mxaddsvr**, передав ей в качестве параметра IP адрес устройства и количество портов, которые мы хотим создать в системе
# /usr/lib/npreal2/driver/mxaddsvr 10.1.2.254 8
Вывод должен быть примерно таким:
Adding Server... ttyr00, cur00 ttyr01, cur01 ttyr02, cur02 ttyr03, cur03 ttyr04, cur04 ttyr05, cur05 ttyr06, cur06 ttyr07, cur07 Added RealCom server: ip : 10.1.2.254 mknod -m 666 ttyr00 c 33 0 mknod -m 666 cur00 c 38 0 mknod -m 666 ttyr01 c 33 1 mknod -m 666 cur01 c 38 1 mknod -m 666 ttyr02 c 33 2 mknod -m 666 cur02 c 38 2 mknod -m 666 ttyr03 c 33 3 mknod -m 666 cur03 c 38 3 mknod -m 666 ttyr04 c 33 4 mknod -m 666 cur04 c 38 4 mknod -m 666 ttyr05 c 33 5 mknod -m 666 cur05 c 38 5 mknod -m 666 ttyr06 c 33 6 mknod -m 666 cur06 c 38 6 mknod -m 666 ttyr07 c 33 7 mknod -m 666 cur07 c 38 7 Complete.
В результате в нашей Linux-системе должно появится устройство ''/dev/ttyr01'', которое мы будем использовать в дальнейшем для обращения девайсу, подключенному к удалённому **COM**-порту. Конфигурация подключения к устройству **Moxa NPort** при этом будет записана в файл ''/usr/lib/npreal2/driver/npreal2d.cf''.Если вы захотите править этот файл вручную (внимательно читайте инструкции в ''README.TXT''), то после его правки для вступления изменений в силу нужно запускать утилиту ''/usr/lib/npreal2/driver/mxloadsvr''. Теперь нам остаётся убедиться в том, что добавленный в процессе установке драйвера скрипт инициализации ''/etc/init.d/npreals'' успешно отрабатывает в процессе перезагрузки системы. Перезагружаем наш Debian сервер и проверяем наличие информации о загруженном драйвере в **dmesg**
# dmesg | grep MOXA ... MOXA Async/NPort server family Real TTY driver ttymajor 33 calloutmajor 38 verbose 0 (Ver1.18.65)
Если драйвер по какой-то причине на попал в загрузку, смотрим о способах решения данной проблемы в ''README.TXT'' \\ ==== Проверяем доступность транслированного в Linux устройства ==== Проверяем доступность подключенного через Nport и транслируемого в нашу систему GSM-модема. Для этого установим утилиту **screen**:
# apt-get install screen -y
Подключаемся к порту:
# screen /dev/ttyr01
Должен открыться новый пустой экран консольной сессии с модемом. Набираем команду получения информации о модеме
ATI
В ответ мы должны получить от модема его модель. Например, в нашем случае ответ выглядит так:
SIEMENS MC35i REVISION 02.00 OK
Если ответ получен, значит желаемый результат нами достигнут. Завершаем screen сессию клавишами "**Ctrl**+**a**" затем "**\**" Внизу экрана появится вопрос
Really quit and kill all your windows [y/n]
Жмём "**y**". Сессия **screen** будет завершена и соединение с модемом на порту ''/dev/ttyr0'' будет завершено. \\ ==== Отключение портов и удаление драйвера Moxa Nport в Linux ==== Как удалить подключение к устройству Moxa Nport:
# /usr/lib/npreal2/driver/mxdelsvr 10.1.2.254
Как удалить драйвер Moxa NPort:
# /usr/lib/npreal2/driver/mxuninst
---- Проверено на следующих конфигурациях: ^ Версия Moxa NPort Firmware ^ Версия ОС Linux ^ Версия драйвера Real TTY ^ |3.8 Build 17030709|Linux Debian 8.6 (Jessie) Kernel 3.16.0-4-amd64|1.18.65| ---- {{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 15.09.2017 11:08 {{tag>Virtualization Moxa Nport COM RS-232 TTY "Real TTY" ttyr npreal2 Linux Debian "Debian 8" "Debian Jessie" Driver Siemens TC35i Terminal}} ~~DISCUSSION~~