Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Эмуляция COM порта

#linux #ubuntu #com_port


Есть ubuntu 16.04 которая установлена на VirtualBox. В самой машине есть один физический
com порт, он прокинут в VirtualBox в режиме "хост устройство" вот так:



Еще я включил 2 порта в режиме "отключен":



В результате на ubuntu эти порты определяются. (Но работать я так понимаю могу только
с одним)

 $ dmesg | grep tty
[    0.004000] console [tty0] enabled
[    0.772403] 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[    0.794717] 00:03: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A
[    0.816355] 00:04: ttyS2 at I/O 0x3e8 (irq = 4, base_baud = 115200) is a 16550A


Вопрос такой: могу ли я сделать так чтобы я мог писать в com-порт и читать из него(как
здесь), не подключая никакое устройство (мне просто нужно эхо) и не прибегая ни к каким
костылям вроде вставки скрепки в порт что бы замкнуть TX-RX. 

Может ли мне в этом помочь socat. Насколько я понял, с помощью  него можно сделать
мост с одного порта на другой, но я запутался в дебрях его настройки, был бы благодарен
если кто подскажет правильную строчку. 

Или socat для этой цели не подходит, и мне нужно что-то другое?
    


Ответы

Ответ 1



Последовательный порт с точки зрения *nix-систем — это обычное терминальное устройство. Так что самое простое — создать псевдотерминал и подключиться к нему: socat PIPE PTY,link=/tmp/my_pty,raw,echo=0 PIPE — создаёт неименованную трубу между входом и выходом, по сути работает как простой эхо-ответчик PTY — создаёт псевдотерминальное устройство, к которому можно подключиться link=/tmp/my_pty — создаёт ссылку на устройство, к которой можно подключаться, как к устройству, именно его можно указывать в open() при открытии порта. raw,echo=0 — задаёт режим работы псевдотерминала, дабы исключить изменение данных ответа. Из отличий от настоящего порта, самое явное — отсутствие задержки при отправке/получении данных, независимо от установленного baudrate'а данные будут передаваться почти мгновенно и целым пакетом. Из альтернатив: tty0tty — эмулирует полноценную пару соединённых друг с другом портов, в качестве эхо можно использовать тот же socat на одном из них. Перенаправить COM-порт в коробке на unix или tcp сокет. После чего можно использовать на этом сокете любой эхо-клиент/сервер на хосте или даже удалённой системе. В качестве клиента/сервера может выступать тот же socat.

Комментариев нет:

Отправить комментарий