名前付きパイプを使用して VMware 仮想マシン (Linux ホストとクライアント) 上のシリアル ポートをシミュレートする

名前付きパイプを使用して VMware 仮想マシン (Linux ホストとクライアント) 上のシリアル ポートをシミュレートする

Python プログラムを作成して、シミュレートされたデータ ストリームを作成し、名前付きパイプを介して VMware 仮想マシンにフィードしようとしています。ホストは Ubuntu 11.10 と VMware プレーヤー 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"

  • VMのシリアルポートがデータを受信して​​いるかどうかをテストします

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

  • これらはいずれも Python プログラムからのデータを表示しません。

関連情報