顯示卡直通去虛擬機點解認唔到/出 Code 43?IOMMU 隔離、驅動綁定同重置排查指南

2026-10-25 | 顯示卡維修 | 21 | HK GPU Fix 編輯部

重點摘要

顯示卡直通虛擬機認唔到或者出 Code 43,多數係主機未放手、群組分唔開或者客機驅動問題。本篇教你逐層排查。

先講明:直通係獨佔,唔係分拆共用

將一張實體顯示卡成張交畀虛擬機獨佔使用,英文叫 PCIe passthrough,中文常叫直通。直通嘅意思係:同一時間,只得一個虛擬機用呢張卡,主機同其他虛擬機用唔到佢。呢一點必須喺動手之前講清楚,因為好多排查白做工,都係由誤解呢個定義開始。

直通唔係 vGPU,唔係 SR-IOV。vGPU 同 SR-IOV 係將一張卡分拆成多個虛擬功能,畀多個虛擬機共用,需要卡本身韌體加驅動支援,唔係所有卡都得,設定亦複雜得多。如果你想要嘅係「一卡多個虛擬機同時用」,你需要嘅係 vGPU 或者 SR-IOV 路線,唔係本篇講嘅直通。本篇全篇只講獨佔式直通,唔好將兩種技術嘅步驟混埋一齊用。

同主機用卡相比,直通多咗兩重交接:主機要先放手,虛擬機先接得住。中間任何一環斷咗,表面症狀都係「認唔到」或者「Code 43」,但成因可以完全唔同。所以排查一定要按層次分:係主機未放手、定係隔離分組問題、定係客機驅動問題,逐層排除,唔好一見 Code 43 就認定係驅動問題。

直通運作嘅四個必要條件

第一,CPU 加主板支援 IOMMU。Intel 叫 VT-d,AMD 叫 AMD-Vi。BIOS 要開咗先得,淨係 CPU 支援而 BIOS 無開,等於無。呢度要分清楚同 #140 嘅分別:#140 講 Thunderbolt DMA 保護用 IOMMU,嗰個係主機保安語境;本篇講 IOMMU 做裝置隔離同 DMA 轉譯,令虛擬機可以直接存取實體裝置,目的唔同。

第二,IOMMU 群組隔離。IOMMU 將 PCIe 裝置按群組劃分,直通要求成個群組一齊交出去。顯示卡通常同佢嘅 HDMI 音訊裝置同組,兩個要一齊直通。如果顯示卡同其他裝置,例如某個 USB 控制器或者 SATA 控制器同組,就要成組一齊交,或者靠主板 ACS 能力分組。唔可以只抽顯示卡出嚟,留低同組其他裝置喺主機,咁樣隔離唔完整,直通唔會成功。

第三,驅動綁定。主機原本用緊嘅顯示驅動要放手,改綁做直通用嘅驅動,Linux KVM 路線就係 vfio-pci,先至交到畀虛擬機。綁定做得唔完整,主機驅動仲捉住張卡,虛擬機就會認唔到卡,或者認到但初始化失敗。

第四,客機正確初始化。虛擬機要用 UEFI 韌體(OVMF)、正確嘅 PCIe 拓撲(Q35 機型係常見做法)、VirtIO 驅動做基礎裝置,顯示卡驅動要喺客機入面裝得啱。任何一層錯,症狀都可能一樣係 Code 43,所以排查要逐層排除。

路線一:Linux KVM/QEMU+VFIO

呢條路線嘅流程大致係:BIOS 開 VT-d 或者 AMD-Vi,核心參數啟用 IOMMU,vfio-pci 綁定顯示卡同佢嘅 HDMI 音訊裝置,經 libvirt 或者 virt-manager 加 PCI 主機裝置入虛擬機,客機入面再裝顯示卡驅動。

KVM 路線有一個常見設定:隱藏 hypervisor 特徵,例如 KVM hidden 同 hypervisor vendor_id,用嚟處理 NVIDIA 客機驅動檢測虛擬化環境嘅問題。呢個設定嘅具體寫法同效果,會隨 QEMU、libvirt 同驅動版本改變,寫作同設定嗰陣要以你實際用緊嘅版本官方文件為準,唔好將某個版本嘅做法當成永恆真理。

KVM 路線排查次序:先確認 BIOS 入面 IOMMU 開咗未,再睇 IOMMU 群組點分,確認顯示卡同 HDMI 音訊係咪同組、群組入面有無其他裝置,再確認 vfio-pci 綁定成功、主機驅動已經放手,最後先入客機查韌體同驅動。跳過主機層直接重裝客機驅動,係最常見嘅白做工。

路線二:Windows Hyper-V DDA

