Вики IT-KB

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

Инструменты пользователя

Инструменты сайта


moxa:forwarding-physical-com-port-from-moxa-nport-5610-to-virtual-machine-with-linux-debian-8-jessie

Это старая версия документа!


Трансляция 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).

К одному из COM-портов устройства (в нашем примере это будет порт 2) подключаем GSM-модем. В данном случае в качестве модема используется терминал Siemens TC35i Terminal.


Настройка COM-порта на устройстве Moxa Nport

Переходим в веб-консоль управления устройства Moxa NPort и в разделе Serial Settings > Port 2 настраиваем параметры порта в соответствии со спецификацией поддерживаемых режимов работы подключенного к порту устройства:

Затем переходим в раздел веб-консоли Operating Settings > Port 2 и устанавливаем режим работы порта как Real COM Mode

Далее переходим в раздел веб-консоли Accessible IP Settings, включаем опцию Enable the accessible IP list и в табличной части указываем IP-адресы хостов, которые могут подключаться к нашему устройству Moxa NPort для трансляции COM-портов по сети. То есть, в нашем случае, здесь указывается IP-адрес виртуального Linux-сервера, в который мы в дальнейшем будем подключать транслируемые COM-порты. Дополнительно о настройке данного ограничивающего доступ списка можно почитать в Moxa FAQ.

Внимание!
Если на устройстве опция Enable the accessible IP list ранее не была включена, то при её включении после нажатия кнопки Submit устройство Moxa NPort будет автоматически перезагружено.


Поиск и получение драйвера Moxa Nport для Linux

Все драйверы, которые должны устанавливаться в систему, принимающую по сети транслируемые COM-порты можно найти на официальном сайте Moxa в разделе Support. В частности для Linux-систем драйвер для нашей модели доступен по ссылке

На данный момент нам доступен старый драйвер: NPort Real TTY Driver for Linux - Edition 1.18 - Released on Mar 20, 2012
В заметках к драйверу, которые доступны по ссылке есть информация о том, что данная версия драйвера поддерживает ядро 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 в ветке Установка Real TTY Driver в Debian. Действующая на данный момент ссылка на файл, опубликованная в этой ветке: 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


Подключение портов 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 17030709Linux Debian 8.6 (Jessie) Kernel 3.16.0-4-amd641.18.65

Автор первичной редакции:
Алексей Максимов
Время публикации: 15.09.2017 11:08

Обсуждение

МихаилМихаил, 30.10.2018 16:13
Спасибо за отличную статью.
Пока не понятна проблема таймаута сети, при опросе модема по команде ATI (332 OK) :(
Ваш комментарий:
 
moxa/forwarding-physical-com-port-from-moxa-nport-5610-to-virtual-machine-with-linux-debian-8-jessie.1548520464.txt.gz · Последнее изменение: 26.01.2019 19:34 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki