如何实现Hyper-V虚拟机从宿主机访问COM端口?
Hyper-V虚拟机直通宿主机COM端口解决方案
方案一:命名管道映射宿主机COM口
1. 配置虚拟机串口
- 关闭目标Win10虚拟机,打开Hyper-V管理器,右键虚拟机→设置
- 在硬件栏添加/选择串口,勾选启用,选择命名管道
- 输入管道路径:
\\.\pipe\HostCOM3(替换COM3为宿主机上串口设备的实际端口号) - 选择该端是服务器,点击确定保存
2. 宿主机转发COM口数据到管道
宿主机需要将指定COM口的数据转发到上述命名管道,可使用PowerShell脚本实现:
# 匹配你的设备参数修改波特率、校验位等 $serialPort = New-Object System.IO.Ports.SerialPort COM3, 9600, None, 8, One $pipe = New-Object System.IO.Pipes.NamedPipeServerStream "HostCOM3", "Duplex" $serialPort.Open() $pipe.WaitForConnection() while ($true) { # 从串口读数据写入管道 if ($serialPort.BytesToRead -gt 0) { $data = $serialPort.ReadExisting() $writer = New-Object System.IO.StreamWriter $pipe $writer.Write($data) $writer.Flush() } # 从管道读数据写入串口 if ($pipe.IsConnected -and $pipe.CanRead) { $reader = New-Object System.IO.StreamReader $pipe $data = $reader.ReadToEnd() $serialPort.Write($data) } }
- 以管理员身份运行该脚本,确保宿主机上没有其他程序占用目标COM口
3. 虚拟机端使用
启动虚拟机,打开设备管理器即可看到对应串口(如COM1),你的QT应用直接访问该端口即可实现与宿主机串口设备的通信
方案二:直接USB直通(更简便)
若Hyper-V启用了增强会话模式,可直接分配USB串口设备给虚拟机:
- 启动虚拟机并进入系统,点击Hyper-V窗口顶部操作→插入USB设备
- 选中你的串口设备,虚拟机将直接接管该设备,设备管理器会自动识别出对应的COM端口,无需额外配置
排查要点
- 确认宿主机目标COM口未被其他进程占用
- 命名管道路径在宿主机和虚拟机配置中完全一致
- 转发脚本需管理员权限运行,否则无法访问串口或创建管道
- 增强会话模式需虚拟机安装并更新Hyper-V集成服务
内容的提问来源于stack exchange,提问作者jabroni
相关产品推荐
相关产品推荐