Hyper-V 路線用嘅係 Discrete Device Assignment(DDA),裝置指派機制同指令同 KVM 完全唔同,唔好將 KVM 嘅步驟套落 Hyper-V,或者反過來。DDA 路線入面,常見要處理嘅包括裝置位置路徑同 MMIO 地址空間設定,MMIO 範圍唔夠嗰陣,虛擬機加卡之後可能開唔到,或者裝置認唔到。

DDA 路線排查次序同 KVM 路線嘅邏輯一樣,都係主機層先、綁定層次、客機層後:先確認主機支援同設定、裝置指派狀態,再確認客機驅動同設定。兩條路線共通嘅邏輯係層次,唔同嘅係每層嘅具體指令同設定名,文章分開兩節講,就係為咗避免讀者撈亂。

設定嗰陣同樣要以實際用緊嘅 Hyper-V 版本官方文件為準,唔同版本嘅 DDA 要求同限制可以唔同,舊版本嘅做法未必適用於新版本。

症狀分層診斷

症狀偏向邊一層先查乜
虛擬機一加卡就開唔到主機層BIOS 有無開 VT-d/AMD-Vi、IOMMU 群組隔離係咪完整、主機驅動放咗手未、Hyper-V 路線 MMIO 範圍夠唔夠
虛擬機開到、裝置管理員見到卡但黃色驚嘆號 Code 43客機驅動層客機韌體係咪 UEFI、hypervisor 特徵設定、驅動版本對照、客機驅動係咪裝啱
頭一次用到、虛擬機重啟之後就認唔到,要成部主機重啟先得返重置層個別 AMD 型號嘅重置問題,要按該卡實際情況處理,唔好假設所有 AMD 卡都有
直通之後主機無畫面正常現象張卡已經交咗畀虛擬機,主機自然無咗輸出,要有第二張卡、內顯或者遠端方案先用到主機桌面
虛擬機無卡都開唔到虛擬機本身先喺無卡嘅情況下開到虛擬機,確認基礎虛擬機正常,再加卡,對照可以分開兩種問題

