From 04f09fd352320e2f12f2606d1fe0ef17bf331f43 Mon Sep 17 00:00:00 2001 From: Hayashi Date: Wed, 8 Jul 2026 14:33:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0debian13=E4=B8=8BRX6600?= =?UTF-8?q?=E6=98=BE=E5=8D=A1=E7=9B=B4=E9=80=9A=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Debian13+RX6600显卡直通.md | 617 +++++++++++++++++++++++++++++++++++++ 1 file changed, 617 insertions(+) create mode 100644 Debian13+RX6600显卡直通.md diff --git a/Debian13+RX6600显卡直通.md b/Debian13+RX6600显卡直通.md new file mode 100644 index 0000000..b5d0a44 --- /dev/null +++ b/Debian13+RX6600显卡直通.md @@ -0,0 +1,617 @@ +# Debian KVM / QEMU PCI显卡直通完整记录(RX6600) + +> 环境:Debian 13 + KVM/QEMU + libvirt +> CPU:AMD Ryzen 9 9950X +> 主板:技嘉 X870 小雕 +> 宿主机显示:AMD Granite Ridge 核显 +> 直通设备:ASUS RX6600(Navi23) +> 客户机:Windows 10 +> +> 目标: +> +> * Debian 使用核显输出 +> * RX6600 完整直通给 Windows 10 +> * Windows 使用 AMD 原生驱动 + +--- + +# 一、最终架构 + +``` +AMD Ryzen 9 9950X + +├── 7a:00.0 Granite Ridge 核显 +│ | +│ └── amdgpu +│ | +│ └── Debian宿主机显示 +│ +└── 03:00.0 RX6600 VGA + 03:00.1 RX6600 HDMI Audio + | + └── vfio-pci + | + └── Windows 10 VM +``` + +RX6600 插 HDMI 显卡欺骗器(dummy plug),保证 Windows 初始化显卡。 + +--- + +# 二、开启 IOMMU + +编辑: + +```bash +nano /etc/default/grub +``` + +原: + +```bash +GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_enforce_resources=lax" +``` + +修改: + +```bash +GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt splash acpi_enforce_resources=lax" +``` + +更新: + +```bash +update-grub +``` + +重启。 + +--- + +# 三、确认 IOMMU 工作 + +查看: + +```bash +dmesg | grep -i iommu +``` + +正常: + +``` +AMD-Vi: IOMMU enabled +``` + +查看设备分组: + +```bash +find /sys/kernel/iommu_groups/ -type l +``` + +RX6600: + +```bash +find /sys/kernel/iommu_groups/ -type l | grep "03:00" +``` + +结果: + +``` +03:00.0 +03:00.1 +``` + +说明 GPU 和 HDMI Audio 分离。 + +--- + +# 四、确认显卡信息 + +查看 PCI: + +```bash +lspci +``` + +RX6600: + +``` +03:00.0 VGA controller: +AMD Navi 23 RX6600 + +03:00.1 Audio device: +AMD HDMI Audio +``` + +查看 ID: + +```bash +lspci -nn -s 03:00.0 +``` + +得到: + +``` +1002:73ff +``` + +Audio: + +```bash +lspci -nn -s 03:00.1 +``` + +得到: + +``` +1002:ab28 +``` + +--- + +# 五、临时 VFIO 绑定测试 + +第一次不要急着永久配置。 + +解除宿主机驱动: + +```bash +echo "0000:03:00.0" > /sys/bus/pci/drivers/amdgpu/unbind + +echo "0000:03:00.1" > /sys/bus/pci/drivers/snd_hda_intel/unbind +``` + +绑定 VFIO: + +```bash +echo "1002 73ff" > /sys/bus/pci/drivers/vfio-pci/new_id + +echo "1002 ab28" > /sys/bus/pci/drivers/vfio-pci/new_id +``` + +确认: + +```bash +lspci -k -s 03:00.0 +``` + +应该: + +``` +Kernel driver in use: vfio-pci +``` + +--- + +# 六、libvirt 添加 PCI 设备 + +关闭虚拟机。 + +添加: + +``` +03:00.0 RX6600 VGA + +03:00.1 RX6600 Audio +``` + +注意: + +## 设备顺序非常重要 + +错误: + +``` +03:00.1 Audio +03:00.0 VGA +``` + +可能导致 Windows 无法正确枚举显卡。 + +正确: + +``` +03:00.0 VGA +03:00.1 Audio +``` + +--- + +# 七、检查 QEMU 是否收到设备 + +查看: + +```bash +virsh qemu-monitor-command Win10 --hmp info pci +``` + +应该看到: + +``` +VGA controller: PCI device 1002:73ff + +Audio controller: PCI device 1002:ab28 +``` + +--- + +# 八、转换 Windows 为 UEFI(如果需要) + +使用 OVMF。 + +查看: + +```bash +ls /usr/share/OVMF/ +``` + +Debian 13: + +``` +OVMF_CODE_4M.fd +OVMF_VARS_4M.fd +``` + +XML: + +```xml + + hvm + + /usr/share/OVMF/OVMF_CODE_4M.fd + + + /var/lib/libvirt/qemu/nvram/Win10_VARS.fd + + +``` + +安装系统时如果遇到文件不权限最简单的方案: +如果你使用的是 libvirt/QEMU,它默认启用了 AppArmor 或 SELinux 来限制虚拟机只能访问 /var/lib/libvirt/images 等特定目录。如果你经常把 ISO 放在 /mnt,可以修改 QEMU 的安全配置: +```bash +nano /etc/libvirt/qemu.conf +``` +找到 security_driver 这一行,将其改为: +```bash +security_driver = "none" +``` +保存后重启 libvirt 服务: +```bash +systemctl restart libvirtd +``` + +--- + +# 九、解决 AMD RX6600 Code 43 + +现象: + +第一次启动: + +* Windows识别RX6600 +* 驱动安装成功 + +之后: + +* 重启VM +* 关机再启动 + +出现: + +``` +AMD Radeon RX6600 +Code 43 +``` + +解决: + +--- + +## 1. libvirt隐藏虚拟化信息 + +编辑: + +```bash +virsh edit Win10 +``` + +hyperv中加入: + +```xml + +``` + +--- + +## 2. Windows注册表 + +路径: + +``` +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\ +{4d36e968-e325-11ce-bfc1-08002be10318} +``` + +找到 RX6600 对应项。 + +增加 DWORD: + +``` +EnableMmioSpace +``` + +值: + +``` +1 +``` + +增加 DWORD: + +``` +DisableDynamicPowerManagement +``` + +值: + +``` +1 +``` + +--- + +完成后: + +测试: + +* Windows重启 +* Windows关机后重新启动 +* virsh destroy/start + +均正常。 + +--- + +# 十、永久 VFIO 绑定 + +确认临时测试成功后。 + +创建: + +```bash +nano /etc/modprobe.d/vfio.conf +``` + +内容: + +```text +options vfio-pci ids=1002:73ff,1002:ab28 +``` + +更新: + +```bash +update-initramfs -u +``` + +重启。 + +确认: + +```bash +lspci -k -s 03:00.0 +``` + +结果: + +``` +Kernel driver in use: vfio-pci +``` + +--- + +# 十一、最终验证 + +RX6600: + +```bash +lspci -k -s 03:00.0 +``` + +结果: + +``` +Kernel driver in use: vfio-pci +``` + +核显: + +```bash +lspci -k -s 7a:00.0 +``` + +结果: + +``` +Kernel driver in use: amdgpu +``` + +说明: + +* RX6600 已完全脱离 Debian +* 核显继续负责宿主机显示 + +--- + +# 十二、经验总结 + +## 1. Code 43 不一定代表直通失败 + +判断顺序: + +1. 看 IOMMU group +2. 看 VFIO绑定 +3. 看 QEMU PCI设备 +4. 看 Windows枚举 +5. 最后处理驱动兼容 + +--- + +## 2. AMD显卡直通重点 + +* VGA function 要优先于 Audio function +* 需要考虑虚拟化隐藏 +* 可能需要关闭动态电源管理 +* dummy plug 很有帮助 + +--- + +## 3. 排障原则 + +不要同时修改: + +* BIOS +* GRUB +* VFIO +* XML +* Windows注册表 + +一次只改一个变量。 + +--- + +# 当前最终状态 + +✅ Debian 13 +✅ KVM/QEMU +✅ RX6600 PCI直通 +✅ Windows 10 AMD驱动 +✅ VM重启正常 +✅ VM关机启动正常 +✅ Debian继续使用9950X核显输出 + + +## 附1. 删除SCSI控制器 + +### 操作步骤 + +1. 停止虚拟机 + +```bash +virsh destroy Win10 +``` + +2. 编辑虚拟机配置 + +```bash +virsh edit Win10 +``` + +3. 在XML配置文件中找到SCSI控制器部分,通常如下所示: + +```xml + +
+ +``` + +4. 删除整个``标签块 +5. 保存并退出编辑器 + +### 注意事项 + +- 删除前请确认没有磁盘使用SCSI控制器 +- 如果有磁盘使用SCSI,需要先将磁盘改为使用virtio或IDE控制器 +- 这个仅针对设备管理器还有scsi控制感叹号的情况,不删除也不影响使用,纯粹强迫症可以删除 + +# 附2. 删除Virtio虚拟显卡 + +## 操作步骤 + +1. 在XML配置文件中找到Virtio显卡部分: + +```xml +