테스트 대상 장치 (DUT)가 있고 의 데이터를 사용하여 Power Analyzer Datalogger를 사용 하여 전력 사용량을 측정합니다 /dev/ttyUSB0
.
문제는 DUT가 이제 데이터를 수집하는 데 사용 된 워크 스테이션에서 원격이지만, 동일한 네트워크에서 USB를 통해 일종의 USB 프록시 및 ssh로 Power Anlayzer에 직접 연결된 두 번째 PC를 사용해야한다는 것입니다 “프록시”기계의 USB 측정 기계에 일종의 심볼릭 링크를 생성합니다.
1 명 방법을 상기도 주어 세인트 PC 접속 /dev/ttyUSB0
2의 ND 직접 방식으로 연결되고 PC는 1부터 스트림 판독 프로그램 것을 세인트 PC는 그 차이를 알 수없는 것인가?
답변
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
많은 옵션을 지원하므로 조정이 필요할 수 있습니다.
답변
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의 터미널에서 socat
tcp 포트에서 수신 대기하는 프록시 직렬 포트를 만듭니다.
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/
답변
심볼릭 링크를 사용하는 리눅스 커널에 / 디바이스 / 버스 / 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