我们已经花时间讲解了如何在虚拟机中访问 COM 端口(你可以在这里找到这篇文章。虽然 Serial to Ethernet Connector 是在 Hyper-V 串口直通中使用 COM 端口的绝佳解决方案,但也值得了解一下其他一些将 COM 端口添加到 Hyper-V 串口的方法—我们将在下文介绍。
如何在 Hyper-V 中访问串行端口
如果您需要连接到虚拟机的串口,您将需要串口重定向器。按照以下步骤了解如何使用此工具,并使用它访问虚拟端口:
1. 在虚拟机和主机操作系统上都获取 Serial to Ethernet Connector。
2. 首先在虚拟机中打开应用。打开“连接”菜单并选择“新建服务器连接”
3. 填写你将要共享的端口的必要信息,包括其端口号以及用于连接它的 TCP 端口。
注意:勾选复选框以使端口虚拟化。
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 端口选项。
原因在于,无论是否有可用的串行端口,Gen-2 Hyper-V 管理器从不显示 COM 端口。
下面我们将一窥 PowerShell 怎么说:
注意 PowerShell 如何显示两个可用的 COM 端口?但是,如果你打开来宾计算机的设备管理器,VM 的列表中不会显示任何 COM 端口。
查看下面的示例(使用 COM1)在虚拟机运行时为 COM 端口配置管道路径:
如前所述,在检查来宾机器的设备管理器时,不会显示 COM1—但一旦虚拟机关闭并重新启动,所需的 COM 端口现在将会从列表中可用(见下文。
对于那些有内核调试经验的人来说,剩下的过程相当简单且直观—只有一个小的例外,特定于第 2 代虚拟机(更具体地说,是使用安全启动的基于 UEFI 的计算机。
通过 msconfig,我们已在 COM1 上为虚拟机启用了内核调试。但是,当我们点击 OK 后,会出现以下错误消息:
为什么? 因为 Window 的策略规定安全启动与内核调试不兼容。这意味着用户应关闭虚拟机,然后在固件设置中禁用安全启动。
- 再次使用 msconfig 启用内核调试(这次将会成功)
- 重启 VM;
- 通过父分区的 windbg 连接到该管道;
结论
总之,尽管 Hyper-V 不提供将物理 COM 端口直接直通到虚拟机的功能,但仍可通过命名管道、PowerShell 配置以及专用重定向工具实现串行通信。这些方法使得在 Gen 1 和 Gen 2 虚拟机上都可以完成诸如遗留软件支持、硬件集成或调试等任务。
在无法实现直接串行访问的场景中,串口转以太网连接器可能是一个有效的替代方案。通过将串行数据转换为网络流量,此类设备可让基于 COM 的设备通过 TCP/IP 进行访问,并可轻松与虚拟机共享。结合串口重定向软件,这种方法提供了更高的灵活性,并简化了在虚拟化的 Hyper-V 环境中对物理串行设备的访问。