socat два последовательных порта вместе

Я пишу тест JUnit для проверки моего приложения. Приложение написано на Java и использует библиотеку purejavacomm. Чтобы протестировать анализатор последовательного порта, я хочу настроить виртуальный последовательный порт, чтобы тест мог взаимодействовать с анализатором. В дополнение к простому анализу, он также динамически подключается к последовательному порту, когда он становится доступным, поэтому я не хочу использовать, скажем, PipedInputStream.

Эта библиотека ищет только те файлы устройств, которые начинаются с ttyS, ttyUSB или ttyACM. Из-за этого я не могу сделать обычный (который выдавал бы последовательные порты в /dev/pts/x):

socat -d -d pty,raw,echo=0 pty,raw,echo=0

Я пытался сделать:

socat /dev/ttyS20 /dev/ttyS21

но это не работает. Он не выходит или печатает ошибку. Я попытался подключиться к /dev/ttyS20 с помощью экрана, но он просто говорит, [screen is terminating].

Я посмотрел права пользователя для ttyS20 (и 21), и у них обоих есть группа dialout (пользователь: root), в которой находится мой пользователь (Крис).

Я что-то упускаю из виду с разрешениями? Есть ли лучший способ сделать это все вместе?


person Chris Smith    schedule 19.11.2015    source источник
comment
Если бы я работал от имени пользователя root (чего нет в тесте), я бы смог символически связать ptys с ttySs. Я предполагаю, что именно это делает флаг link=, верно?   -  person Chris Smith    schedule 19.11.2015
comment
Разве вы не можете просто издеваться над классами purejavacomm?   -  person vlp    schedule 12.12.2015


Ответы (2)


Тогда я бы предложил создать папку dev в вашем домашнем каталоге и указать туда ссылки.

socat pty,raw,echo=0,link=/home/user/dev/ttyS20 pty,raw,echo=0,link=/home/user/dev/ttyS21

Вы должны иметь доступ к этому без root. Если это однонаправленная связь, я обычно добавляю опцию -u.

person Trevor Young    schedule 25.11.2015
comment
Я не могу создать папку dev в домашнем каталоге, потому что библиотека ищет вещи только в /dev. - person Chris Smith; 03.12.2015

Вы захотите связать вновь созданные ptys с другим местом.

socat -u -u pty,raw,echo=0,link=/dev/ttyS20 pty,raw,echo=0,link=/dev/ttyS21

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

sudo chown user:user /dev/ttyS20
sudo chown user:user /dev/ttyS21

Вы также можете изменить разрешения с помощью chmod на 777.

person Trevor Young    schedule 21.11.2015
comment
Я не хочу использовать sudo, потому что для этого требуется root-доступ. Я не хочу, чтобы мой тест выполнялся с правами root. Тест будет связывать эти последовательные порты как часть теста. - person Chris Smith; 22.11.2015
comment
Простого факта, что последовательные порты имеют группу dialout, должно быть достаточно, чтобы связать их вместе, я думаю... - person Chris Smith; 03.12.2015
comment
Можно ли уже настроить порты? Или их создание должно быть частью вашего теста? У меня есть несколько систем, в которых ОС создает виртуальные COM-порты при загрузке, а затем их используют приложения с обычными правами пользователя. Таким образом, вашему тесту не нужно будет иметь root-права. Я уверен, что некоторые могут не одобрить меня, но для такого рода вещей я обычно пишу сценарий, а затем вставляю его в /etc/rc.local. - person Trevor Young; 04.12.2015
comment
Создание должно быть частью теста, это имитирует аппаратное обеспечение, подключенное к компьютеру. - person Chris Smith; 04.12.2015