|
|
我查阅了老外的资料
要成功直通核显hd 4600到kvm qemu虚拟机并成功点亮hdmi接口的显示器有i如下要点
1.必须将核显与MEI设备一起直通才能点亮屏幕
2.linux内核vfio 模块必须打补丁
3.使用支持x-igd-opregion的bios 也可以用ovmf
我虚拟机运行的命令如下
echo 8086 0412 > /sys/bus/pci/drivers/vfio-pci/new_id
echo 8086 8cba > /sys/bus/pci/drivers/vfio-pci/new_id
echo 8086 0c0c > /sys/bus/pci/drivers/vfio-pci/new_id
qemu-system-x86_64 -enable-kvm -m 4096 -cpu Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check -machine pc-i440fx-2.12 -pflash efi.fd -pflash efivar.bin -smp 4,cores=2 -device usb-host,vendorid=0x275d,productid=0x0ba6,id=usb0 -device usb-host,vendorid=0x1a2c,productid=0x2d23,id=usb1 -vga none -nographic -usb -device usb-kbd -device usb-mouse -net nic,model=e1000,addr=0x17 -net bridge,br=br0 -device ahci,id=ahci,addr=0x18 -device ide-hd,drive=hd0,bus=ahci.0 -drive id=hd0,file=/dev/sda7,if=none -device vfio-pci,host=00:02.0,addr=0x2,x-igd-opregion=on -device vfio-pci,host=00:16.0,addr=0x16
这个是可选参数,硬件模拟smc -device isa-applesmc,osk='ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc' -smbios type=2
内核需要打补丁
参考这个帖子
https://bbs.archlinux.org/viewtopic.php?id=245593
支持直通的ovmf bios文件
https://github.com/nchevsky/pve-edk2-firmware
核心显卡直通和独立显卡直通其实差不多,只不过需要从驱动上屏蔽i915即可
补丁最关键的地方是这个
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.cindex 054391f30fa8..ec0a25d6b2f1 100644--- a/drivers/vfio/vfio_iommu_type1.c+++ b/drivers/vfio/vfio_iommu_type1.c@@ -1474,6 +1474,10 @@ static int vfio_iommu_type1_attach_group(void *iommu_data, if (ret) goto out_domain; + ret = iommu_map(domain->domain, 0xc4000000u,0xc4000000u, 0xC000000, IOMMU_READ | IOMMU_WRITE);+ if (ret)+ goto out_domain;+ resv_msi = vfio_iommu_has_sw_msi(iommu_group, &resv_msi_base); INIT_LIST_HEAD(&domain->group_list);其实就是给linux内核的drivers/vfio/vfio_iommu_type1.c文件添加三行 ret = iommu_map(domain->domain, 0xc4000000u,0xc4000000u, 0xC000000, IOMMU_READ | IOMMU_WRITE); if (ret) goto out_domain;目的是让虚拟机能够访问0xc4000000开始的内存,长度为0xc000000当然这里的数值不是固定的,由于bios对核心显卡的显存设置的不同,这里的数据有变化查看的办法是命令lspci -xxxx -s 0:2最后一排应该是f1: 00 00 00 00 00 00 00 00 00 00 06 00 18 c0 d5 c4这样子 取c4d5c018的头两个字节 c4000000即可 你可以认为这是核显的显存地址 长度是d0000000-c4000000 有的是c5xxxxxx c7xxxxxx 等 自己变通16进制加减法用计算器就行了
别的补丁愿意打就打一下 哈哈
我用的系统是debian 10.4 内核是4.19.0.118
然而我做完这一切后发现也只是在虚拟机中用mac 10.15.4系统点亮了hdmi接口的显示器,只是点亮
实际上显卡没有驱动3d性能,至少macos的系统托盘不是透明的
现在完全不知道如何开启 虚拟机的显卡3D加速了
各种kext补丁都用了 技术不足了
之前内核补丁,重新编译都ok了
|
|