让虚拟机访问您计算机的物理串口:详细指南
串口(COM口)虽然不再是主流接口,但在工业控制、嵌入式开发、设备调试、老旧设备连接等领域仍然不可或缺,当您需要在虚拟机(VM)环境中操作这些依赖串口的设备或软件时,如何让虚拟机识别并使用宿主计算机(Host)上的物理串口就成了关键问题,本文将详细介绍在不同主流虚拟机平台(VMware, VirtualBox, Hyper-V)上实现这一目标的方法、注意事项以及常见问题排查。
核心原理:串口资源的“传递”
虚拟机本身是运行在宿主操作系统之上的软件环境,默认情况下无法直接访问宿主机的底层硬件资源,包括串口,要让虚拟机使用物理串口,需要虚拟机管理程序(Hypervisor)提供一种机制,将宿主机的串口资源“传递”或“重定向”给虚拟机使用,主要实现方式有:
- 直接映射/物理串口直通: 虚拟机管理程序直接将宿主机的物理串口硬件(如主板上的COM口或PCI/PCIe串口卡)分配给指定的虚拟机,该虚拟机获得对串口的独占访问权,宿主机和其他虚拟机在分配期间无法使用该串口,这是性能最好、最直接的方式。
- 命名管道/套接字重定向: 虚拟机管理程序创建一个虚拟的通道(如Windows命名管道或Unix域套接字),一端连接到宿主机的物理串口(由宿主机上的一个进程或服务管理),另一端“呈现”给虚拟机,让虚拟机以为自己在使用一个本地串口,这种方式允许多个虚拟机(或宿主机)通过中间层共享同一个物理串口(通常需要特殊软件支持),但可能引入轻微延迟。
- USB转串口适配器直通: 如果物理串口设备是通过USB转串口适配器连接的,那么可以将整个USB设备直接传递给虚拟机,虚拟机将识别到一个新的串口(通常是COM3或更高,或Linux下的
/dev/ttyUSBx
),这个串口就对应着宿主机上的USB转串口适配器,这是最常见且相对简单的方式。
主流虚拟机平台配置方法
重要前提:
- 确认宿主机物理串口工作正常(设备管理器中无感叹号,能连接实际设备通信)。
- 对于USB转串口适配器,确保宿主机已安装正确的驱动程序。
- 关闭需要使用该串口的宿主机程序。
- 虚拟机必须处于关机状态 进行配置更改(除USB设备热插拔外)。
VMware Workstation / Player
-
物理串口直通 (推荐)
- 关闭目标虚拟机。
- 打开虚拟机设置 (
VM > Settings
)。 - 点击
添加
(Add...
)。 - 选择
串行端口
(Serial Port
) >下一步
(Next
)。 - 选择
使用物理串行端口
(Use physical serial port
)。 - 在
物理串行端口
(Physical serial port
) 下拉菜单中,选择宿主机上对应的物理串口(如COM1
,COM2
)。 - 关键步骤: 在
连接方式
(Connection
) 下,务必选择轮询时连接
(Connect at power on
) 以确保启动时连接。 - 选择虚拟设备在客户机操作系统(Guest OS)中呈现的模式(通常保持默认
自动检测
/Auto detect
)。 - 点击
完成
(Finish
) >确定
(OK
)。 - 启动虚拟机,在客户机操作系统中,检查设备管理器(Windows)或
dmesg | grep ttyS
/ls /dev/ttyS*
(Linux)是否出现新的串口设备(如COM1
in Windows,/dev/ttyS0
in Linux),此端口即对应宿主机的物理串口。
-
命名管道 (高级/共享场景)
- 步骤1-4同上。
- 选择
输出到命名管道
(Output to named pipe
)。 - 设置管道名称(如
\.pipevmware_com1
)。Windows宿主机注意路径格式。 - 选择管道模式(通常是
服务器
/This end is the server
和另一端是应用程序
/The other end is an application
)。 - 勾选
轮询时连接
(Connect at power on
)。 - 完成设置并启动虚拟机。
- 在宿主机上,需要使用一个能连接命名管道并绑定到物理串口的程序(如
com0com
配置的虚拟串口对、socat
工具或专用串口服务器软件)来桥接管道和物理串口,虚拟机内的应用则连接其看到的虚拟串口。
-
USB转串口适配器直通 (最常用)
- 确保USB转串口适配器已插入宿主机并被正确识别。
- 启动虚拟机(无需关机)。
- 点击VMware菜单:
虚拟机
(VM
) >可移动设备
(Removable Devices
) > 找到您的USB转串口适配器(通常包含芯片型号如Prolific
,FTDI
,Silicon Labs
,CH340
等) > 点击连接
(Connect
) 或与虚拟机连接
(Connect to Virtual Machine
)。 - 虚拟机将立即识别到新的USB设备,并自动安装驱动程序(或提示安装),之后在客户机设备管理器中会出现新的串口(COMx 或 /dev/ttyUSBx)。
Oracle VirtualBox
-
物理串口直通
- 关闭目标虚拟机。
- 打开虚拟机设置 (
Settings
)。 - 进入
串口
(Serial Ports
) 选项卡。 - 勾选
启用串口
(Enable Serial Port
)。 端口编号
(Port Number
):选择要使用的虚拟串口号(如COM1
)。端口模式
(Port Mode
):选择主机设备
(Host Device
)。路径/地址
(Path/Address
):在下拉菜单或输入框中指定宿主机的物理串口设备:- Windows:
COM1
,COM2
等。 - Linux/macOS:
/dev/ttyS0
,/dev/ttyS1
(主板原生串口),/dev/ttyUSB0
(USB转串口,但更推荐用下面的USB直通) 等。注意权限!
- Windows:
- 启动虚拟机,客户机中将看到对应虚拟串口号(如COM1)映射到宿主机的物理串口。
-
原始文件/设备 (类似命名管道,适用于Unix域套接字)
- 步骤1-5同上。
端口模式
(Port Mode
):选择原始文件
(Raw File
) (用于文件) 或TCP
(用于网络套接字,较少用于串口重定向)。- 指定文件路径(如
/tmp/vbox_com1
)或TCP端口/IP地址。 - 同样需要在宿主机用工具(如
socat
)将指定的文件/套接字与物理串口绑定。
-
USB转串口适配器直通 (推荐)
- 确保USB转串口适配器已插入宿主机并被正确识别。
- 安装 VirtualBox 扩展包 (Oracle VM VirtualBox Extension Pack) 以获得完整的USB 2.0/3.0支持。
- 打开虚拟机设置 >
USB
选项卡。 - 点击
添加USB设备筛选器
图标(带 的USB插头),从列表中选择您的USB转串口适配器(根据Vendor/Product ID或名称)。建议勾选筛选器属性中的制造商
和产品ID
以确保精确匹配。 - 启动虚拟机,VirtualBox 会自动将匹配的USB设备传递给虚拟机(状态栏USB图标变绿或提示已连接),客户机操作系统将识别并安装驱动,出现新的串口设备。
Microsoft Hyper-V
-
命名管道 (主要方式)
- 关闭目标虚拟机。
- 打开 Hyper-V 管理器。
- 右键单击目标虚拟机 >
设置
(Settings
)。 - 在
硬件
部分,点击添加硬件
(Add Hardware
)。 - 选择
旧版串行端口
(Legacy Serial Port
) >添加
(Add
)。 - 在
连接
(Connection
) 部分:- 选择
命名管道
(Named pipe
)。 - 输入管道名称,格式为
\.pipe<YourPipeName>
(\.pipehv_com1
)。
- 选择
- 点击
应用
(Apply
) /确定
(OK
)。 - 启动虚拟机,客户机(通常是Windows)会看到一个标准的COM端口(如COM1)。
- 关键:在宿主机上,需要使用一个程序将命名管道连接到物理串口。 常用工具是
com0com
(创建虚拟串口对):- 安装
com0com
。 - 使用其命令行工具或
setupc
GUI 创建一个虚拟串口对(如CNCA0 <-> CNCB0
)。 - 使用
hub4com
(包含在com0com
包中) 或其他串口工具(如socat
)将其中一个虚拟串口(如\.CNCB0
)绑定到物理串口(如COM2
),并将另一个虚拟串口(如\.CNCA0
)连接到Hyper-V创建的命名管道(\.pipehv_com1
),这样数据流就通过管道 <-> CNCA0 <-> CNCB0 <-> 物理COM2
传递。
- 安装
-
USB转串口适配器直通
- Hyper-V 本身不直接支持将 单个 USB设备传递给虚拟机(第二代VM),主要方式是通过:
- USB over Network 软件: 在宿主机安装服务端软件(如 VirtualHere, FlexiHub, USB Network Gate),在虚拟机内安装客户端软件,这种方式通过网络传输USB数据,性能取决于网络,可能有延迟或需要付费。
- PCIe Passthrough (仅限特定硬件和Windows Server Hyper-V): 如果串口是PCIe扩展卡,且宿主机支持 SR-IOV/IOMMU,可以将整个PCIe设备直通给虚拟机,这对USB控制器(包含USB转串口)同样适用,但配置复杂,且该USB控制器上的所有设备都会被直通给同一个虚拟机。不适用于常见的单个USB转串口适配器直通。
- Hyper-V 本身不直接支持将 单个 USB设备传递给虚拟机(第二代VM),主要方式是通过:
重要注意事项与最佳实践
- 独占访问: 物理串口直通和USB设备直通都是独占的,一旦分配给虚拟机,宿主机和其他虚拟机在分配期间无法访问该串口,确保宿主机上没有程序(包括设备管理器“端口”的打开状态)占用该串口。
- 权限 (Linux/macOS宿主): 在Linux或macOS宿主机上进行物理串口直通时,运行VirtualBox/VMware的用户(或
vboxusers
组)必须对物理串口设备文件(如/dev/ttyS0
,/dev/ttyUSB0
)有读写权限,可能需要修改udev
规则或使用chmod
/chown
。 - USB转串口适配器兼容性: 选择主流芯片(FTDI, Prolific, Silicon Labs, CH340)的适配器,兼容性较好,驱动易获取,避免使用非常冷门或驱动有问题的芯片。
- 客户机操作系统驱动: 确保虚拟机内的操作系统安装了正确的串口驱动程序,对于USB转串口直通,客户机需要安装对应芯片的驱动(Windows通常能自动安装,Linux内核通常已包含)。
- 性能: 物理直通性能最好,命名管道/USB over Network 会引入一定延迟,对极高波特率或严格时序要求的场景可能不理想。
- 稳定性: 避免在虚拟机运行时在宿主机上热插拔被直通的物理串口(尤其是主板原生COM口)或USB转串口适配器(除非使用USB热插拔功能),这可能导致虚拟机不稳定或串口失效,需要操作时,最好先断开虚拟机对设备的连接(对于USB)或关闭虚拟机(对于物理串口)。
- 测试: 配置完成后,务必在虚拟机内使用串口调试工具(如PuTTY, Tera Term, Minicom,
screen
)进行实际通信测试,验证连接是否成功、数据收发是否正常。 - 替代方案考虑: 如果串口设备支持网络连接(如带网口的串口服务器),或者应用软件支持网络Socket通信,优先考虑通过网络连接,通常比虚拟机串口重定向更简单、稳定且易于共享。
常见问题排查 (Troubleshooting)
- 虚拟机内看不到串口:
- 确认虚拟机配置已启用并正确设置(端口号、管道名、设备路径)。
- 确认虚拟机已安装串口驱动(检查设备管理器/
dmesg
)。 - 对于USB直通:确认USB筛选器设置正确且已连接;检查VirtualBox扩展包是否安装;宿主机USB驱动是否正常;尝试在虚拟机运行时手动连接USB设备。
- 对于物理直通:确认宿主机串口物理存在且未被占用;检查权限(Linux/macOS)。
- 能识别串口但无法通信:
- 检查两端设置: 虚拟机内和实际串口设备(或宿主机桥接程序)的波特率、数据位、停止位、校验位、流控设置必须完全一致。
- 确认物理连接线缆完好,设备已上电。
- 尝试在宿主机上直接用串口工具连接物理设备,验证宿主机端是否正常。
- 对于命名管道方式:确认宿主机上的桥接程序(如
hub4com
,socat
)正在运行且配置正确(绑定了正确的管道名和物理串口)。 - 尝试降低波特率测试。
- 连接不稳定/数据错误:
- 检查是否有资源冲突(特别是老式ISA串口,现代PCIe/USB较少)。
- 检查线缆质量、长度和干扰(串口易受干扰)。
- 尝试更换USB端口(避免使用USB Hub,特别是无源Hub)。
- 对于命名管道/USB over Network,可能是延迟或性能瓶颈导致,考虑改用物理直通或USB直通。
- USB设备无法连接/断开:
- 确保安装了VirtualBox扩展包(VirtualBox)。
- 检查宿主机USB控制器驱动。
- 尝试不同的USB端口(USB 2.0端口通常比3.0兼容性更好)。
- 关闭虚拟机中不必要的其他USB设备。
让虚拟机使用物理串口是完全可行的,关键在于理解虚拟机管理程序提供的资源传递机制(物理直通、命名管道、USB直通),并根据您的具体环境(宿主机OS、虚拟机平台、串口类型)选择最合适的方法,对于大多数用户,使用USB转串口适配器并通过虚拟机平台的USB直通功能是最简单、最通用的解决方案,配置时务必注意独占性、权限、驱动和参数匹配,遇到问题时,按照排查步骤逐步检查物理连接、宿主机配置、虚拟机设置和客户机驱动,掌握了这些方法,您就能在虚拟化环境中无缝地操作那些依赖串口的宝贵设备和应用了。
引用与资源说明
- VMware 官方文档: 在 VMware 官网搜索 “Serial Port Configuration in VMware Workstation” 或 “Configuring Serial Ports in VMware Workstation Player” 获取最新官方指南。
- Oracle VirtualBox 手册: 参阅 VirtualBox 官方手册中 “Serial Ports” 章节 (通常链接为)。
- Microsoft Hyper-V 文档: 在 Microsoft Docs 搜索 “Configure COM Ports for Hyper-V Virtual Machines” 获取命名管道配置说明。
- com0com 项目: 访问 SourceForge 上的 com0com 项目页 (https://sourceforge.net/projects/com0com/) 获取该虚拟串口工具。
- socat 工具: 在各大 Linux 发行版仓库或 macOS (Homebrew) 中安装
socat
,或访问其官网 (http://www.dest-unreach.org/socat/)。 - USB 芯片厂商驱动: 根据需要访问 FTDI (https://www.ftdichip.com/Drivers.htm)、Prolific (https://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41)、Silicon Labs (https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) 等官网下载最新驱动程序。
(注:具体网址可能随时间变化,建议通过搜索引擎查找官方最新文档链接)
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/26786.html