
COM-порт из ничего: PTY, epoll и немного RS485-боли
trgv 18 минут назад COM-порт из ничего: PTY, epoll и немного RS485-боли Средний 14 мин 295 Системное программирование * C++ * Linux * Программирование микроконтроллеров * Кейс Мне понадобился последовательный порт,...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Вот важная новость с фронта ИИ: trgv 18 минут назад COM-порт из ничего: PTY, epoll и немного RS485-боли Средний 14 мин 295 Системное программирование * C++ * Linux * Программирование микроконтроллеров * Кейс Мне понадобился последовательный порт, которого не было физически. Точнее — порт был нужен софту, который я писал и тестировал, а паять переходник и держать на столе плату ради пары проверок не хотелось. Так появился vseriald — небольшой демон для Linux и WSL2, который создает виртуальный последовательный порт /dev/ttyV0 и связывает его с сетью или другим процессом.
Приложение работает с ним как с обычным /dev/ttyUSB0: открывает, настраивает скорость через stty, читает и пишет. А с другой стороны порт «выходит» в TCP, UDP, именованный канал или очередь сообщений. Особенно это выручает в WSL2.
Технические детали
WSL2 — это легкая виртуальная машина, и последовательных портов в ней попросту нет: ни физических COM-портов с Windows-хоста, ни /dev/ttyS*, ни /dev/ttyUSB* сами по себе не появляются. Единственный способ получить там настоящий порт — «прокинуть» USB-переходник из Windows через USB/IP (утилитой usbipd-win); только тогда внутри WSL2 возникнет /dev/ttyUSB0. Если переходника под рукой нет или возиться с пробросом не хочется, виртуальный порт — это вообще единственный способ дать своему софту «последовательный порт» внутри WSL2.
В этой статье я разберу несколько мест, которые оказались интереснее, чем я ожидал: как псевдотерминал устроил мне 100% загрузки одного ядра на ровном месте, как в однопоточном цикле событий притормозить источник данных, как эмулировать полудуплексный RS485 с его коллизиями, и как из одного интерфейса транспорта вырастают шесть способов «вывести» порт наружу. Будет код из реального проекта и грабли, на которые я наступил. Исходники открыты (читать, форкать, заводить задачи): первая из двух статей.
Здесь — про внутренности самого демона; во второй, «У меня работает»: десять способов узнать, что нет, — про дорогу к релизу: как первый же запуск CI на «полностью готовом и зеленом локально» проекте вскрыл десяток скрытых проблем. Договоримся о терминахЧтобы дальше не спотыкаться, коротко проясню термины. Последовательный порт — интерфейс, который передает данные по одному биту, байт за байтом.
Отраслевые последствия
Классический разъем COM, USB-переходники /dev/ttyUSB0, отладочные консоли плат — все это он. RS232 / RS422 / RS485 — это электрические стандарты для такого порта. RS232 и RS422 — полнодуплексные: можно одновременно и принимать, и передавать.
RS485 — полудуплексный: по одной паре проводов в каждый момент времени идет либо передача, либо прием, и узлы должны вовремя «отпускать» линию. Именно из-за этого RS485 интереснее всего эмулировать. PTY (псевдотерминал) — пара виртуальных устройств в ядре: «мастер» и «слейв».
Все, что пишут в мастер, читается из слейва, и наоборот. Слейв выглядит как настоящий терминал (/dev/pts/N) — у него есть termios, скорость, режимы.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





