You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:08:22