从 Windows 驱动程序转储编解码器初始化和工作谓词的工具

3 篇文章 0 订阅
2 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值