我在 Hyper-V 中将 Linux Mint x64 设置为 Windows 10 桌面上的第 2 代虚拟机。我想将 USB->串行转换器 (FT232RL) 连接到虚拟机,以便可以对嵌入式硬件进行编程和调试。在 Windows 中,FT232RL 显示为“USB 串行端口 (COMx)”,并且运行正常。当我使用 VirtualBox 时,我只需将 COM 端口连接到虚拟机或从虚拟机上断开连接,一切就都正常了。
与第一代虚拟机不同,Hyper-V 中的第二代虚拟机在其设置中不显示 COM 端口/命名管道,因此我不确定如何访问相应的设置。有一篇文章这里(更多细节) 显示了我想要实现的目标,只不过我使用 Linux 而不是 Windows 作为我的客户操作系统。
那么,我该如何进行设置?我已经查看了 Linux 中的 setserial,但到目前为止还没有找到解决方案。
答案1
所以,看起来至少有三种方法可以实现这一点,这是我随着时间的推移发现的。
第一种非常简单,使用远程桌面访问虚拟机,而不是使用 hyper-v 启动器。当然,这需要客户操作系统具有远程桌面服务器,防火墙要打开,并且 IP 地址在主机范围内。使用 RDP,您可以转到显示选项 -> 本地资源/本地设备和资源 -> 更多 -> 选择“端口”。然后正常连接。
此解决方案仅适用于第一代虚拟机,因为它不会在主机操作系统上自行创建命名管道。第一代虚拟机允许用户通过虚拟机设置菜单创建命名管道。第二种解决方案是使用管道。这涉及使用 hyper-v 设置在其中一个 COM 端口上设置命名管道,例如 COM1 上的 MySerialPort(创建命名管道路径:\.\pipe\MySerialPort)。然后在主机操作系统上运行管理员 PS 并发出以下命令:COMpipe.exe -b 115200 -c \\.\COM5 -p \\.\pipe\MySerialPort
其中 COM5 是您要尝试使用的主机操作系统上的 COM 端口。如果一切正常,您应该能够在客户操作系统中使用 COM1 并将其直接映射到主机上的 COM5。根据经验,GLE=5 错误意味着未在客户操作系统中创建命名管道。
第三种解决方案要复杂得多,具体如下:这里(备份链接)。这涉及构建 hub4com 并在客户机和主机操作系统上运行 com0com(也以管理员身份)以及 hub4com 项目的一些其他脚本。
另外,你可以使用以下命令将 COM 端口映射到命名管道(需要由某个应用程序创建)设置VMComPort并使用查看映射获取 VMComPort。这是第二代 Hyper-V VM 所必需的,因为 COM 端口不可见(请参阅第二代常见问题解答)在配置第二代虚拟机时的设置中。