ELXSoftware

ELX-Serial

Документация

Как собрать, как запустить службой и что именно делает сторож.

Сборка

На целевой машине
make all
sudo make install

Кроме компилятора C и libc ничего не нужно; проверено на gcc 12. Права root понадобятся только для установки и для доступа к самому устройству.

ПлатформаПоддержка
armhf / armv7l — 32-разрядные одноплатникиДа, основная цель
arm64 / aarch64Да
x86, amd64Да
WindowsНет

Запуск службой

Под systemd демонизироваться не нужно — соответствующий ключ существует для старых систем инициализации, и здесь его лучше не включать.

/etc/systemd/system/elxserial.service
[Unit]
Description=Мост ELX-Serial на /dev/ttyS1
After=network.target

[Service]
ExecStart=/usr/local/bin/elxserial -m 5 -p 1824 -s "115200 raw" -k 60 /dev/ttyS1
Restart=always
RestartSec=5
User=elxserial
SupplementaryGroups=dialout

[Install]
WantedBy=multi-user.target
Включить и посмотреть
sudo systemctl enable --now elxserial
journalctl -u elxserial -f
Не от rootОтдельного пользователя в группе dialout достаточно, чтобы открыть порт, а мост, слушающий сеть, — как раз та программа, которой быть root не следует.

Настройки порта

Строка настроек передаётся в стиле stty. raw важнее, чем кажется: без него терминальный слой обрабатывает управляющие символы и переводы строк, и двоичный протокол приходит незаметно испорченным, а не явно сломанным.

Частые случаи
"115200 raw"                 8N1 на 115200, без обработки
"9600 raw parenb -parodd"    9600 8E1
"19200 raw cstopb"           19200 с двумя стоп-битами

Что писать в журнал

  • Подключения и отключения клиентов с их адресами.
  • Промахи сторожа и переоткрытие порта.
  • Контроллер, ответивший с флагом ошибки, — живой, но недовольный.
  • Неудачи открытия порта с причиной от системы.

Уровень отладки 1 добавляет сводку по трафику, уровень 2 — сами байты. Второй нужен, чтобы запустить новое устройство, а не для постоянной работы: на загруженной линии он забивает диск.

Когда не работает

СимптомКуда смотреть
Не открывается устройствоПрава — пользователь службы не в dialout; или порт уже держит другая программа
Клиенты подключаются, но ничего не видятНе та скорость или перепутанные A и B на RS-485
Данные приходят испорченнымиВ строке настроек нет raw или неверная чётность
Порт переоткрывается снова и сноваСторож опрашивает устройство, которое не говорит на его протоколе, — для таких выключите опрос
Пятому клиенту отказаноЛимит клиентов; поднимите его соответствующим ключом
Всё останавливается через несколько дней работыПоищите в журнале сообщения о переоткрытии: регулярно залипающий переходник — аппаратная неисправность, которую сторож маскирует

Частые вопросы

Можно ли отдать псевдотерминал?
Да. Укажите /dev/ptmx и имя симлинка для ведомой стороны — и программа, которой обязательно нужен последовательный порт, будет разговаривать через сеть.
Сколько клиентов он выдержит?
Столько, сколько разрешите; по умолчанию четыре. На практике ограничивает линия, а не процесс.
Можно ли сделать клиентов, которые только слушают?
Да — режим «только запись» закрывает обратный случай, а клиент, который сам ничего не отправляет, уже только читает.

Рядом в разделе