3

Можно ли каким-либо образом получить доступ к устройству, подключенному к USB-порту локальной машины, при подключении к удаленной машине через SSH?

Я пытаюсь настроить среду разработки в облаке и прошить программы на микроконтроллер, подключенный через SSH.

1 ответ1

7

Это предполагает, что вы используете Linux с обеих сторон. Если вы работаете в Windows, есть возможности (например , putty и CygWin но это немного сложнее сделать.

Да, вы, вероятно, можете. Но это, скорее всего, не хочу делать:

  • Если вы перепрошиваете, что произойдет, если разрывается сетевое соединение?

  • Вы действительно хотите, чтобы облако "заразило" ваш локальный USB?

Последовательный порт

Если у вашего локального USB-устройства есть что-то вроде последовательного порта для прошивки, вы можете использовать локальную переадресацию портов и socat для подключения к последовательной линии. При условии, что ваша среда разработки позволяет flash через TCP-порт. Вроде следует:

На вашем локальном компьютере: ssh -R1234:localhost:1234 user@remote.example.com

Это открывает порт 127.0.0.1:1234 на remote.example.com который затем подключается к 127.0.0.1:1234 на вашем локальном компьютере.

Теперь вы используете socat для подключения к последовательной линии вашего USB:

На вашей локальной машине: socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 /dev/ttyUSB0

TCP -> Труба

С другой стороны, если программное обеспечение не может использовать TCP, но хочет общаться с pipe или tty, вы можете снова использовать socat чтобы обеспечить следующее:

На удаленном компьютере: socat -d -d -d unix-listen:.mypipe tcp-connect:127.0.0.1:1234

Теперь позвольте вашему удаленному программному обеспечению подключиться к .mypipe и оно прозрачно подключится к /dev/ttyUSB0 на вашем локальном компьютере.

Но ваш пробег может отличаться. Это сильно зависит от того, что нужно вашему программному обеспечению в облаке.

Специальные драйверы USB

Например, может случиться так, что вам нужно создать какую-то специальную заглушку, которая общается с USB . К счастью, это может быть сделано и от socat:

На локальной стороне: socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 exec:/path/to/program

Удаленная сторона более сложная, потому что, если она ожидает соединения с USB , вам, вероятно, нужно создать какой-нибудь фиктивный драйвер USB для ядра Linux и загрузить его туда. Не легко управлять, извините.

Подвести итог

SSH в сочетании с socat способен обеспечить почти все взаимосвязи между вашим локальным компьютером и "облаком", о котором вы можете подумать.

Однако подключение к локальному USB может потребовать или не потребовать особой обработки с обеих сторон. Проблемная часть - это не SSH или socat , а то, как позволить удаленному программному обеспечению обмениваться данными через такой туннель с вашим локальным USB.

Возможно, кто-то еще знает какой-нибудь plug and play USB emulator для Linux, но я никогда не сталкивался с таким чудовищем. И я делаю Linux уже почти 20 лет ..

В качестве отправной точки, возможно, посмотрите на этот ответ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .