네트워크를 통해 /dev/ttyUSB0에 대한 "USB 프록시"를 어떻게 설정합니까?

네트워크를 통해 /dev/ttyUSB0에 대한 "USB 프록시"를 어떻게 설정합니까?

테스트 중인 장치(DUT)가 있고 다음을 사용합니다.전력 분석기 데이터 로거의 데이터를 사용합니다 /dev/ttyUSB0.

문제는 DUT가 데이터를 수집하는 데 사용하는 워크스테이션에서 멀리 떨어져 있지만 동일한 네트워크 내에서 USB를 통해 전력 분석기에 직접 연결된 두 번째 PC를 사용해야 한다는 것입니다. USB 프록시 및 "프록시" 시스템으로의 SSH 연결 USB 측정 시스템에 심볼릭 링크를 생성합니다.

여기에 이미지 설명을 입력하세요.

위의 다이어그램에서 첫 번째 PC에서 스트림을 읽는 프로그램이 차이점을 인식하지 못하도록 첫 번째 PC가 직접 연결된 /dev/ttyUSB0두 번째 PC 에 어떻게 액세스합니까 ?

답변1

socat여기서 일할 수도 있습니다.

두 번째 PC에서는 socat데이터를 수신 /dev/ttyUSB0하고 이를 TCP 포트에 공급할 수 있습니다. 예를 들면 다음과 같습니다.

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

그런 다음 첫 번째 PC에서 socat을 사용하여 두 번째 PC에 연결하고 의사 터미널의 애플리케이션에 데이터를 제공할 수 있습니다 /dev/ttyVUSB0.

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

이는 테스트되지 않았으며 socat많은 옵션을 지원하므로 조정이 필요할 수 있습니다.

답변2

ser2net및 를 조합하여 사용할 수 있습니다 socat. 예를 들어, 직렬 포트를 통해 Raspberry Pi에 연결된 로봇이 있습니다. Raspberry Pi가 내 로컬 네트워크(두 번째 컴퓨터)에 연결되어 있습니다. 내 노트북은 동일한 로컬 네트워크(첫 번째 컴퓨터와 동일)에 연결되어 있습니다. 그런 다음 ser2net을 사용하여 두 번째 PC에서 TCP를 통해 직렬 포트를 전달하고 socat첫 번째 PC에서 사용되는 프록시 직렬 장치 파일을 만들었습니다.

이 설정은 귀하에게도 적합할 수 있습니다. 제안된 솔루션:

1단계: 두 번째 PC에 ser2net 패키지를 설치합니다(아래 이미지 참조).

sudo apt-get install ser2net

ser2net은 TCP 포트에서 수신 대기하며 TCP 포트를 통해 직렬 포트 간에 데이터를 전달할 수 있습니다. 구성 파일을 통해 "프록시"를 생성하려는 직렬 포트를 설정할 수 있습니다 /etc/ser2net.conf.

2단계: 두 번째 PC에서 ser2net 구성

예를 들어 /dev/ttyACM0전송 속도로 연결된 장치가 있고 115200이를 localhost 포트 3333에서 제공하려는 경우 다음 줄을 추가할 수 있습니다./etc/ser2net.conf

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

구성 파일을 생성한 후 두 번째 PC에서 실행하여 ser2net을 시작합니다.

ser2net

또는 (이미 실행중인 경우 다음과 같이 다시 시작하십시오)

/etc/init.d/ser2net restart

여기서 중요한 점 중 하나는 remctl 옵션입니다. 이를 통해 클라이언트(그림의 첫 번째 PC)가 장치에 연결하고 직렬 연결 옵션을 자유롭게 선택할 수 있습니다. 이런 방식으로 직렬 통신은 데이터 수집 작업 공간 관점에서 완전히 투명하다고 생각합니다. 바라보다자세한 내용은 여기를 클릭하세요.

3단계: 데이터 수집 워크스테이션(첫 번째 PC)에 프록시 직렬 장치 파일 설정

(socat이 없다면, sudo apt-get install socat)

socat마지막으로 tcp 포트를 수신할 첫 번째 PC의 터미널에 프록시 직렬 포트를 만듭니다 .

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

이 예에서는 및 (또는 ip=<2nd-PC-IP-address>두 번째 컴퓨터에서 설정할 때 선택한 port=3333항목 )입니다./etc/ser2net.conf

4단계: MyProxySerialPort에 연결

$HOME/MyProxySerialPort이제 첫 번째 PC에서 장치에 대한 직렬 연결을 정상적으로 열 수 있습니다 .

이 블로그 게시물에서는 이 설정에 대한 추가 정보도 제공합니다.http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/

답변3

심볼릭 링크를 사용하는 Linux 커널에서/dev/버스/usb/BUS_ID/DEV_ID도착하다/dev/char/기본:보조 소캇부적절한 IOCTL 오류로 인해 해당 장치를 열 수 없습니다!
따라서 이 방법은 USB 장치에서 직접 작동하지 않는 것 같습니다.

나는 노력했다우빕이는 더 가까운 구현이지만 이전 커널에서만 지원됩니다.

내 솔루션은 PCSC-lite를 통해 연결된 카드 리더기에 관한 것이므로 환경 변수를 사용하는 더 나은 솔루션이 있습니다.libpcsclite고객.

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

이를 통해 다른 Unix 도메인 소켓을 지정할 수 있습니다. 다음을 사용하여 원격 호스트의 리더 소켓으로 전달할 수 있습니다.소캇:

카드 판독기를 교체하려면 호스트 시스템에서 이 명령을 실행하십시오.

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

PCSC 카드 리더기에 연결된 CARD_READER_HOST 호스트에서 이 명령을 실행하세요.

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

관련 정보