네트워크를 통해 / dev / ttyUSB0에 대한“USB 프록시”를 설정하려면 어떻게해야합니까?


14

테스트 대상 장치 (DUT)가 있고 의 데이터를 사용하여 Power Analyzer Datalogger를 사용 하여 전력 사용량을 측정합니다 /dev/ttyUSB0.

문제는 DUT가 이제 데이터를 수집하는 데 사용 된 워크 스테이션에서 원격이지만, 동일한 네트워크에서 USB를 통해 일종의 USB 프록시 및 ssh로 Power Anlayzer에 직접 연결된 두 번째 PC를 사용해야한다는 것입니다 "프록시"기계의 USB 측정 기계에 일종의 심볼릭 링크를 생성합니다.

여기에 이미지 설명을 입력하십시오

1 명 방법을 상기도 주어 세인트 PC 접속 /dev/ttyUSB02의 ND 직접 방식으로 연결되고 PC는 1부터 스트림 판독 프로그램 것을 세인트 PC는 그 차이를 알 수없는 것인가?

답변:


19

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많은 옵션을 지원하므로 조정이 필요할 수 있습니다.


3
감사! 랩탑의 도커 컨테이너에서 테스트 환경-> SSH 터널-> 클린 룸의 PC-> 클린 룸의 AVR 프로그래머 및 FTDI 로거
Mark K Cowan

2

ser2net및 의 조합을 사용할 수 있습니다 socat. 예를 들어, 직렬 포트를 통해 라즈베리 파이에 로봇이 연결되어 있습니다. 라즈베리 파이가 로컬 네트워크 (2 차 PC와 동일)에 연결되어 있습니다. 그리고 랩탑은 동일한 로컬 네트워크 (첫 번째 PC와 동일)에 연결되어 있습니다. 그런 다음 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로컬 호스트 포트 3333 에서 장치 를 제공하려는 경우 다음 행을/etc/ser2net.conf

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

구성 파일을 작성한 후 두 번째 PC에서 실행하여 ser2net을 시작하십시오.

ser2net

또는 (이미 실행중인 경우 아래처럼 다시 시작하십시오)

/etc/init.d/ser2net restart

여기서 중요한 것은 remctl 옵션입니다. 클라이언트 쪽 (다이어그램에서 첫 번째 PC)이 장치에 연결하고 직렬 연결 옵션을 자유롭게 선택할 수 있습니다. 이 방법으로 직렬 통신은 데이터 수집 작업 공간 관점에서 완전히 투명하다고 생각합니다. 자세한 내용은 여기를 참조하십시오 .

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

(socat이 없으면 sudo apt-get install socat)

마지막으로 첫 번째 PC의 터미널에서 socattcp 포트에서 수신 대기하는 프록시 직렬 포트를 만듭니다.

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

이 예에서 ip=<2nd-PC-IP-address>그리고 port=3333(또는 /etc/ser2net.conf두 번째 PC에서 설정할 때 선택한 것 ).

4 단계 : MyProxySerialPort에 연결

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

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


매우 자세한 답변 +1
Eduard Florinescu

1

심볼릭 링크를 사용하는 리눅스 커널에 / 디바이스 / 버스 / USB / BUS_ID / DEV_ID/ 디바이스 / 숯 / 전공 : MINOR의 socat 인해 부적절한 IOCTL 오차 열리지 이러한 장치를 할 수있다!
따라서이 방법은 USB 장치에서 직접 작동하지 않는 것 같습니다.

나는 더 가까운 구현이지만 이전 커널에서만 지원되는 usbip 을 시도 했습니다 .

내 솔루션은 pcsc-lite를 통해 연결된 카드 리더에 관한 것이기 때문에 libpcsclite 클라이언트에 환경 변수를 사용하는 것이 더 나은 솔루션이었습니다 .

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

이 방법으로 다른 유닉스 도메인 소켓을 지정할 수 있습니다. 그리고 이것은 socat을 사용하여 원격 호스트의 카드 리더 소켓으로 전달 될 수 있습니다 :

호스트에서 이것을 실행하여 카드 판독기를 교체하십시오.

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

1
안녕하십니까 :). 이것은 흥미로운 정보이지만 /dev/ttyUSB0PCSCLITE를 사용하지 않는 에 대한 질문 또는 전력 분석기와는 관련이 없습니다. 이 정보를 게시하려면 별도의 질문으로하는 것이 좋습니다. 즉각적인 후속 답변이있는 주제별 질문을 게시 할 수 있습니다.
sourcejedi

3
나는 그것을 시도했고 관련 정보는 제안 된 답변이 효과가 없다는 것입니다! 이 정보를 공유해야한다고 생각합니다. 나머지는 실제로 직접 관련이 없지만 관련 문제에 대한 다른 접근 방식을 제공합니다.
UV

이것이 :경로 의 성격 때문 일까요? socat 매뉴얼 페이지의 "ADDRESS SPECIFICATIONS"섹션에는 문자를 이스케이프 처리하는 방법에 대한 단락이 있습니다 (v1.5.0 이상).
David Knipe

흥미로운 점이지만, 프로젝트는 더 이상 확인할 수없는 통조림입니다 ​​: (
UV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.