Verwenden einer benannten Pipe zum Simulieren eines seriellen Ports auf einer virtuellen VMware-Maschine (Linux-Host und -Client)

Verwenden einer benannten Pipe zum Simulieren eines seriellen Ports auf einer virtuellen VMware-Maschine (Linux-Host und -Client)

Ich versuche, ein Python-Programm zu schreiben, um einen simulierten Datenstrom zu erstellen und ihn über eine benannte Pipe an eine virtuelle VMware-Maschine weiterzuleiten. Auf dem Host laufen Ubuntu 11.10 und VMware Player 5.0.0. Auf der virtuellen Maschine läuft Ubuntu Netbook 10.04. Ich kann die Pipe auf der lokalen Maschine zum Laufen bringen, aber ich kann die Pipe nicht dazu bringen, Daten über den virtuellen seriellen Port an die Programme weiterzuleiten, die auf der virtuellen Maschine laufen.

  #!/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 ))
  • Testen Sie, ob das Python-Programm auf dem Hostcomputer funktioniert (zeigt 235959 an, wenn Daten durch die Pipe geleitet werden)

$ cat /tmp/gpsd2NMEA
235959

  • Serieller Port wie in der VMware .vmx-Datei definiert:

serial0.present = "WAHR"
serial0.startConnected = "WAHR"
serial0.fileType = "pipe"
serial0.fileName = "/tmp/gpsd2NMEA"
serial0.pipe.endPoint = "client"
serial0.autodetect = "FALSCH"
serial0.tryNoRxLoss = "WAHR"
serial0.yieldOnMsrRead = "WAHR"

  • Testen Sie, ob der serielle Port in der VM Daten empfängt

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

  • Keines davon zeigt Daten aus dem Python-Programm an.

verwandte Informationen