講 Code 43 要講清楚背景:喺直通語境,Code 43 最常見係客機驅動檢測到虛擬化環境而拒絕初始化,歷史上最出名嘅直通問題。新版驅動情況有改善,但唔可以假設所有版本都無問題,要按實際驅動版本講。喺主機用同一張卡可能完全正常,所以 Code 43 唔等於張卡壞咗。動手排查直通之前,應該先喺主機驗證張卡本身正常(見 #106、#148),分開「卡本身問題」同「直通設定問題」。

重置問題要講明範圍:個別 AMD 型號有所謂 reset bug,卡喺虛擬機重啟之後未能乾淨重置,要主機重啟或者用卡專屬嘅 workaround。呢個係個別型號現象,唔係所有 AMD 卡都有,唔好一概而論,亦唔好承諾某個 workaround 一定有效,要以該卡實際情況為準。

主機無畫面嗰一點,值得喺動手之前預先講明:張卡交咗畀虛擬機之後,主機自然無咗呢張卡嘅輸出,唔係整壞咗。動手之前就要準備好第二張卡、內顯,或者遠端桌面方案,否則做到一半主機黑屏,會以為自己整壞咗部機。

直通同無頭運作嘅關係

同 #198 嘅關係要分清楚:#198 講無接顯示器時嘅無頭運作加 Dummy Plug,嗰個係主機語境;直通場景入面,虛擬機用卡嗰陣都可能面對「無顯示器」問題,例如用遠端桌面而唔接實體顯示器。兩篇要互連,但角度唔同,一個係主機無頭,一個係虛擬機直通,唔好將 #198 嘅做法直接當成直通設定。

另外,#200 講擷取卡直通,同本篇嘅顯示卡直通原理相近但裝置唔同,排查層次可以參考,但驅動同設定細節唔可以直接套用。手提電腦 Optimus 或者 MUX 機種(見 #150)直通更加複雜,唔好將桌面機步驟直接套落手提電腦。

改設定之前:備份同還原

改 BIOS 設定、核心參數、驅動綁定之前,一定要講明備份同還原方法。改錯 BIOS 設定可以令主機開唔到機,所以動手之前要記低改過邊啲設定、原本數值係乜,知道點樣還原。主板說明書入面嘅 BIOS 還原方法,例如載入預設值,應該喺動手之前就睇定,唔好等到開唔到機先至搵。

Linux 路線改核心參數之前,記低原本嘅啟動參數;綁定驅動之前,記低原本用緊邊個驅動。Hyper-V 路線改裝置指派之前,記低裝置原本嘅指派狀態。有還原路徑,先至好改,呢個原則適用於兩條路線。

常見誤區

第一,「Code 43 就等於張卡壞咗」。錯。喺直通語境,Code 43 最常見係客機驅動檢測或者設定問題,喺主機用同一張卡可能完全正常。要先喺主機驗證張卡本身正常,先至入直通排查。

第二,「BIOS 開咗 VT-d 或者 AMD-Vi 就等於 IOMMU 正常」。錯。仲要睇群組點分、主機驅動綁定、客機韌體同設定,任何一環漏咗都係認唔到。

第三,「直通之後主機仲可以用呢張卡」。錯。直通係獨佔,同一時間只得一個虛擬機用;要主機同虛擬機同時用,要第二張卡或者行 vGPU、SR-IOV 路線。

第四,「所有卡直通步驟都一樣」。錯。NVIDIA 同 AMD 嘅客機驅動行為唔同,Code 43 係 NVIDIA 客機驅動檢測問題,重置問題個別 AMD 型號較常見;Hyper-V DDA 同 KVM VFIO 步驟唔同;手提電腦機種更加複雜。

第五,「群組入面淨係交顯示卡就得」。錯。同一 IOMMU 群組嘅裝置,通常包括 HDMI 音訊,要一齊交,否則隔離唔完整。

一個實用嘅排查清單

跟住下面嘅次序行一次,可以避免來回兜圈。第一步,喺主機確認張卡本身正常,排除卡本身問題(見 #106、#148)。第二步,確認 BIOS 開咗 VT-d 或者 AMD-Vi,再睇 IOMMU 群組劃分,確認顯示卡同 HDMI 音訊裝置同組,而且群組入面無其他唔應該一齊交出去嘅裝置。第三步,確認主機驅動已經放手,綁定正確,KVM 路線睇 vfio-pci,Hyper-V 路線睇 DDA 指派狀態。第四步,喺無卡嘅情況下開一次虛擬機,確認基礎虛擬機本身開得到,先至加卡。第五步,加卡之後睇客機層:韌體係咪 UEFI、驅動版本啱唔啱、hypervisor 設定有無漏。行到邊一步卡住,問題就好大機會喺嗰一層,唔使成個流程由頭再嚟一次。

幾時應該送檢

如果你已經按層次排查過:主機層確認 IOMMU 開咗、群組分得開、主機驅動放咗手,客機層確認 UEFI 韌體、驅動版本、hypervisor 設定都啱,喺主機用張卡又正常,但直通依然認唔到或者 Code 43,咁就值得進一步檢查,或者送檢睇下係咪卡本身嘅韌體或者硬件層問題。送檢嗰陣帶埋你嘅設定記錄,包括主板型號、BIOS 設定、群組劃分、驅動版本、客機設定,維修人員可以更快定位。

本站檢查收費按三級收費 HK$400–2,800,實際以檢查後報價為準。門市喺石門達利廣場 1209 室,電話 2186 8010,WhatsApp 6558 6806。

常見問題

點解虛擬機裝置管理員見到張卡,但係出 Code 43?

喺直通語境,Code 43 最常見係客機驅動檢測到虛擬化環境而拒絕初始化,或者客機韌體、驅動版本、設定有問題。先確認客機用 UEFI 韌體,再對照驅動版本同 hypervisor 設定,唔好直接認定張卡壞咗。

BIOS 開咗 VT-d,點解都係直通唔到?

BIOS 開咗只係第一步。仲要睇 IOMMU 群組點分、主機驅動綁定、客機韌體同設定,任何一環漏咗都係認唔到。按主機層、綁定層、客機層逐層查,唔好跳級。

直通之後主機黑屏,係咪整壞咗?

唔係。張卡已經交咗畀虛擬機,主機自然無咗呢張卡嘅輸出。動手之前就要準備第二張卡、內顯或者遠端桌面方案,先至用到主機桌面。

直通同 vGPU 有乜分別?

直通係成張卡獨佔畀一個虛擬機;vGPU 或者 SR-IOV 係將一張卡分拆畀多個虛擬機共用,需要卡本身韌體加驅動支援。如果你想要一卡多虛擬機,要行 vGPU、SR-IOV 路線,唔係直通。

KVM 同 Hyper-V DDA 嘅步驟可唔可以互通?

唔可以。兩條路線嘅機制、指令同設定名完全唔同,KVM 用 vfio-pci 綁定,Hyper-V 用 DDA 裝置指派。排查邏輯可以共通,但具體步驟要分開跟,唔好撈亂。

虛擬機重啟之後張卡認唔到,要成部主機重啟先得返,係咩問題?

偏向重置問題,個別 AMD 型號較常見,卡喺虛擬機重啟之後未能乾淨重置。呢個係個別型號現象,唔係所有 AMD 卡都有,要按該卡實際情況處理。

相關文章

相關服務

如果需要顯示輸出維修,可以參考以下服務頁面:

HK GPU Fix 香港顯示卡專業維修,石門安達利廣場 1209 室,沙田,新界,HK。+852 21868010

← 返回 Blog | HK GPU Fix 首頁