使用命名管道模拟VMware虚拟机上的串行端口(Linux主机和客户端)

使用命名管道模拟VMware虚拟机上的串行端口(Linux主机和客户端)

尝试编写一个 Python 程序来创建模拟数据流并通过命名管道将其提供给 VMware 虚拟机。主机正在运行 Ubuntu 11.10 和 VMware Player 5.0.0。虚拟机正在运行 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)

$ cat /tmp/gpsd2NMEA
235959

  • VMware .vmx 文件中定义的串行端口:

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

  • 测试虚拟机中的串口是否正在接收数据

$ cat /dev/ttyS0

$ minicom -D /dev/ttyS0

$ stty -F /dev/ttyS0 cs8 -parenb -cstopb 115200
$ echo < /dev/ttyS0

  • 这些都不显示来自 python 程序的任何数据。

相关内容