Windows

GPU 直通適用於 UEFI 韌體,但不適用於 Windows iso

  • June 16, 2020

我正在嘗試使用直通圖形設置虛擬機。我能夠讓 UEFI shell 的直通工作,但不是官方的 Windows 安裝程序。我可以讓 Windows 安裝程序工作,但只能使用模擬圖形

這會在 QEMU 視窗中啟動 Windows 安裝程序:

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-vga qxl

這也會在 QEMU 視窗中啟動 Windows 安裝程序(仍然沒有直通)

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 

但是,如果我指定 UEFI 韌體的路徑,我會在連接到我的直通影片卡的顯示器和 QEMU 視窗中獲得 Tiano slpash 螢幕,然後是 UEFI shell。

sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 

為什麼只有在沒有 UEFI 文件的情況下才能進行直通?或者,為什麼指定 UEFI 文件會阻止我啟動 Windows?

編輯:嘗試下載不同版本的 Windows(2018 年 4 月而不是 10 月),同樣的問題。

編輯:嘗試清除並重新安裝 OVMF,但沒有運氣。

編輯:我可以通過在 shell 中鍵入“exit”進入啟動管理器,但選擇可用的 DVD 驅動器(和所有其他選項)會立即退回到啟動管理器。

編輯:跑這個:

-name TESTVM,process=TESTVM \
-drive file=/media/big-tank-8TB/OSISOS/Windows/Win10_1803_English_x64.iso,index=1,media=cdrom  \
-drive file=/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso,index=2,media=cdrom \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd 

當我得到 uefi shell 時,我輸入“exit”進入啟動管理器。在啟動管理器中,選擇可用的 DVD 驅動器會立即退回到啟動管理器。

然後我通過 Boot Maintenance Manager > Boot Options > Add boot option 添加了另一個 DVD 驅動器,然後在 Boot Manager 菜單中選擇了它。 我選擇的引導條目.

這給了我一個非常簡短的“按任意鍵從 CD 啟動”。如果我足夠快,它會啟動到 Windows 安裝程序,但只能在 QEMU 視窗中。連接到直通卡的螢幕是黑色的,帶有一個簡單的游標,而不是像 UEFI/Boot Manager 那樣鏡像。

編輯:我正在嘗試通過 NVIDIA GTX1070。Mobo 是華擎 x399 Taichi,CPU 是 Threadripper 1950X。作業系統是安裝了 XFCE 的 Ubuntu Server。

編輯:如果我繼續安裝,QEMU 視窗中仍然有 Windows,並且直通卡上只有一個 TianoCore 閃屏。如果我轉到設備管理器,Windows 會看到該卡,但由於某種原因它被停止了。 錯誤 43

編輯:我嘗試使用這些說明來擺脫程式碼 43,但無​​濟於事。為了嘗試這個,我使用了 virt-install 而不是 qemu-system,這樣做時沒有 TianoCore 閃屏。但是當我進入 Windows 時仍然是程式碼 43。

編輯:使用 dmesg 來檢查記憶體預留錯誤,如此處所述。沒有找到。編輯:同樣從上面的連結,使用 ROM 解析器並確認存在“類型 3 (EFI)”

你已經在正確的軌道上。GPU Passthrough 並不完美,特別是如果它是 NVidia 卡(您沒有提到 NVidia 或 AMD)。在 Qemu 視窗上完成設置。確保 Windows 機器已連接到 Internet,並讓 Windows Update 為您安裝圖形驅動程序。當您回來時,您應該會看到第二台顯示器,如果沒有,請重新啟動。然後我通常會移除 spice/vnc 控制台,只連接 GPU 監視器。讓 GPU Passthrough 正常工作就是反複試驗。

其他要嘗試的事情:

  • 在沒有 GPU 直通的情況下安裝 Windows,然後嘗試直通 GPU。
  • 通過 NVidia_drivers.exe 安裝驅動程序
  • 通過 Windows 更新安裝驅動程序
  • BIOS 與 UEFI
  • Q35 與 i440fx

注意:程式碼 43 是與 NVidia 相關的已知錯誤,與 NVidia 驅動程序檢查它們是否在 VM 中執行有關。NVidia 銷售專門用於在 VM 環境中執行的卡,並試圖阻止在 VM 中安裝消費級卡的驅動程序。您需要確保在 domain.xml 中使用以下內容

<kvm>
<hidden state='on'/>
</kvm>

有關範例,請參閱https://passthroughpo.st/apply-error-43-workaround/和其他資源。

這是我的配置的螢幕截圖:

QEMU GPU 通道設置

這是我的 domain.xml 的“相關”部分,如果你願意,我可以分享整個內容,但它有一堆不必要的東西。

 <os>
   <type arch='x86_64' machine='pc-i440fx-2.10'>hvm</type>
   <loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
   <nvram>/var/lib/libvirt/qemu/nvram/Windows10_VARS.fd</nvram>
   <boot dev='hd'/>
 </os>
 <features>
   <acpi/>
   <apic/>
   <kvm>
     <hidden state='on'/>
   </kvm>
   <vmport state='off'/>
 </features>
 <clock offset='localtime'>
   <timer name='rtc' tickpolicy='catchup'/>
   <timer name='pit' tickpolicy='delay'/>
   <timer name='hpet' present='no'/>
 </clock>

引用自:https://unix.stackexchange.com/questions/478129