Como posso configurar um “proxy USB” para / dev / ttyUSB0 pela rede?

7

Eu tenho um dispositivo em teste (DUT) e meço seu uso de energia usando um Datalogger do analisador de potência usando os dados de /dev/ttyUSB0 .

O problema é que o DUT agora está remotamente da estação de trabalho que eu usei para coletar dados, mas na mesma rede, eu preciso usar um segundo PC que é conectado diretamente via USB ao Power Anlayzer como uma espécie de USB proxy e ssh para criar um tipo de link simbólico na máquina de medição do USB da máquina "proxy".

Dado o diagrama acima, como o PC 1 st pode acessar /dev/ttyUSB0 do 2 nd PC que está diretamente conectado, de forma que um programa lendo o fluxo a partir do 1 st PC não notará a diferença?

    
por Eduard Florinescu 06.05.2015 / 14:25

3 respostas

10

socat pode funcionar aqui.

No segundo computador, você pode permitir que socat ouça dados em /dev/ttyUSB0 e os veicule em uma porta tcp, por exemplo:

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

Em seguida, no primeiro PC, você pode se conectar ao segundo PC com socat e fornecer os dados em um pseudo terminal /dev/ttyVUSB0 para seu aplicativo:

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

Isso não foi testado e o socat suporta muitas opções, por isso talvez seja necessário ajustar.

    
por 06.05.2015 / 14:53
1

Nos kernels linux que estão usando um link simbólico de / dev / bus / usb / BUS_ID / DEV_ID para / dev / char / MAJOR: MINOR socat não pode abrir esses dispositivos devido a um erro IOCTL inadequado!
Portanto, essa abordagem não parece funcionar diretamente em dispositivos USB.

Eu tentei o usbip , que é uma implementação mais próxima, mas suportada apenas em kernels mais antigos.

Como minha solução era sobre leitores de cartões conectados via pcsc-lite, havia uma solução melhor usando a variável de ambiente para clientes libpcsclite .

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

Desta forma, um soquete de domínio unix diferente pode ser especificado. E este pode ser encaminhado para o soquete do leitor de cartão em um host remoto usando socat :

Execute isso no host para substituir o leitor de cartões

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

execute isso no host CARD_READER_HOST com o leitor de placa PCS conectado

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr
    
por 19.07.2017 / 19:09
1

Você pode usar uma combinação de ser2net e socat . Por exemplo, eu tenho um robô conectado a um pi de framboesa através de uma porta serial. O raspberry pi está conectado à minha rede local (equivalente ao seu segundo PC). E meu laptop está conectado à mesma rede local (equivalente ao seu primeiro PC). Em seguida, uso o ser2net para encaminhar a porta serial via TCP do segundo PC e criar um arquivo de dispositivo serial proxy usando socat no primeiro PC.

Esta configuração pode funcionar para você também. Solução proposta:

Etapa 1: instale o pacote ser2net no seu segundo PC (seguindo o diagrama)

sudo apt-get install ser2net

O ser2net escuta uma porta TCP e é capaz de enviar dados de e para uma porta serial através da porta TCP. Você pode configurar quais portas seriais você deseja criar "proxies" através de seu arquivo de configuração /etc/ser2net.conf .

Passo 2: configure o ser2net no 2º PC

Por exemplo, se você tiver um dispositivo conectado em /dev/ttyACM0 com baudrate 115200 e quiser veiculá-lo na porta 3333 do host local, você poderá adicionar a seguinte linha a /etc/ser2net.conf

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

Tendo criado o arquivo de configuração, inicie o ser2net executando no segundo PC:

ser2net

ou (se já estiver sendo executado, reinicie-o como abaixo)

/etc/init.d/ser2net restart

Uma coisa importante aqui é a opção remctl. Ele permite que o lado do cliente (primeiro PC em seu diagrama) se conecte ao dispositivo e escolha livremente as opções de conexão serial. Eu acho que desta forma a comunicação serial é completamente transparente a partir da perspectiva do espaço de trabalho de coleta de dados. Veja mais detalhes aqui .

Etapa 3: configurar o arquivo de dispositivo serial do proxy na estação de trabalho de coleta de dados (1º PC)

(se você não tiver socat, então sudo apt-get install socat )

Finalmente, em um terminal no primeiro PC, deixe socat criar uma porta serial proxy que escutará a partir da porta tcp:

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

Onde, neste exemplo, ip=<2nd-PC-IP-address> e port=3333 (ou o que você escolheu ao configurar /etc/ser2net.conf no segundo PC).

Etapa 4: conecte-se a MyProxySerialPort

Agora você deve conseguir abrir uma conexão serial normalmente no dispositivo localizado em $HOME/MyProxySerialPort no primeiro PC.

Esta postagem do blog também tem mais algumas informações sobre essa configuração: link

    
por 01.12.2017 / 04:44