Як я можу встановити “USB-проксі” для / dev / ttyUSB0 через мережу?


14

У мене тестується пристрій (DUT), і я вимірюю його енергоспоживання, використовуючи аналізатор живлення Datalogger, використовуючи дані з /dev/ttyUSB0.

Проблема полягає в тому, що DUT тепер віддалено від робочої станції, з якою я збирав дані, але в тій же мережі мені потрібно використовувати 2-й ПК, який безпосередньо підключається через USB до анлайзера живлення як своєрідний USB-проксі і ssh створити своєрідне символічне посилання на вимірювальній машині USB «проксі» машини.

введіть тут опис зображення

З огляду на вищевикладену схему як може 1 - й ПК доступ /dev/ttyUSB0на 2 - е ПК , який безпосередньо пов'язаний, таким чином , щоб програма читання потоку з 1 - го ПК не помітить різницю?

Відповіді:


19

socat може працювати тут.

На другому ПК ви можете дозволити socatпрослуховувати дані /dev/ttyUSB0та подати їх до порту tcp, наприклад:

socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr

Потім на 1-му ПК ви можете підключитися до другого ПК за допомогою socat та надати дані на псевдотерміналі /dev/ttyVUSB0для вашої програми:

socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888

Це не перевірено і socatпідтримує багато варіантів, тому може знадобитися налаштування.


3
Дякую! Тестове середовище в контейнері докера на ноутбуці -> тунель SSH -> ПК в чистому приміщенні -> AVR програміст і FTDI реєстратор в чистому приміщенні
Марк К Коуан

2

Можна використовувати комбінацію ser2netта socat. Наприклад, у мене є робот, підключений до малинового пі через послідовний порт. Малиновий пі підключений до моєї локальної мережі (еквівалентно вашому 2-му ПК). А мій ноутбук підключений до тієї ж локальної мережі (еквівалентний вашому 1-му ПК). Потім я використовую ser2net для пересилання послідовного порту через TCP з 2-го ПК та створення файлу послідовного проксі-пристрою, використовуючи socatна 1-му ПК.

Ця установка може працювати і для вас. Пропоноване рішення:

Крок 1: Встановіть пакет ser2net на свій 2-й ПК (дотримуючись схему)

sudo apt-get install ser2net

ser2net прослуховує TCP-порт і може передавати дані в і з послідовного порту через порт TCP. Ви можете налаштувати, для яких послідовних портів ви хочете створити "проксі" через його файл конфігурації /etc/ser2net.conf.

Крок 2: налаштування ser2net на 2-му ПК

Наприклад, якщо у вас є пристрій, з'єднаний /dev/ttyACM0з baudrate 115200і хочете його обслуговувати через порт localhost 3333, то ви можете додати наступний рядок до/etc/ser2net.conf

3333:raw:0:/dev/ttyACM0:115200,remctl

Створивши файл конфігурації, запустіть сер2net, запустивши на другому ПК:

ser2net

або (якщо воно вже працює, то просто перезапустіть його, як показано нижче)

/etc/init.d/ser2net restart

Тут важлива річ - варіант перегляду. Це дозволяє клієнтові (1-ий ПК у вашій схемі) підключитися до пристрою та вільно вибрати параметри послідовного підключення. Я думаю, що таким чином послідовне спілкування є повністю прозорим з точки зору робочої області збору даних. Детальніше дивіться тут .

Крок 3. Налаштування файлу послідовного проксі-сервера на робочій станції збору даних (1-й ПК)

(якщо у вас немає socat, тоді sudo apt-get install socat)

Нарешті, у терміналі на 1-му ПК дозвольте socatстворити послідовний проксі-порт, який буде слухати з порту tcp:

socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive

Де, у цьому прикладі ip=<2nd-PC-IP-address>та port=3333(або що ви вибрали під час налаштування /etc/ser2net.confна 2-му ПК).

Крок 4: Підключіться до MyProxySerialPort

Тепер ви маєте змогу нормально відкрити послідовне з'єднання з пристроєм, розташованим $HOME/MyProxySerialPortна 1-му ПК.

У цій публікації в блозі також є додаткова інформація про цю настройку: http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/


дуже детальна відповідь +1
Едуард Флорінеску

1

У ядрах Linux, які використовують символічне посилання від / dev / bus / usb / BUS_ID / DEV_ID до / dev / char / MAJOR: MINOR socat не може відкривати такі пристрої через невідповідну помилку IOCTL!
Таким чином, схоже, цей підхід не працює безпосередньо на USB-пристроях.

Я спробував usbip, який є більш тісною реалізацією, але підтримується лише на старих ядрах.

Оскільки моє рішення стосувалося зчитувачів карт, підключених через pcsc-lite, було кращим рішенням із використанням змінної середовища для клієнтів libpcsclite .

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

Таким чином можна вказати інший роз'єм домену unix. І це можна переслати в гніздо зчитувача карт на віддаленому хості за допомогою socat :

Запустіть це на хості, щоб замінити зчитувач карт

socat tcp:$CARD_READER_HOST:8888 UNIX-LISTEN:$PCSCLITE_CSOCK_NAME,fork

запустіть це на хості CARD_READER_HOST із підключеним зчитувачем карт pcsc

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr

1
Привіт і ласкаво просимо :). Це цікава інформація, але вона не стосується питання про /dev/ttyUSB0аналізатор потужності, який не використовує PCSCLITE. Якщо ви хочете опублікувати цю інформацію, було б краще окремим питанням. Вам дозволяється та рекомендується розміщувати тематичні питання, на які ви маєте негайну відповідь.
sourcejedi

3
Я спробував це, і відповідна інформація полягала в тому, що запропонована відповідь НЕ працює! Я думаю, що ця інформація потребує обміну. Решта справді не є безпосередньо актуальними, але пропонує інший підхід до пов'язаних проблем.
УФ

Це було б через :характер у стежці? На сторінці «socat man», у розділі «АДРЕСНІ ХАРАКТЕРИСТИКИ» є абзац про те, як вийти з символів (v1.5.0 далі).
Девід

Цікавий момент, але проект був консервований, тому більше не можна його перевірити :(
УФ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.