slackware 系统下利用gpu直通和qemu虚拟win7实战笔记
slackware 系统下利用gpu直通和qemu虚拟win7实战笔记核心要点与挑战关键步骤1. **硬件与BIOS准备**2. **宿主机Slackware配置**3. **隔离显卡**4. **创建与配置虚拟机**5. **安装Windows 7与驱动**6. **关于usb设备的直通**7. **性能调优**重要注意事项附我的qemu启动脚本核心要点与挑战硬件环境z590-e gaming wifi主板intel i7 11700k cpurtx 5060显卡(dp接口)插在主板上离CPU最近的pcie插槽bios中显示为PEG作为宿主机显卡gtx 1650显卡hdmi接口插在主板上第二个pcie插槽bios中显示为pciegskill 32G内存pd32m显示器。软件环境slackware current更新到2026.7.13qemu 11.0.2.理论基础GPU直通的核心是PCIe直通PCIe Passthrough通过VFIOVirtual Function I/O 框架让虚拟机VM直接、独占访问物理硬件。QEMU 11.0.2 对此有良好的支持。关键难点IOMMU分组你的GTX 1650必须位于一个独立的IOMMU分组中。如果与其它设备如声卡、USB控制器在同一组直通将失败。NVIDIA的“壁垒”NVIDIA的消费级显卡驱动如GTX 1650会检测是否运行在虚拟机中如果检测到可能会抛出Code 43错误并禁用显卡。这是NVIDIA人为设置的限制需要一些特殊的配置如隐藏KVM虚拟机特征来绕过。Windows 7的兼容性Windows 7是一个较老的操作系统对UEFIOVMF和现代硬件的支持不如Windows 10/11完善可能需要更多手动调整。关键步骤1.硬件与BIOS准备1.1. 进入主板BIOS启用Intel VT-dIntel或AMD IOMMUAMD以及虚拟化技术VT-x1.2. 在主板的Advanced\System Agent (SA) Configuration\Graphics Configuration\iGPU Multi-monitor选择Enabled这一步最关键硬件直通成功后再切换到1650显卡的输入源显示器才会有显示否则1650没有初始化即使切换到对应的输入源屏幕上也不会有任何显示。1.3 可选设置Primary Display为PEG(rtx5060显卡所在插槽)。2.宿主机Slackware配置启用IOMMU在启动加载器如LILO或ELILO或grub的内核命令行中添加参数。对于Intel CPU添加intel_iommuon。对于grub启动我原来是menuentry[0] slackware{setroot(hd1,3)linux /boot/vmlinuzroot/dev/nvme0n1p3 ro}添加启用cpu iommu支持修改为menuentry[0] slackware{setroot(hd1,3)#linux /boot/vmlinuz root/dev/nvme0n1p3 ro#启用 cpu iommu支持参数说明#intel_iommuon这是核心参数用于启用 Intel 的 VT-d 功能是显卡直通的前提。#iommupt这是一个优化参数它允许直通设备绕过 IOMMU 转换可以提升直通设备的性能同时降低宿主机 CPU 的开销。linux /boot/vmlinuzroot/dev/nvme0n1p3 rointel_iommuoniommupt}3.隔离显卡阻止宿主机内核加载GTX 1650的驱动如nvidia或nouveau并将其绑定到vfio-pci驱动。Slackware的vfio-bind工具过于老旧在Current版本中已不用。在Current版本中推荐使用driver_override来绑定驱动这是目前最推荐的方法通过直接操作sysfs来指定设备使用的驱动。有两种操作方法以下分别说明。方法一使用driver_override推荐通用性最强具体操作步骤如下3.1.1 查找显卡的PCI地址lspci|grep-invidia输出类似02:00.0 VGA compatible controller: NVIDIA Corporation ...记下前面的02:00.0这就是显卡的PCI地址。同时也要记下同一张卡的HDMI音频设备通常地址为02:00.1它们需要一起直通。3.1.2 获取完整的PCI标识符BDF将上一步的地址转换为完整的“总线:设备.功能”格式通常在前面加上0000:。例如0000:02:00.03.1.3 设置driver_override对显卡及其音频设备分别执行以下命令echovfio-pci|sudotee/sys/bus/pci/devices/0000:02:00.0/driver_overrideechovfio-pci|sudotee/sys/bus/pci/devices/0000:02:00.1/driver_override3.1.4重新绑定设备这一步是让更改生效。# 先解绑当前驱动echo0000:02:00.0|sudotee/sys/bus/pci/devices/0000:02:00.0/driver/unbindecho0000:02:00.1|sudotee/sys/bus/pci/devices/0000:02:00.1/driver/unbind# 再绑定到vfio-pciecho0000:02:00.0|sudotee/sys/bus/pci/drivers/vfio-pci/bindecho0000:02:00.1|sudotee/sys/bus/pci/drivers/vfio-pci/bind3.1.5 验证绑定lspci-k-s02:00.0如果输出显示Kernel driver in use: vfio-pci则表示绑定成功。3.1.6 设置开机自动绑定将上述echo命令写入/etc/rc.d/rc.local使其在系统启动时自动执行。方法二通过modprobe配置备选这种方法通过内核模块参数来指定设备ID但需要防止NVIDIA驱动nvidia或nouveau抢先加载。具体操作步骤如下3.2.1 获取设备IDlspci-nn|grep-invidia输出类似02:00.0 VGA compatible controller [0300]: NVIDIA Corporation ... [10de:1f82]括号里的10de:1f82就是设备IDVendor:Device。3.2.2 配置vfio-pci模块创建或编辑 /etc/modprobe.d/vfio.conf 文件添加以下内容将ids替换为你查到的设备IDoptions vfio-pci ids10de:1f823.2.3 屏蔽NVIDIA驱动为了防止NVIDIA驱动nouveau或nvidia在启动时抢占显卡需要将它们加入黑名单。创建或编辑/etc/modprobe.d/blacklist.conf添加blacklist nouveau blacklist nvidia3.2.4 更新initramfs并重启有三种方法分别叙述如下方法一使用mkinitrd命令通用方法这是最传统和通用的方法适用于所有Slackware版本。核心步骤是使用mkinitrd命令创建一个新的initrd镜像。1 切换到 /boot 目录cd/boot2)执行mkinitrd命令你需要根据你的系统根分区文件系统类型如ext4和内核版本来指定参数。2.1)查看当前内核版本uname-r假设输出为7.1.3。2.3)运行 mkinitrd通用方法使用mkinitrd -c -k 内核版本 -m 文件系统模块命令一个典型命令如下请将7.1.3和ext4替换为你的实际信息mkinitrd-c-k7.1.3-mext4其中-c表示创建一个新的initrd。-k内核版本指定目标内核版本。-m模块名指定根文件系统所需的模块如ext4,xfs,btrfs等。更完整的例子如果你的根分区在/dev/sda3可以更精确地指定mkinitrd-c-k7.1.3-mext4-fext4-r/dev/sda3其中:-f文件系统类型指定根文件系统类型。-r根分区指定根分区设备。执行后新的initrd镜像通常会生成在/boot/initrd.gz方法二使用geninitrd脚本Slackware Current 新方法在较新的 Slackware Current 版本中引入了geninitrd脚本它可以在安装或升级内核包时自动生成initramfs。自动生成当你通过slackpkg或installpkg安装或升级内核时geninitrd会自动运行无需手动干预。1)手动执行你也可以手动执行它来生成 initrdgeninitrd配置geninitrd的行为可以通过/etc/default/geninitrd文件进行配置。例如可以设置AUTO_UPDATE_GRUBtrue来在生成initrd后自动更新GRUB引导配置。2)更新引导加载程序生成新的initrd后必须更新引导加载程序Bootloader的配置否则系统可能无法正常启动。如果使用LILO编辑/etc/lilo.conf确保在对应的内核镜像部分有initrd /boot/initrd.gz这一行。运行lilo命令使更改生效。如果使用GRUB如果你配置了AUTO_UPDATE_GRUBtrue则此步骤会自动完成。否则你需要手动运行update-grub命令。方法三使用dracutdracut一个跨发行版的initramfs生成工具广泛用于Fedora/RHEL系在Slackware中可作为可选包安装。它负责在系统启动时加载必要的内核模块以挂载根文件系统。dracut--hostonly--force/boot/initrd-$(uname-r).img$(uname-r)其中--hostonly核心参数。表示生成“仅适用于当前这台机器”的initramfs。它只会包含当前系统硬件如硬盘控制器、NVMe、根分区文件系统所必需的驱动模块而不会像通用initramfs那样打包所有可能的驱动。优点是体积小、启动极快缺点是如果你将硬盘移到另一台硬件配置完全不同的电脑上将无法启动。--force强制覆盖。如果/boot/下已存在同名的initramfs文件直接覆盖写入不再询问确认。/boot/initrd-$(uname -r).img输出路径和文件名。$(uname -r)会执行并替换为当前内核版本号例如7.1.3最终生成如/boot/initrd-7.1.3.img的文件。$(uname -r)最后这个参数指定了为哪个内核版本生成initramfs。它必须与输出文件名中的内核版本保持一致。注意Slackware默认习惯用.gz后缀而dracut默认输出.img这里明确指定了文件名。这是一条“为当前机器量身定做、强制覆盖”的dracut生成命令在Slackware中虽能用但非原生使用前请确保你配置好了vfio-pci的自动加载并注意不要与geninitrd冲突。3.2.5验证重启后使用lspci -k -s 02:00.0检查驱动是否为vfio-pci。4.创建与配置虚拟机4.1. 使用OVMFUEFI固件 代替传统的SeaBIOS。4.2. 将GTX 1650作为PCIe设备直通给虚拟机。建议保留一个虚拟的VGA显卡作为默认显示将物理显卡作为第二显卡直通方便调试。5.安装Windows 7与驱动在虚拟机内安装Windows 7然后在虚拟的windows7内安装NVIDIA官方驱动。支持win7的官方驱动版本为431.60wget-c--refererhttps://www.nvidia.com/--user-agentMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36https://cn.download.nvidia.com/Windows/431.60/431.60-desktop-win7-64bit-international-whql.exe如果遇到Code 43错误需要在QEMU启动参数中隐藏KVM虚拟机特征。最直接、最干净的方法通过让虚拟机“隐藏”其虚拟化特征来绕过检测。请确保你的-cpu参数包含以下完整参数-cpuhost,kvmoff,hv_relaxed,hv_spinlocks0x1fff,hv_vapic,hv_time,hv_vpindex,hv_runtime,hv_synic,hv_stimer,hv_reset,hv_vendor_idqingyuanzqmu其中kvmoff告诉驱动这不是KVM虚拟机。hv_*模拟Hyper-V环境NVIDIA驱动对其更友好。hv_vendor_id...设置一个假的厂商ID确保是12位字符6.关于usb设备的直通1)usb鼠标的直通将鼠标和键盘的 USB 设备直接分配给虚拟机这样在 GTX 1650 画面上操作时鼠标就完全属于虚拟机了。操作步骤1.1)查看USB设备ID在宿主机终端lsusb1.2)找到你的鼠标例如Bus 001 Device 003: ID 046d:c077 Logitech, Inc. M105 Optical Mouse1.3)在QEMU脚本中添加USB 直通参数-usb-deviceusb-host,hostbus1,hostaddr3或者直接用vendor/product ID-usb-deviceusb-host,vendorid0x046d,productid0xc077这样启动虚拟机后鼠标就直接连到虚拟机了。注意这样宿主机将无法使用该鼠标直到虚拟机关闭或设备被释放。特别提醒鼠标失灵怎么办如果切换到 GTX 1650 后鼠标完全没反应但想回到宿主机操作快捷键切回按CtrlAlt或CtrlAltDel释放鼠标回到宿主机仅限模拟显卡模式。物理切换如果用了USB直通只能通过关闭虚拟机或拔插鼠标来释放。2)usb键盘的直通同usb鼠标一样的方法。3)usb接口的直通同usb鼠标一样的方法。7.性能调优配置CPU引脚pinning、大页内存HugePages等来优化性能。重要注意事项需要双显卡要实现直通通常需要两张显卡一张给宿主机如RTX 5060显卡作为主显卡一张GTX 1650显卡专门直通给虚拟机。否则宿主机将失去图形界面。物理连接顺序很关键在启动虚拟机之前将显示器连接到 GTX 1650 的 HDMI或 DP接口并确保显示器已开机且输入源切换到该端口。不要在虚拟机启动后再插拔线缆某些显卡在初始化时若未检测到显示器会永久禁用输出。这个物理连接顺序可以使用iGPU multi-monitor Enabled来解决。这样开机后显示器先接受dp接口的rtx 5060显卡的输出启动虚拟机后再切换到gtx 1650的输入源(hdmi1)此时屏幕上可以看到虚拟机的输出显示。完整的IOMMU分组GTX 1650的显卡和它的HDMI音频设备通常在同一IOMMU组中必须将两者都绑定否则直通会失败。避免驱动冲突确保在绑定前宿主机没有加载nvidia或nouveau驱动。如果不确定可以先sudo modprobe -r nvidia nouveau卸载它们。虚拟win7直通gpuwin7需要用OVMF_CODE.csm.fd来引导。可以使用DragonFly BSD镜像站文件1.文件名:OVMF_CODE.csm.fd下载链接: https://leaf.dragonflybsd.org/~aly/uefi/OVMF_CODE.csm.fd文件大小 1.9 MB2.文件名OVMF_VARS.fd下载链接https://leaf.dragonflybsd.org/~aly/uefi/OVMF_VARS.fd文件大小128kBqemu启动参数写法-drivefile/media/sda1/qemuVM/OVMF_CODE.csm.fd,ifpflash,formatraw,unit0,readonlyon\-drivefileOVMF_VARS.fd,ifpflash,formatraw,unit1\NVIDIACode 43错误直通后Windows 7虚拟机可能会因NVIDIA驱动检测到虚拟化环境而报错Code 43。这需要在QEMU启动参数中隐藏KVM虚拟机特征来规避。调试与验证如果绑定后遇到问题可以检查内核日志dmesg | grep -i vfio寻找线索。附我的qemu启动脚本#!/bin/bashulimit-lunlimited#1.创建虚拟硬盘qcow2 是推荐格式40G 为大小#qemu-img create -f qcow2 win7.qcow2 60G#2. 安装系统#传统biosmbr安装#qemu-system-x86_64 \# -enable-kvm \# -m 6G \# -rtc baselocaltime,clockhost,driftfixslew \# -smp cores4 \# -drive filewin7.qcow2,ifvirtio \# -cdrom /media/sda1/os/windows/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso \# -drive file/media/sda2/software/Vmachine/qemu/virtio-win-0.1.173.iso,index3,mediacdrom \# -nic user,modelvirtio \# -usbdevice tablet \# -audiodev pa,idaudio0 \# -device intel-hda -device hda-duplex,audiodevaudio0 \# -vga qxl -global qxl-vga.vgamem_mb1024 \# -display gtk,zoom-to-fiton# 现代uefigpt安装#qemu-system-x86_64 \# -enable-kvm \# -m 6G \# -rtc baselocaltime,clockhost,driftfixslew \# -machine typeq35,accelkvm \# -cpu host,kvmoff,hv_relaxed,hv_spinlocks0x1fff,hv_vapic,hv_time \# -smp 4,sockets1,cores4,threads1 \# -drive file/media/sda1/qemuVM/OVMF_CODE.csm.fd,ifpflash,formatraw,unit0,readonlyon \# -drive fileOVMF_VARS.fd,ifpflash,formatraw,unit1 \# -drive filewin7.qcow2,ifvirtio,cachewriteback \# -cdrom /media/sda1/os/windows/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso \# -drive file/media/sda2/software/Vmachine/qemu/virtio-win-0.1.173.iso,index3,mediacdrom \# -boot orderd,menuon \# -nic user,modelvirtio \# -usbdevice tablet \# -device vfio-pci,host02:00.0,multifunctionon,x-vgaon \# -device vfio-pci,host02:00.1 \# -vga std -display gtk# 显卡直通设置## -vga none \# -device virtio-net-pci,netdevnet0 \# -vga qxl \# -display gtk,zoom-to-fiton \# -mem-prealloc -mem-path /dev/hugepages \#3. 安装完成后重启若再次进入安装界面关闭虚拟机并移除命令中的 -cdrom 参数即可# 虚拟显卡qxl正常工作的示例# 设置 PulseAudio 所需的环境变量#export XDG_RUNTIME_DIR/run/user/$(id -u)#export PULSE_SERVERunix:$XDG_RUNTIME_DIR/pulse/native#qemu-system-x86_64 \# -enable-kvm \# -m 6G \# -rtc baselocaltime,clockhost,driftfixslew \# -smp cores4 \# -drive filewin7.qcow2,ifvirtio \# -drive file/media/sda2/software/Vmachine/qemu/virtio-win-0.1.173.iso,index3,mediacdrom \# -nic user,modelvirtio \# -usbdevice tablet \# -audiodev pa,idaudio0 \# -device intel-hda -device hda-duplex,audiodevaudio0 \# -vga qxl -global qxl-vga.vgamem_mb1024 \# -display gtk,zoom-to-fiton# uefi引导显卡直通设置qemu-system-x86_64\-enable-kvm\-m6G\-rtcbaselocaltime,clockhost,driftfixslew\-machinetypeq35,accelkvm\-cpuhost,kvmoff,hv_relaxed,hv_spinlocks0x1fff,hv_vapic,hv_time,hv_vpindex,hv_runtime,hv_synic,hv_stimer,hv_reset,hv_vendor_idqingyuanzqmu\-smp4,sockets1,cores4,threads1\-drivefile/media/sda1/qemuVM/OVMF_CODE.csm.fd,ifpflash,formatraw,unit0,readonlyon\-drivefileOVMF_VARS.fd,ifpflash,formatraw,unit1\-drivefilewin7.qcow2,ifvirtio,cachewriteback\-drivefile/media/sda2/software/Vmachine/qemu/virtio-win-0.1.173.iso,index3,mediacdrom\-drivefile/media/sda2/software/office/office/cn_office_professional_plus_2016_x86_x64_dvd_6969182.iso,index2,mediacdrom\-bootorderc,menuon\-nicuser,modelvirtio\-usbdevicetablet\-devicevfio-pci,host02:00.0,multifunctionon,x-vgaon,romfile/media/sda1/qemuVM/gtx1650.rom\-devicevfio-pci,host02:00.1\-vganone\-deviceusb-host,vendorid0x1532,productid0x007c\-deviceusb-host,vendorid0x1a81,productid0x204b######################################################################## -device usb-host,vendorid0x1532,productid0x007c \ #使用宿主机鼠标使用lsusb获得id# -device usb-host,vendorid0x1a81,productid0x204b \ #使用宿主机键盘使用lsusb获得id# -vga std -display gtk \ #标准虚拟vga显卡# -device vfio-pci,host02:00.0,buspci.1,multifunctionon,x-vgaon,romfile/media/sda1/qemuVM/gtx1650.rom \# -device vfio-pci,host02:00.0,multifunctionon,x-vgaon,romfile/media/sda1/qemuVM/gtx1650.rom \# -device vfio-pci,host02:00.1 \# -drive file/media/sda2/software/office/office/cn_office_professional_plus_2016_x86_x64_dvd_6969182.iso,index2,mediacdrom \#qemu-system-x86_64 \# -enable-kvm \ # 开启 KVM 硬件加速大幅提升性能# -m 4G \ # 分配内存建议2G-4G# -smp cores4 \ # CPU 核心数# -drive filewin7.qcow2,ifvirtio \ # 使用 VirtIO 接口# -cdrom /media/sda1/os/windows/cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso \ # 指定 Win7 ISO 路径# -drive file/media/sda2/software/Vmachine/qemu/virtio-win-0.1.285.iso,index3,mediacdrom \ # 挂载 VirtIO 驱动 ISOindex只能是0,1,2,3在弹出的VirtIO驱动光盘选择框中选择viostor\w7\amd64文件夹# -nic user,modelvirtio \ # VirtIO 网络# -usbdevice tablet \ # 鼠标无缝集成# -vga std # 或 -device VGA,vgamem_mb128# -display gtk,zoom-to-fiton #启用屏幕自动缩放以防在4k屏下出现局部屏幕的情况#########################################################################显卡直通设置示例#qemu-system-x86_64 \# -enable-kvm \# -machine typeq35,accelkvm \# -cpu host,kvmoff,hv_vendor_idnull \# -smp 4,sockets1,cores4,threads1 \# -m 8G \# -bios /usr/share/ovmf/OVMF.fd \# -drive file/path/to/your/disk.qcow2,formatqcow2 \# -vga none \# -device vfio-pci,host02:00.0,multifunctionon,x-vgaon \# -device vfio-pci,host02:00.1 \# -device virtio-net-pci,netdevnet0 \# -netdev user,idnet0#关键参数说明# -enable-kvm: 启用KVM内核加速是获得接近原生性能的基础。########################################################################-rtc baselocaltime,clockhost,driftfixslew #修正虚拟机时间#1. baselocaltime 解决时区混乱# 作用告诉 QEMU虚拟机的硬件时钟RTC使用宿主机本地时间而不是 UTC 时间。# 为什么需要Windows 默认认为硬件时钟存储的是本地时间而 Linux 默认认为是 UTC。如果不加这个参数Windows 7 每次启动都会把 BIOS 时间误认为 UTC导致系统时间显示为“北京时间 8 小时”或者每次关机重启后时间错乱尤其在双系统环境下。#2. clockhost 确保基础精度# 作用让虚拟机的时钟源直接跟随宿主机物理 CPU 的时钟计数器TSC而不是使用 QEMU 模拟的虚拟时钟。# 为什么需要模拟时钟容易受宿主机 CPU 负载影响产生微小偏差而 host 模式能保证虚拟机的时间流逝速度与真实物理时间 1:1 同步是保证时间准确的基础。#3. driftfixslew 平滑修正漂移最关键# 作用当虚拟机时钟因宿主机负载过高、CPU 调度延迟等原因跑慢了发生漂移时采用“缓慢追赶”Slew的方式修正误差而不是“瞬间跳跃”Jump。#为什么需要# Windows 的敏感度Windows 对时间跳变非常敏感。如果时钟突然往回跳或往前猛跳一大截容易触发 W32Time 服务报错、蓝屏BSOD甚至导致 Windows 激活失效认为系统被篡改或网游反作弊系统误判。# “Slew”的优势通过微调时钟走的快慢比如让时钟暂时走快 0.1%用几秒到几分钟的时间慢慢把落后的时间补回来。这个过程对 Windows 系统和上层应用比如你玩的游戏是完全透明的不会产生突兀的卡顿或报错。######################################################################## -machine typeq35: 使用更现代的Q35机器类型它对PCIe设备的支持更好。# -cpu host,kvmoff,hv_vendor_idnull: host让虚拟机CPU特性与宿主机一致。kvmoff和hv_vendor_idnull是NVIDIA显卡常用的隐藏虚拟化特征的方法可避免驱动报错Error 43。# -bios /usr/share/ovmf/OVMF.fd: 必须使用OVMFUEFI固件传统BIOS不支持显卡直通。# -vga none: 禁用QEMU默认的模拟显卡避免冲突。# -device vfio-pci,host02:00.0,multifunctionon,x-vgaon: 这是核心直通命令。# host02:00.0请替换为你的GTX 1650实际的PCI地址。# multifunctionon表示该设备是一个多功能设备的一部分因为显卡通常包含视频和音频两个功能。# x-vgaon将此显卡作为虚拟机的启动显卡对解决黑屏问题很有帮助。# -device vfio-pci,host02:00.1: 直通同一张显卡的音频控制器。你需要用lspci -nn找到它与显卡相邻、功能号function为.1的设备。#操作步骤概览# 1. 获取PCI地址在宿主机上运行 lspci -nn | grep -i vga 和 lspci -nn | grep -i audio找到你的GTX 1650显卡及其音频控制器的地址例如 02:00.0 和 02:00.1。# 2. 绑定vfio-pci驱动为了防止宿主机抢占显卡需要将GTX 1650绑定到vfio-pci驱动。这通常通过配置/etc/modprobe.d/vfio.conf文件并更新initramfs来完成。# 创建或编辑 /etc/modprobe.d/vfio.conf 文件添加以下内容将ID替换为你的# options vfio-pci ids显卡PCI ID,音频设备PCI ID# 更新initramfs命令使用# dracut --hostonly --force /boot/initrd-$(uname -r).img $(uname -r)# 3. 启动虚拟机使用上面的QEMU命令将host后面的地址替换为你实际的PCI地址后启动。# 4. 检查 VFIO 内核模块是否已加载#lsmod | grep vfio#应该看到 vfio_pci、vfio_iommu_type1、vfio_virqfd 等模块。如果没有任何输出则需要手动加载#sudo modprobe vfio-pci#并确保它们在启动时自动加载可以添加到 /etc/modules-load.d/vfio.conf或 /etc/rc.modulesSlackware 常用 /etc/rc.d/rc.modules。#slackware是在文件/etc/rc.d/rc.modules.local里添加#/sbin/modprobe vfio-pci #add vfio module