Назад | Перейти на главную страницу

Перенаправление терминала 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, но ни одна из них не работала правильно.

После еще нескольких часов интенсивных исследований и тестирования множества различных вариантов я пришел с решением.

Прежде всего, мне пришлось включить терминал, добавив строку:

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, но я все еще исследую эту тему.