在采用OVMF(UEFI)启动的虚拟机,若host linux以UEFI模式启动并完成直通GPU的初始化,则会造成虚拟机启动失败并宕掉host linux。
解决办法:
1.调整主板BIOS
此项与各主板厂商BIOS设置项开放程度有关。
若有多个GPU设备,可以设置不直通的显卡为primary video card。
2.若所有GPU均需直通给虚拟机,或只有一个GPU
方法一:尝试开启CSM,并disable video rom,这会导致之后POST及HOST主机启动黑屏无显示,并有POST报警。
方法二:设置linux cmdline,禁掉内核framebuffer。
GRUB_CMDLINE_LINUX_DEFAULT="video=efifb:off nomodeset" ///追加至末尾,uefi启动方式
GRUB_CMDLINE_LINUX_DEFAULT="video=vesafb:off nomodeset" ///追加至末尾,传统BIOS启动方式
在设置linux cmdline,并更新grub,重启之后,启动虚拟机后屏幕黑屏,内核日志中vfio报GPU rom not found错误。
需要提取GPU vbios rom,并在libvirt xml中指定rom文件
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
<rom bar='on' file='/path/to/rom/file/gpu.rom'/> ///添加GPU rom文件
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0' multifunction='on'/>
</hostdev>
提取GPU vbios rom文件
linux系统方式
预置条件:必须开启CSM兼容模式,并以legacy方式启动系统,UEFI不可用。可下载centos等安装镜像,制作U盘启动。
提取bios文件的显卡必须作为主显示设备并接显示器。即提取intel集成显卡接主板显示输出,独显接独显输出。
若未按以上操作,则会出现设备文件夹内无rom文件,或者提取时报IO error。
cd /sys/bus/pci/devices/0000:01:00.0/ ///lspci查询GPU所在位置
echo 1 > rom
cat rom > /usr/share/kvm/vbios.bin
echo 0 > rom
windows系统方式
显卡rom是存放在注册表中的,打开注册表,搜索vbios,可找到多个路径,仔细比对,其中的二进制数据即rom,下载HxD程序https://mh-nexus.de/en/hxd/,新建文件并将该二进制数据粘贴保存即可。
参考链接:https://forums.laptopvideo2go.com/topic/32103-how-to-grab-a-notebooks-vbios-that-is-not-supported-by-nvflash/
注:techpowerup中的bios文件有其他校验数据,不可直接使用,可辅助用来对比提取出的rom文件(nvidia已验证)
提取的bios使用hxd(windows),hexdump(linux)打开后,是以55 aa开头,如下:
00000000 55 aa 80 e9 92 f9 30 30 30 30 30 30 30 30 30 30 |U.....0000000000|
00000010 30 30 c0 30 e9 c9 2f 0e 40 00 f0 0a 30 30 49 42 |00.0../.@...00IB|
00000020 4d 20 56 47 41 20 43 6f 6d 70 61 74 69 62 6c 65 |M VGA Compatible|
00000030 20 42 49 4f 53 2e 20 03 ae 00 be 00 cc 00 8b c0 | BIOS. .........|
00000040 50 43 49 52 86 80 06 04 1c 00 1c 00 03 00 00 03 |PCIR............|