QemuDumpHDAVerbs
黑苹果声卡疑难杂症之特殊处理技巧
用于从 Windows 驱动程序转储音频编解码器初始化和工作谓词的工具
1.CPU 必须支持虚拟化扩展(VT-x 代表英特尔)
CPU 必须支持定向 I/O(英特尔的 VT-d,通常称为 IOMMU)
主板必须支持 VT-x 和 VT-d(或 AMD 等效项)。
2.如果你不想担心 IOMMU 分组,你的 CPU 应该完全支持 ACS。
3.下载Ubuntu 20.10 并创建可启动的闪存驱动器(对于Windows,我建议使用rufus ),不要忘记关闭安全启动。
4.安装并更新软件包 # sudo apt update && sudo apt upgrade -y
5.下载具有ACS支持的自定义修补的预构建内核(在发布时是5.10.4),它允许您将设备逐个传递到VM。
没有必要构建它,只需下载deb数据包即可。
6. 用这个命令 sudo dpkg -i *.deb
安装新内核,然后重新启动。
7.确保使用新内核引导,在 grub 引导时选择选择高级选项,并确保主引导选项是
后缀为 -5.10.4-acso
的内核
8.通过使用# lspci -nn
命令来确定声卡的参数
例如 05:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller [1022:15e3]
00:03.0 Audio device [0403]: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller [8086:0c0c] (rev 06)
00:1b.0 Audio device [0403]: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller [8086:8c20] (rev 05)
提及地址 (在本例中左侧部分 -> `05:00.6`) 和型号 (在右侧部分 -> `1022:15e3`)
9.如果您有多个声卡,则还需要其中的这些数字。
10.通过编辑 GRUB 来编辑内核引导选项 # sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction vfio-pci.ids=1022:15e3"
vfio-pci.ids 是逗号分隔的 4 个十六进制数字对 - 声卡的型号。amd_iommu或intel_iommu取决于您的 CPU。
11.现在是时候检查我们是否正确设置它了。更新 GRUB # sudo update-grub
并重新启动。
再一次,使用 -acs 后缀引导到内核非常重要,如上面第 7 点所述。
12.检查您的声卡是否是绑定到特定 IOMMU 组的唯一设备。
#for dp in $(find /sys/kernel/iommu_groups/*/devices/*); do ploc=$(basename $dp | sed 's/0000://'); igrp=$(echo $dp | awk -F/ '{print $5}'); dinfo=$(lspci -nn | grep -E "^$ploc"); echo "[IOMMU $igrp] $dinfo" ; done
示例输出
[IOMMU 20] 05:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller [1022:15e3]
[IOMMU 2] 00:01.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge [1022:1634]
[IOMMU 3] 00:01.3 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge [1022:1634]
[IOMMU 4] 00:02.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
[IOMMU 5] 00:02.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge [1022:1634]
[IOMMU 6] 00:08.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge [1022:1632]
[IOMMU 7] 00:08.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
[IOMMU 8] 00:08.2 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus [1022:1635]
[IOMMU 9] 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller [1022:790b] (rev 51)
[IOMMU 9] 00:14.3 ISA bridge [0601]: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge [1022:790e] (rev 51)
第一行是我们正在寻找的。如果操作正确,并且您的系统支持它,则声卡将是
IOMMU 组的唯一成员(在本例中为 [IOMMU 20])。
如果声卡IOMMU组中有多个其他设备的成员,则必须禁用其他设备或将其添加到 vfio-pci.id 列表中
,但这将不在本指南中介绍。
13.现在我们准备设置Qemu。获取他的源码 # git clone https://git.qemu.org/git/qemu.git --recurse-submodules
14.从此存储库应用 vfio.patch。将补丁复制到您刚刚克隆的 qemu git 根文件夹 # git apply vfio.patch
15.安装依赖 # sudo apt install build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev libnfs-dev libiscsi-dev ninja-build
16.配置
# ./configure
–enable-trace-backends=log
–target-list=x86_64-softmmu
17.编译和安装 # sudo make -j$(nproc)
# sudo make install
这应该安装qemu-system-x86_64和其他bins。
18.现在,我们已准备好设置 VM。首先使用这个 #qemu-img create -f qcow2 win.img 20G
命令创建 VM 磁盘映像
19.下载Windows安装ISO映像并将其与新创建的磁盘映像放在一起。
20.像往常一样启动 vm 并安装 Windows #qemu-system-x86_64 -enable-kvm -hda win.img -cdrom Windows10_x64_en-us_21286.iso -m 4G -smp 4
在某些硬件上,它会启动vnc服务器,您将必须打开remmina并通过输入输出中显示的IP地址连接到它
21.安装后,关闭 VM。
22.通过在主机参数中设置卡地址来编辑 startvm.sh 脚本。
qemu-system-x86_64 -enable-kvm -M q35 -m 2G -boot d win.img -device vfio-pci,host=05:00.6 -vga std -smp 8 -monitor stdio
23.我们已准备就绪 😃 启动 VM #sudo ./startvm.sh > log.txt