명명된 파이프를 사용하여 VMware 가상 머신(Linux 호스트 및 클라이언트)에서 직렬 포트 시뮬레이션

명명된 파이프를 사용하여 VMware 가상 머신(Linux 호스트 및 클라이언트)에서 직렬 포트 시뮬레이션

시뮬레이션된 데이터 스트림을 생성하고 이를 명명된 파이프를 통해 VMware 가상 머신에 공급하는 Python 프로그램을 작성하려고 합니다. 호스트는 Ubuntu 11.10 및 VMware 플레이어 5.0.0을 실행하고 있습니다. Vm은 Ubuntu 넷북 10.04를 실행 중입니다. 로컬 컴퓨터에서 파이프를 작동시킬 수 있지만 가상 직렬 포트를 통해 가상 컴퓨터에서 실행되는 프로그램으로 데이터를 전달하는 파이프를 얻을 수 없습니다.

  #!/usr/bin/python
  import os
  #
  # Create a named pipe that will be used as the serial port on a VMware virtual machine
  SerialPipe = '/tmp/gpsd2NMEA'
  try:
    os.unlink(SerialPipe)
  except:
    pass
  os.mkfifo(SerialPipe)  
  #
  # Open the named pipe
  NMEApipe = os.open(SerialPipe, os.O_RDWR|os.O_NONBLOCK)
  #
  # Write a string to the named pipe
  NMEAtime = "235959"
  os.write(NMEApipe, str( '%s\n' % NMEAtime ))
  • Python 프로그램이 호스트 시스템에서 작동하는지 테스트합니다(데이터가 파이프를 통과하는 경우 235959 표시).

$ 고양이 /tmp/gpsd2NMEA
235959

  • VMware .vmx 파일에 정의된 직렬 포트:

serial0.present = "TRUE"
serial0.startConnected = "TRUE"
serial0.fileType = "파이프"
serial0.fileName = "/tmp/gpsd2NMEA"
serial0.pipe.endPoint = "클라이언트"
serial0.autoDetect = "FALSE"
serial0.tryNoRxLoss = "TRUE"
serial0.yieldOnMsrRead = "TRUE"

  • VM의 직렬 포트가 데이터를 수신하고 있는지 테스트합니다.

$ cat /dev/ttyS0
또는
$ minicom -D /dev/ttyS0
또는
$ stty -F /dev/ttyS0 cs8 -parenb -cstopb 115200
$ echo < /dev/ttyS0

  • 이들 중 어느 것도 Python 프로그램의 데이터를 표시하지 않습니다.

관련 정보