Настройте виртуальные последовательные порты (эмулятор нуль-модема Linux) с помощью tty0tty

9

Я хочу настроить эмулятор виртуального последовательного порта в Linux. Я хочу, чтобы порты были постоянными, чтобы я мог использовать их при каждом перезапуске. Я пытался использовать socat для этой цели, как в этом случае,

socat -d -d pty,raw,echo=0 pty,raw,echo=0

Но я часто сталкиваюсь с проблемами занятости портов во время использования этих VSP (виртуальных последовательных портов) в моих тестовых программах. Кроме того, мне трудно создавать постоянные / постоянные VSP. Теперь я хочу попробовать tty0tty для моих целей. Но есть редко какая-либо документация и как использовать руководство для этого. Кто-нибудь может просветить меня об этом? Пожалуйста, прокомментируйте, если есть решение для socat.

Юва
источник

Ответы:

13

Установка

  1. Загрузите пакет tty0tty из одного из следующих источников:

  2. Извлеки это

    • tar xf tty0tty-1.2.tgz
  3. Сборка модуля ядра из предоставленного источника
    • cd tty0tty-1.2/module
    • make
  4. Скопируйте новый модуль ядра в каталог модулей ядра.
    • sudo cp tty0tty.ko /lib/modules/$(uname -r)/kernel/drivers/misc/
  5. Загрузите модуль
    • sudo depmod
    • sudo modprobe tty0tty
    • Вы должны увидеть новые последовательные порты в / dev / ( ls /dev/tnt*)
  6. Дайте соответствующие разрешения новым последовательным портам
    • sudo chmod 666 /dev/tnt*

Теперь вы можете получить доступ к последовательным портам как /dev/tnt0(1,2,3,4 и т. Д.). Обратите внимание, что последовательные порты связаны между собой. Например, / dev / tnt0 и / dev / tnt1 подключаются, как если бы использовался прямой кабель.

Сохраняется через загрузку

отредактируйте файл / etc / modules (Debian) или /etc/modules.conf

nano /etc/modules

и добавьте следующую строку:

tty0tty

Предупреждение

Обратите внимание, что этот метод не заставит модуль сохраняться при обновлении ядра, поэтому, если вы когда-нибудь обновите свое ядро, убедитесь, что вы собрали tty0tty снова, повторите процесс.

Если вы не переместите модуль при каждом обновлении ядра, systemctl --failedбудет возвращено, что служба systemd-modules-load.serviceзавершена " failed". Также вкл journalctl -xe | grep "Failed to find".

Ruraj
источник
1
Спасибо друг, это работало довольно хорошо. Не смог найти это где-нибудь еще.
Юва
1
:) Рад, что смог помочь!
Рурадж
Есть ли tty0ttyтакже поддержка Mac OS?
Foad
Возможно, вы сможете собрать его и загрузить модуль ядра kextutil, но я никогда не пробовал!
Рурадж
Великолепное объяснение. Каждая точка хороша и опрятна. Всегда рад видеть такие отзывы
master_clown