Сборка
make all
sudo make install
Кроме компилятора C и libc ничего не нужно; проверено на gcc 12. Права root понадобятся только для установки и для доступа к самому устройству.
| Платформа | Поддержка |
|---|---|
| armhf / armv7l — 32-разрядные одноплатники | Да, основная цель |
| arm64 / aarch64 | Да |
| x86, amd64 | Да |
| Windows | Нет |
Запуск службой
Под systemd демонизироваться не нужно — соответствующий ключ существует для старых систем инициализации, и здесь его лучше не включать.
[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
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 и имя симлинка для ведомой стороны — и программа, которой обязательно нужен последовательный порт, будет разговаривать через сеть.