一.开发背景.
很多嵌入式Linux需要充当下位进行串口通讯,而上位机的程序往往Windows程序.这是一个典型的组合.
这种情况最真实的组合是Windows安装USB转串口驱动,然后用串口线与开发板相连接.但是这个需要带一大堆家伙.
另外一种方法,在windows下安装两台VMWare的虚拟机,一台安装windows,另外一台安装Ubuntu,两个虚拟机用命名管道充当串口来连接.这样可以省掉一大堆硬件,但是同时开两个虚拟机需要高级版本,而且占用资源极大,未必好调试.
最后我找到一种最为简洁方便做法,即在Windows下安装VMWare虚拟机.用windows下的虚拟串口驱动与虚拟机的Ubuntu建立联接.这样不需要任何额外硬件的情况,建立一个完整的Windows+Ubuntu的串口开发环境.这个环境下,windows上位机程序(不需要源码)和ubuntu下程序都认为自己在跟一个真实串口通讯.
二.所需要的软件
首先安装VMMare和VPDS.
在虚拟创建一个ubuntu虚拟机.
并联网安装minicom
sudo apt-get install minicom
2.1 配置VPDS
这个安装好后,桌面会有一个虚拟串口配置工具,打开即用
这里我们把COM1与COM2组合起来.

Paste_Image.png
配置好的样子

Paste_Image.png
用串口工具测试,在COM2发,可以看到COM1收到数据

Paste_Image.png
这样VDPS配置成功
2.2 VMWare配置
关掉虚拟机,在设置里增加串口设备,并选择使用物理串行端口,并选择COM1

Paste_Image.png
注意不知道是我安装是简化版VMware还是VMWare不认VDPS的虚口.在图形界面物理串口列表总是只有一项 "自动选择".无法输入.
最后的解决办法是,直接修改虚拟机的配置文件,即后缀名为vmx的文本文件.
直接加入如下配置(如果有就直接修改),这样重新打开界面才显示COM1已经连接.
serial0.present = "TRUE"
serial0.fileType = "device"
serial0.fileName = "COM1"
而按照映射规则,第一个串口(COM1)会被虚拟机中第一个串口所使用,它对应设备文件是 /dev/ttyS0.因此我们minicom有如下配置
sudo minicom -s

Paste_Image.png
而且COM1又被VDPS连接到COM2上. 这样我们在windows上COM2上发包就会被虚拟机中的/dev/ttyS0所接收.实测即是如此.

Paste_Image.png
这样我们就能在ubuntu下写C程序与windows下的上位机程序通讯了.这里只需一台windows机器就完全搞掂了,开发完了,简单换一个编译器即可移植到ARM-Linux上