Application: cu (Call up another system).
Мне нравится утилита "cu", предназначенная для работы с удалёнными системами, устройствами, подключаемыми к компьютеру через последовательный интерфейс. Простая, маленькая, симпатичная уже тем, что не делает ничего, кроме того, что ей прямо указано. Не такая продвинутая, как "minicom", но для настройки модемов и коммутаторов её функционала вполне хватает. Одна проблема - утилита предназначена для работы на уже настроенных интерфейсах и мало что может сделать с ними самостоятельно. Системные настройки последовательных интерфейсов, те, что по умолчанию, подходят для соединения с большинством периферийных устройств, но жизнь скучна без исключений, иногда "cu" приходится помогать. Например тогда, когда устройство и его "прошивка" не поддерживают программного (XON/XOFF) или аппаратного (CTS/RTS), а то и того и другого, управления потоком, предпочитая передавать данные в сыром виде, предоставляя программному обеспечению локальной и удалённой системы самостоятельно разбирать, где начинается, а где заканчивается передача данных.
Типичный набор параметров подключения к "консольному" порту такого рода удалённых систем следующий:
terminal - VT100+
speed - 9600
parity - none
data bits - 8
stop bit - 1
sofware flow control - none
hardware flow control - none
speed - 9600
parity - none
data bits - 8
stop bit - 1
sofware flow control - none
hardware flow control - none
Для подключения к системе, не поддерживающей "программное" и "аппаратное" управление потоком данных, следует, после физического соединения "последовательного" порта локальной и "консольного" удалённой системы соответствующим кабелем, запустить утилиту "cu" с минимальными вводными параметрами:
$ cu --line ttyS0
Где:
--line - имя устройства ("последовательного" порта).
Вероятнее всего, после запуска "cu", мы сможем получить с удалённой системы поток данных, например отображающих процесс загрузки устройства (если подключение инициировано до или в момент запуска устройства) или его статус (если он отображается без специального запроса со стороны пользователя), но взаимодействовать с удалённой системой не сможем, так как наш "последовательный" порт не согласовал параметры подключения, необходимые для полноценной приёмо-передачи.
Когда выполняется подключение к удалённой системе, "cu" разделяется на два процесса. Один читает из "последовательного" порта и пишет на терминал, в то время как другой читает из терминала и пишет в "последовательный" порт. Когда оба процесса успешно устанавливают соединения, в терминале "cu" появляется сообщение "Connected" - это знак к тому, что можно продолжать работу с терминалом.
Теперь, когда сеанс связи инициирован (в терминале "cu" появилось сообщение "Connected"), на не в полной мере настроенном оборудовании, применим к "последовательному" порту компьютера необходимые параметры вручную дополнительно, с помощью утилиты "stty", в параллельном сеансе командной строки (уже после того, как была запущена утилита "cu"):
$ stty -F /dev/ttyS0 9600 cs8 -parenb -crtscts -ixon -echo
Где:
cs8 - устанавливаем быстродействие линии (в бит в секунду);
-parenb - отключаем проверку чётности;
-crtscts - отключаем аппаратное управление потоком данных;
-ixon - отключаем программное управление потоком данных;
-echo - отключаем "эхо";
-F - явно указываем с ками файлом-устройством работаем.
-parenb - отключаем проверку чётности;
-crtscts - отключаем аппаратное управление потоком данных;
-ixon - отключаем программное управление потоком данных;
-echo - отключаем "эхо";
-F - явно указываем с ками файлом-устройством работаем.
Сразу после того, как "последовательный" порт переведён в требуемое для связи с устройством состояние, соответствующий индикатор (если он имеется, конечно) на устройстве загорится, а мы получаем возможность взаимодействовать с ним.
Вышеописанные ручные манипуляции неудобны, безусловно; гораздо проще применить утилиту "minicom", в рамках сеанса которой можно задавать требуемые параметры "последовательному" интерфейсу, меняя их по мере необходимости. Пока возился с этой писаниной, почти потерял к ней интерес - публикую на всякий случай, вдруг кому пригодится.