Программный шлейф последовательного порта в Linux

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

Однако, поскольку я использую виртуальный бокс для обеих машин Linux, я связываю последовательные порты через возможность виртуального бокса перенаправлять последовательный порт на именованный канал. Схема вроде бы рабочая, но очень избыточная. Я ищу способ запускать динамические файлы и minicom на одной Linux-машине.

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


person reddot    schedule 03.02.2010    source источник
comment
С каким конкретным вопросом или сообщением об ошибке вы просите помощи?   -  person Sam Post    schedule 03.02.2010
comment
Вы использовали openpty в конце для этой задачи loopback?   -  person lpapp    schedule 17.11.2013


Ответы (1)


К сожалению, с современными псевдотерминалами все не так просто. После открытия главного устройства с помощью 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 -
person ephemient    schedule 03.02.2010
comment
Или вы можете использовать socat, чтобы открыть две точки и соединить главные концы вместе (затем подключитесь к одной точке из dynamips, а к другой из minicom). - person caf; 04.02.2010
comment
У меня не установлено minicom, поэтому я не знал, сможет ли он это сделать. Я сейчас читаю его справочную страницу, и он утверждает, что работает и с сокетами UNIX! Это полностью избавило бы от второго socat. - person ephemient; 04.02.2010
comment
@caf и присоединяйтесь к мастеру, концы вместе. что ты имеешь в виду и как бы я это сделал? Разве один терминал не должен быть главным, а другой подчиненным? - person nass; 18.07.2013
comment
@ephemient: знаете ли вы, какой дополнительный код нужно добавить, чтобы сделать петлю для открытых ведомых устройств с двумя вызовами openpty? - person lpapp; 17.11.2013