Я работаю над встроенной платформой 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, но я все еще исследую эту тему.