在虚拟机里配置虚拟串口,核心就一句话:把宿主机上的串口资源(物理串口或虚拟串口对)映射进虚拟机的串行端口,然后像操作本机串口一样去做通信调试。
做嵌入式开发、工控测试的朋友经常会遇到这种场景:笔记本没有九针DB9接口,手头项目又要跑串口协议,只能在虚拟机上跑一套服务端,宿主机跑一套客户端来联调,虚拟串口就是解决这类问题的钥匙。
虚拟机下虚拟串口配置的两种主流方案
行业共识认为,虚拟机下配置虚拟串口,首先要分清你手里有什么资源,没有物理串口,就靠软件虚拟串口对;有真实外设,就直接映射物理串口。
宿主机虚拟串口对 + 虚拟机映射
这种方案适合完全没有物理串口的电脑,也是最常用的调试手段。
过程不复杂,核心是三步:
- 在宿主机安装虚拟串口工具,比如VSPD(Virtual Serial Port Driver)或开源的com0com。
- 用工具创建一对互联的虚拟串口,比如生成COM5和COM6,数据从COM5进去,从COM6出来。
- 在虚拟机设置里添加一个串行端口,把它映射到COM5上,再在虚拟机内部打开对应的COM口。
这样宿主机上的串口助手打开COM6,虚拟机里的程序打开COM1(映射后客户机看到的串口),两边就打通了一条双向数据通道。
物理串口直通虚拟机
如果你想调试一块真实的开发板或PLC,宿主机又有物理串口,那就用直通模式。
操作是在虚拟机设置里添加串口,选择物理串行端口,指定宿主机的COM口,虚拟机启动后直接独占这个串口设备,不需要额外的虚拟串口对,好处是实时性更好,坏处是宿主机这边再打开同一个COM口就会冲突,所以只能给一台虚拟机用。
VMware虚拟串口映射端口怎么设置?
VMware Workstation 的串口设置藏在“虚拟机设置”里,配置逻辑很直观,下面分开说管道映射和物理串口映射。
使用命名管道连接宿主机和虚拟机
命名管道(Named Pipe)是VMware里最灵活的虚拟串口连接方式,适合两台虚拟机之间或宿主机与虚拟机之间的通信。
操作路径如下:
-

关闭虚拟机。 在VMware Workstation主界面打开“虚拟机”菜单,选择“设置”。
- 添加串行端口。 在虚拟机设置窗口底部点击“添加设备”,选择“串行端口”,然后点击完成。
- 选择连接模式。 在右侧面板里,连接选择“使用命名管道”。
- 填写管道名称。 比如Windows宿主机填
\\.\pipe\com_1,如果是Linux宿主机可以填/tmp/com_1。 - 设置端口方向。 一端选“这是服务器”,另一端选“这是客户端”,两端对应好。
- 勾选“打开电源时连接”。 然后启动虚拟机。
虚拟机起来后,在客户机系统里打开串口终端,连接新增的COM口,宿主机这一侧如果要用工具访问管道,用指定名称连接同一管道即可。
直接将物理串口映射给虚拟机
如果你的宿主机有真实串口,并且这个串口没有被其他程序占用,可以这样设置:
- 在VMware“虚拟机设置”里点击“添加设备” -> “串行端口”。
- 右侧选择“使用物理串行端口”。
- 下拉菜单里选宿主机的串口号,比如COM1。
- 勾选“打开电源时连接”。
启动虚拟机后,客户机系统会直接多出一个串口设备,这个方式最适合调试真实硬件,因为宿主机没有模拟层转换,数据直接从物理引脚进虚拟机。
VirtualBox下虚拟串口配置与通信测试
VirtualBox的串口配置和VMware思路一致,但入口和选项略有不同,它支持“主机管道”和“主机设备”两种模式。
图形界面配置主机设备模式
假设你在宿主机用VSPD创建了一对虚拟串口COM7和COM8,希望虚拟机映射到COM7,宿主机程序使用COM8,具体操作如下:
- 在VirtualBox主界面选中虚拟机,点击“设置”。
- 左侧选“串口”,右侧勾选“启用串行端口”。
- 串口编号保持默认的COM1,端口模式选“主机设备”。
- 端口/设备路径填写
\\.\COM7(Windows宿主机)或/dev/ttyS0(Linux宿主机)。 - 点击确定保存。

