Программный последовательный порт в Linux - PullRequest
4 голосов
/ 03 февраля 2010

В настоящее время мне нужно разработать программу, которая будет взаимодействовать с устройствами Cisco через последовательную линию. Я хочу создать среду тестирования на моей машине Linux. Итак, я нашел динамический эмулятор Cisco. Этот эмулятор может предоставлять интерфейс через последовательную линию с опцией -U / dev / ttyS0. Ну, это заставляет Dynamips открывать аппаратный последовательный порт и обмениваться данными через него. Я могу подключиться к этому аппаратному последовательному порту с другого компьютера с Linux с помощью последовательного клиента, такого как Minicom.

Однако, так как я использую virtualbox для обеих машин linux, я связываю последовательные порты с помощью возможности virtualbox для перенаправления последовательного порта в именованный канал. Эта схема, кажется, работает, но очень избыточна. Я ищу метод для запуска Dynamips и Minicom на одной машине Linux.

Я обнаружил, что псевдо-терминалы могут быть полезны в моем случае. Но я попытался запустить Dynamips с помощью '-U / dev / ptmx', а затем подключиться с помощью minicom к созданному порту / dev / pts / ... и наоборот. В обоих случаях у меня ошибка ввода / вывода с обеих сторон.

1 Ответ

6 голосов
/ 03 февраля 2010

К сожалению, современные псевдо-терминалы не так просты. После открытия мастера с помощью posix_openpt() или open("/dev/ptmx") необходимо вызвать grantpt() и unlockpt() на главном FD, прежде чем он и его соответствующее ведомое устройство будут использоваться. (Служебные функции openpty() и т. Д. Упрощают это.)

В качестве обходного пути всегда может пригодиться socat .

# terminal 1
socat pty:link=$PWD/pts unix-l:$PWD/ptm-pipe &
dynamips -U $PWD/pts

# terminal 2
socat unix:$PWD/ptm-pipe -
...