Переадресация терминала linux с последовательного порта на TCP с помощью socat
Я работаю над встроенной платформой ARM, Slackware. Я использую модем G24 Java, который настроен для пересылки данных между портами /dev/ttyS1
а также /dev/ttyACM0
так что все, что идет на любой из этих портов, затем видно на другом. Я хочу установить терминал на один из этих портов, /dev/ttyS1
и переслать другой порт, /dev/ACM0
к порту TCP, так что к нему можно получить доступ с другого компьютера через локальную сеть.
Прежде всего я настроил /etc/inittab
:
s2:12345:respawn:/sbin/agetty -L ttyS1 115200 vt100
Затем я пытаюсь использовать socat с помощью следующей команды:
socat -d -d -d TCP-l:2020,reuseaddr,fork /dev/ttyACM0,raw,nonblock,waitlock="/var/run/ttyACM0.lock",b115200,echo=1,icanon=1,crnl
Тогда я пытаюсь связаться с telnet 192.168.1.222 2020
с другой машины результат не совсем хороший, со стороны клиента я вижу, что терминал запрашивает логин, но тут есть немедленный ответ, который я не набрал: ^M^M^M
... и т. д., терминал отвечает, что логин неверный, а затем снова и снова то же самое.
я знаю это ^M
означает знак возврата каретки, но я не совсем уверен, как решить эту проблему. Я пробовал разные конфигурации socat, но ни одна из них не работала правильно.
1 ответ
После нескольких часов интенсивных исследований и испытаний множества различных вариантов я пришел с решением.
Прежде всего, я должен был включить терминал, добавив строку:
ttyS1
в файле /etc/securetty
,
Без этого вы не можете войти в терминал на /dev/ttyS1
,
Во-вторых, я протестировал много разных конфигураций socat и работает следующая команда:
/usr/local/bin/socat tcp-l:2020,reuseaddr,fork,crlf file:/dev/ttyACM0,echo=0,b115200,raw,crnl,icanon=1
Однако это решение не идеально. Терминал разрывает строку после каждой командной строки, поэтому вводимые пользователем данные вводятся в следующей строке. Кроме того, после выполнения каждой команды появляется пустая командная строка (как я ввел пустую команду сразу после той, которую я действительно ввел).
Я полагаю, что я должен настроить /dev/ttyACM0
правильно с stty, но я все еще исследую тему.