#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.
Комментариев нет:
Отправить комментарий