配置 KVM 显卡直通,无法读取 vBIOS ROM

2019-09-21 22:27:12 +08:00
 Menci

正确配置 vfio-pci 并移除 i915 模块后添加 -device vfio-pci,host=00:02.0 启动虚拟机,报错:

qemu-system-x86_64: vfio-pci: Cannot read device rom at 0000:00:02.0
Device option ROM contents are probably invalid (check dmesg).
Skip option ROM probe with rombar=0, or load from file with romfile=

dmesg 的错误信息:

[ 1271.531853] vfio-pci 0000:00:02.0: enabling device (0400 -> 0403)
[ 1271.639246] vfio_ecap_init: 0000:00:02.0 hiding ecap 0x1b@0x100
[ 1272.865197] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff

添加 rombar=0 参数后虚拟机可启动,但显卡直通不工作。按照一些英文资料中的说法,在显卡在主机上工作时,dump 显卡的 vBIOS ROM:

# cd /sys/bus/pci/devices/0000\:00\:02.0
# echo 1 > rom
# cat rom > /tmp/rom
cat: rom: Input/output error

此时 dmesg 的输出与上述类似。搜索了这些错误信息后发现,又多例使用 UEFI 引导无法读取,但使用 Legacy 引导成功读取的例子,但我的机器并不支持 Legacy 引导。如何解决?

显卡型号是 HD520。

6385 次点击
所在节点    Linux
5 条回复
geekvcn
2019-09-22 09:21:13 +08:00
内核启动参数,GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
内核模块 /etc/modules 加上
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
显卡驱动全部加到黑名单(提前开好 ssh 等远程连接):
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u
剩下的就是常规操作,确定设备 ID,设置直通,UEFI 下核显不支持,没戏,核显 vbios 写在主板 BIOS 里面的
geekvcn
2019-09-22 09:24:28 +08:00
但我的机器并不支持 Legacy 引导。如何解决?别折腾了,直接用 virtio-gpu (有性能损耗仅限基础使用),或者买张独显
py2ex
2019-09-22 10:58:44 +08:00
买张独显
danchleo
2019-09-22 13:05:26 +08:00
集显用 intel-gt 吧,独显把 vbios 导出来,其余动作和一楼说的一样的,最好系统是 uefi 引导的
okudayukiko0
2019-09-22 13:28:57 +08:00
集顯的 Video BIOS 是儲存在主板 BIOS 裡的,用 UEFITool 打開主板 BIOS,把 GOP(Graphics Output Protocol 縮寫)模塊提取出來,這就是 UEFI Video Driver,QEMU 可以用命令列 Load OpROM。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX