我們之前已經花時間說明了如何存取虛擬機器中的 COM 連接埠(你可以在這裡找到這篇文章。雖然 Serial to Ethernet Connector 是在 Hyper-V 序列埠直通中使用 COM 連接埠的絕佳解決方案,但也值得看看幾個其他選項來將 COM 連接埠新增至 Hyper-V 序列埠—我們將在下方介紹。
如何在 Hyper-V 中存取序列埠
如果您需要連線到虛擬機器的序列埠,您將需要 Serial Port Redirector。請依照以下步驟了解如何使用此工具,並使用它來存取虛擬連接埠:
1. 取得 Serial to Ethernet Connector,並在虛擬機器與主機作業系統上都安裝。
2. 先在 VM 中開啟應用程式。開啟「Connections」選單並選取「New Server Connection」
3. 填寫你要分享的連接埠所需資訊,包括其編號以及用於連線的 TCP 連接埠。
注意:勾選核取方塊以將連接埠設為虛擬。
4. 按下「建立」
5. 現在,在主機上切換至「Serial to Ethernet」開啟「Remote Connections」
6. 如果一切都設定正確,清單中應該會出現虛擬機器連接埠。選取它。
7. 設定用戶端連線選項,例如用於接收資料的連接埠。
8. 再按一次「建立」就大功告成了。
影片教學:
如何使用 PipeDream 將序列硬體連接到虛擬機器
對於想在 Hyper-V 序列埠中為虛擬機器新增 COM 埠的使用者而言,PipeDream 是理想的選擇。這個 Hyper-V 工具中的序列埠會透過與 Hyper-V(亦即虛擬化主機)同一台託管伺服器運作,彌補虛擬機器與序列埠之間的落差。
PipeDream 的運作方式是傳輸從序列硬體(不論插在 COM 埠上的是什麼)接收到的資料,並協助虛擬機器辨識與存取它(反之亦然)
此外,PipeDream 不需要在伺服器上執行任何用戶端元件,這讓 Hyper-V 序列支援的直通更加便利。PipeDream 不需要在參與的虛擬機器上進行任何安裝(裝置、軟體或其他)因此能最大化對舊版作業系統/軟體的相容性,並為 XP(以及更舊)作業系統提供可靠支援。
PipeDream 允許來賓虛擬機控制虛擬化主機(或其他機器)上的序列埠。此工具仰賴 Hyper-V 的命名管道支援而運作,這表示通訊不需要網路連線。只要在 Hyper-V 中建立一個管道名稱,並在啟動 PipeDream 程式後,PipeDream 就會連線到來賓 VM 的序列裝置。
免責聲明: PipeDream 在 Hyper-V 中的序列埠軟體與 Microsoft 的 Hyper-V 相容,但為第三方工具,與 Microsoft 無任何關聯。我們使用「Hyper-V」一詞並非用以背書或與 Microsoft Corporation 建立任何關係。
針對使用第 1 代 Hyper-V 虛擬機器的使用者
請按照以下逐步指南了解如何將 COM 連接埠新增至 Hyper-V。
1. 執行 Hyper-V 管理員並開啟來賓機器的設定(您要建立的 VM)
2. 從新視窗(位於左側硬體清單)選擇 COM1 或 COM2;
3. 這是允許虛擬機器存取您所選擇的序列裝置的序列埠(又稱:在 VM 中顯示的埠可能與主機的實體序列埠不同)
4. 將名為「PipeDream」的管道連接到來賓的序列埠(請點選 Named pipe,並輸入「PipeDream」作為管道名稱—請參考下方圖片)
5. 對於在遠端電腦上具有序列裝置者,請確保已勾選「遠端電腦」核取方塊,並輸入該機器的名稱;
6. 按一下「確定」
如何為第 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 VM(特別是使用上一節所建立的媒體,其中已加入軟體式鍵盤的驅動程式。
在下面的範例中,你會看到基本的第 2 代虛擬機器設定缺少 COM 埠選項。
原因在於,無論是否有可用的序列埠,Gen-2 Hyper-V 管理員都不會顯示 COM 連接埠。
下面我們來看看 PowerShell 怎麼說:
請注意 PowerShell 如何顯示兩個可用的 COM 連接埠?然而,如果你開啟客體機器的裝置管理員,VM 不會列出任何 COM 連接埠。
請參考下方範例(使用 COM1)在虛擬機器執行期間為 COM 連接埠設定管線路徑:
如前所述,在檢查來賓機器的裝置管理員時,COM1 並未顯示—但一旦將 VM 關機並重新啟動,所需的 COM 連接埠現在就會在清單中提供(見下方)
對於有核心偵錯經驗的人來說,剩下的流程相當簡單且直接—只差一個僅針對第 2 代 VM 的小例外(更精確地說,是使用安全開機的 UEFI 架構電腦。
透過 msconfig,我們已為 VM 在 COM1 上啟用核心除錯。不過,一旦我們按下 OK,就會出現下列錯誤訊息:
為什麼? 因為 Windows 的原則指出,安全開機與核心偵錯不相容。這表示使用者應該先關閉虛擬機器,然後在韌體設定中停用安全開機。
- 再次使用 msconfig 以啟用核心除錯(這次會成功)
- 重新啟動 VM;
- 透過父分割區的 windbg 連線到該管道;
結論
總結來說,雖然 Hyper-V 不提供將實體 COM 連接埠直接直通至虛擬機器,但仍可透過具名管道、PowerShell 設定以及專用的重新導向工具來達成序列通訊。這些方法可用於 Gen 1 與 Gen 2 VM,支援如舊版軟體支援、硬體整合或除錯等工作。
在不適合直接進行序列存取的情境下,Serial to Ethernet Connector 可能是一種有效的替代方案。透過將序列資料轉換為網路流量,此類裝置可讓基於 COM 的設備透過 TCP/IP 存取,並可輕鬆與虛擬機器共享。搭配序列埠重新導向軟體,這種作法能提供更高的彈性,並簡化在虛擬化 Hyper-V 環境中對實體序列裝置的存取。