必须开启iommu支持,否则gpu直通失败;第一步在bios/uefi中启用intel vt-d或amd iommu,第二步用dmesg | grep -i iommu验证内核识别,第三步添加intel_iommu=on或amd_iommu=on等内核参数并重启,第四步加载vfio-pci驱动并黑名单原驱动,第五步通过virsh nodedev-list确认设备绑定vfio。

要在麒麟OS中实现GPU、网卡等PCI设备直通至虚拟机,必须开启硬件级IOMMU支持,否则VFIO驱动无法隔离设备,直通将失败或导致系统不稳定。
第一步:在BIOS/UEFI中启用IOMMU硬件开关
这一步不可跳过,且必须在重启后立即操作。不同主板进入方式不同,常见为开机时狂按Del或F2键;华为服务器多为F10,浪潮部分机型需按ESC再选Setup。
进入后切换到Advanced → System Agent Configuration → Graphics Configuration(Intel平台)或Advanced → AMD IOMMU(AMD平台),找到以下任一选项并设为Enabled:
【Intel VT-d】(Intel CPU)或【AMD IOMMU】(AMD CPU)。
注意:该选项常与“Intel Virtualization Technology”分属不同子菜单,不要混淆。关闭Secure Boot可避免后续内核参数冲突。
设置完成后按F10保存退出,系统自动重启。
第二步:验证IOMMU是否被Linux内核识别
终端中执行命令:dmesg | grep -i iommu。
若输出中含“IOMMU enabled”或“AMD-Vi: IOMMU performance counters supported”,说明固件已生效且内核已启用。
若无任何输出,或仅显示“Disabled”,说明BIOS设置未保存、选项名称识别错误(如误启了“Intel VT-x”却漏掉“VT-d”),或当前CPU型号不支持(如部分低功耗赛扬、奔腾G系列无VT-d)。
第三步:强制启用IOMMU内核参数(关键补救)
方法一:临时启用(重启失效)
执行:sudo grubby --update-kernel=ALL --args="intel_iommu=on iommu=pt"(Intel平台)或sudo grubby --update-kernel=ALL --args="amd_iommu=on iommu=pt"(AMD平台)。
方法二:永久写入启动配置
编辑/etc/default/grub,在GRUB_CMDLINE_LINUX行末尾添加对应参数,例如:
GRUB_CMDLINE_LINUX="... intel_iommu=on iommu=pt"。
保存后运行sudo update-grub并重启。
【必须重启才能生效】,仅重载内核模块无效。
第四步:加载VFIO驱动并绑定PCI设备
① 执行sudo modprobe vfio-pci加载驱动。
② 查看待直通设备的BDF地址:lspci -nn,记下显卡或网卡的地址,如0b:00.0。
③ 确认该设备未被nouveau/nvidia或igb/ixgbe等原生驱动占用:lspci -k -s 0b:00.0,若Kernel driver in use显示非vfio-pci,则需黑名单原驱动。
④ 创建/etc/modprobe.d/vfio.conf,写入:
blacklist nouveaublacklist nvidiaoptions vfio-pci ids=10de:2484,10de:228b(替换为你的设备厂商ID:设备ID,用lspci -nn | grep "NVIDIA"查)。
⑤ 更新initramfs:sudo update-initramfs -u。
第五步:验证设备是否成功归属VFIO
执行virsh nodedev-list --cap pci,找到对应BDF设备,如pci_0000_0b_00_0。
再执行virsh nodedev-dumpxml pci_0000_0b_00_0,检查输出中<driver></driver>字段是否为vfio-pci。
若仍是pci-stub或空值,说明黑名单未生效或initramfs未更新,需重新执行第四步⑤并重启。











