Hyper-V 串行端口配置:分步说明

我们已经花时间讲解了如何在虚拟机中访问 COM 端口(你可以在这里找到这篇文章。虽然 Serial to Ethernet Connector 是在 Hyper-V 串口直通中使用 COM 端口的绝佳解决方案,但也值得了解一下其他一些将 COM 端口添加到 Hyper-V 串口的方法—我们将在下文介绍。

如何在 Hyper-V 中访问串行端口

如果您需要连接到虚拟机的串口,您将需要串口重定向器。按照以下步骤了解如何使用此工具,并使用它访问虚拟端口:

1. 在虚拟机和主机操作系统上都获取 Serial to Ethernet Connector

2. 首先在虚拟机中打开应用。打开“连接”菜单并选择“新建服务器连接”

新服务器连接

3. 填写你将要共享的端口的必要信息,包括其端口号以及用于连接它的 TCP 端口。

注意:勾选复选框以使端口虚拟化。

串口转以太网连接器 - 创建服务器COM端口

4. 按下“创建”

5. 现在,在主机上切换到串口转以太网。打开“远程连接”

6. 如果所有内容都已正确设置,虚拟机端口应显示在列表中。选择它。

7. 设置客户端连接选项,例如将用于接收数据的端口。

8. 再次按下“创建”就全部完成了。

视频教程:

如何使用 PipeDream 将串行硬件连接到虚拟机

对于想要将 COM 端口添加到 Hyper-V 串行端口的虚拟机用户来说,PipeDream 是一个理想的选择。这个 Hyper-V 串行端口工具通过托管 Hyper-V 的同一台服务器(即虚拟化主机)运行,弥合了虚拟机与串行端口之间的鸿沟。

PipeDream 通过传输从串行硬件(无论插入 COM 端口的是什么)接收到的数据来工作,并帮助虚拟机识别和访问它(反之亦然)

此外,PipeDream 不需要客户端侧组件在服务器上运行,这使得 Hyper-V 串行支持直通更加便捷。PipeDream 不需要在参与的虚拟机上安装任何内容(设备、软件或其他)从而最大化对旧版操作系统/软件的兼容性,并为 XP(以及更早)操作系统提供可靠支持。

PipeDream 允许来宾虚拟机控制虚拟化主机(或其他机器)上的串口。该工具得以运行归功于 Hyper-V 对命名管道的支持,这意味着通信不需要网络连接。只需在 Hyper-V 中创建一个管道名称,启动 PipeDream 程序后,PipeDream 将连接到来宾虚拟机的串行设备。

免责声明: PipeDream 的 Hyper-V 串口软件与 Microsoft 的 Hyper-V 兼容,但它是与 Microsoft 无任何关联的第三方工具。我们使用“Hyper-V”这一术语并不意味着为 Microsoft Corporation 背书或与其建立关联。

对于拥有第 1 代 Hyper-V 虚拟机的用户

按照下面的分步指南学习如何将 COM 端口添加到 Hyper-V。

1. 运行 Hyper-V 管理器并打开来宾计算机的设置(您要建立的虚拟机)

2. 在新窗口中选择 COM1 或 COM2(位于左侧硬件列表中)

3. 这是一个串行端口,允许虚拟机访问你选择的串行设备(也就是在虚拟机中显示的端口可能与主机的物理串行端口不同)

4. 将名为“PipeDream”的管道连接到来宾的串行端口(通过单击 Named pipe 来执行此操作,并将“PipeDream”输入为管道名称—参见下图作为参考)

5. 对于在远程计算机上使用串行设备的用户,请确保勾选“远程计算机”复选框,并输入该计算机的名称;

6. 点击确定;

管道名称

如何为 Gen-2 虚拟机进行配置

对于运行 Gen-2 虚拟机的用户,上方显示的管道设置无法通过 GUI 进行配置,因此用户必须执行 Powershell 命令。

1. 打开一个 Powershell 会话;

2. 执行 Get-VM;

3. 复制具有所需串行端口的虚拟机名称;

4. 执行 Set-VMComPort -Number < 1 或 2,用于串口 COM1 或 COM2 > -Path \.pipePipeDream

5. 使用 Get-VMComPort 来确认管道已创建(请参见下方显示的截图,此处以名为 “SillyRabbit” 的 VM 作为示例)

确认创建管道

但是第 2 代 VM 没有 COM 端口,对吧…

坦白说,答案是是与否的混合(其中“否”主要集中在默认的 Hyper-V 串口直通能力上。令人兴奋的消息是,这一点是可以调整的!

下面的截图来自一台 Windows 8 虚拟机(具体来说,使用了上一节中创建的介质,其中已添加了基于软件的键盘的驱动程序。

在下面的示例中,你会看到基本的第二代虚拟机的设置缺少 COM 端口选项。

Hyper v 设置

原因在于,无论是否有可用的串行端口,Gen-2 Hyper-V 管理器从不显示 COM 端口。

下面我们将一窥 PowerShell 怎么说:

PowerShell

注意 PowerShell 如何显示两个可用的 COM 端口?但是,如果你打开来宾计算机的设备管理器,VM 的列表中不会显示任何 COM 端口。

查看下面的示例(使用 COM1)在虚拟机运行时为 COM 端口配置管道路径:

配置管道路径

如前所述,在检查来宾机器的设备管理器时,不会显示 COM1—但一旦虚拟机关闭并重新启动,所需的 COM 端口现在将会从列表中可用(见下文。

设备管理器 COM 端口

对于那些有内核调试经验的人来说,剩下的过程相当简单且直观—只有一个小的例外,特定于第 2 代虚拟机(更具体地说,是使用安全启动的基于 UEFI 的计算机。

通过 msconfig,我们已在 COM1 上为虚拟机启用了内核调试。但是,当我们点击 OK 后,会出现以下错误消息:

系统配置

为什么? 因为 Window 的策略规定安全启动与内核调试不兼容。这意味着用户应关闭虚拟机,然后在固件设置中禁用安全启动。

启用安全启动
  1. 再次使用 msconfig 启用内核调试(这次将会成功)
  2. 重启 VM;
  3. 通过父分区的 windbg 连接到该管道;
连接到管道

结论

总之,尽管 Hyper-V 不提供将物理 COM 端口直接直通到虚拟机的功能,但仍可通过命名管道、PowerShell 配置以及专用重定向工具实现串行通信。这些方法使得在 Gen 1 和 Gen 2 虚拟机上都可以完成诸如遗留软件支持、硬件集成或调试等任务。

在无法实现直接串行访问的场景中,串口转以太网连接器可能是一个有效的替代方案。通过将串行数据转换为网络流量,此类设备可让基于 COM 的设备通过 TCP/IP 进行访问,并可轻松与虚拟机共享。结合串口重定向软件,这种方法提供了更高的灵活性,并简化了在虚拟化的 Hyper-V 环境中对物理串行设备的访问。