启动虚拟机后,客户机系统里会看到一个标准串口设备,通常也是COM1,宿主机上的串口助手打开COM8,两端就能通信了。
命令行配置VirtualBox串口
如果你需要批量部署虚拟机,用命令更直接,关闭虚拟机后在宿主机终端执行:
VBoxManage modifyvm "你的虚拟机名" --uart1 0x3F8 VBoxManage modifyvm "你的虚拟机名" --uartmode1 hostpipe \\.\pipe\vboxcom
第一条命令给虚拟机添加UART1,第二条命令将UART1绑定到主机管道,这种方式适合Linux管理员,省略了反复点击界面的过程。
通信测试的完整闭环
无论用哪种模式,验证是否打通只需一组动作:
- 宿主机侧用串口助手打开虚拟串口对的一端(比如COM8)。
- 虚拟内打开终端工具连接对应串口,波特率统一设为115200。
- 宿主机发送一串测试数据,虚拟机内能看到内容,说明通路正确。
- 反向再发一次,虚拟机发数据宿主机能收到,即双向通信成功。
如果数据没出来,优先排查两边的串口号是否对应,以及端口模式是否匹配。
虚拟串口通信验证常见问题排查
虚拟串口配置本身不难,但实际联调时容易踩坑,下面的问题都是实际环境里高频遇到的:
虚拟机里看不到新加的串口设备
- 先检查虚拟机设置中串口是否已启用,是否勾选了“打开电源时连接”。
- 在Windows客户机里打开设备管理器,看端口列表有没有新的COM号。
- Linux客户机里执行
dmesg | grep tty查看串口设备节点。
串口被占用,打不开
多数情况下是宿主机上的虚拟串口工具或其他程序已经打开了同一个COM口,虚拟串口对的两端只能各被一个进程占用,所以需要关闭多余的程序,或者换一个新的串口对重新映射。
收发数据全是乱码
这个原因最直接:两端串口参数不一致。波特率、数据位、停止位、校验位必须完全一致,流控模式也要匹配,把两端都固定为8N1(8位数据位,无校验,1位停止位),可以减少一个变量。

数据偶尔丢包或停顿
使用命名管道模式时,如果虚拟机内程序没有及时读取串口缓冲区,数据就会在管道里积压,可以降低波特率,或在宿主机侧调整虚拟串口工具的缓冲大小,直通物理串口很少出现这类延迟,所以对实时性要求高的场景,优先用直通方案。
下表整理了VMware和VirtualBox在串口配置上的差异,方便按需参考:
| 配置项 | VMware | VirtualBox |
|---|---|---|
| 添加入口 | 虚拟机设置 -> 添加设备 | 设置 -> 串口 |
| 命名管道模式 | 支持 | 支持(主机管道) |
| 物理串口模式 | 支持 | 支持(主机设备) |
| 管道路径示例 | \.\pipe\com_1 | \.\pipe\vboxcom |
| 适合场景 | 灵活,支持双向管道服务 | 轻量,适合单机映射 |
关于虚拟机下虚拟串口配置的常见问题
虚拟串口和物理串口通信有什么区别?
虚拟串口是软件在操作系统层面模拟出来的串口设备,数据不经过真实硬件引脚,因此没有电平转换和线缆连接的问题,物理串口则相反,数据由真实芯片发出,抗干扰和实时性更强,对应用层来说,两者的API接口完全一致,串口程序无需修改就能使用。
虚拟串口配置好了,虚拟机里还是连不上怎么办?
先确认宿主机串口没有被占用,然后检查虚拟机串口设置里的端口模式是否与宿主机匹配,如果用的是管道模式,确保宿主机和虚拟机两端一个选“服务器”另一个选“客户端”,最后看客户机设备管理器或Linux的/dev/ttyS节点,确认系统确实枚举出了串口。
VirtualBox下配置虚拟串口后通信乱码,应该怎么处理?
先统一两端的波特率、数据位、校验位和停止位,再检查流控模式,如果仍乱码,换成“主机设备”模式并映射到虚拟串口对,而不是用主机管道,同时降低波特率尝试,因为管道模式的缓冲机制在高速传输下容易导致数据错位。