参考:小破站大神教程 【PVE7 AMD 5700G 核显直通 (iGPU Passthrough)】 https://www.bilibili.com/video/BV11d4y1G7Nk?share_source=copy_web&vd_source=e5f19273decf1e2e712bb024a8e24e75

1. 环境介绍

下面是我成功直通5600g的硬件及软件版本,其他硬件或其他版本软件可能存在其他未知问题,请谨慎操作!
是否能够直通成功和主板有一定关系,源视频使用的是ASRock B550 Phantom Gaming-ITX/ax主板成功直通,其他主板可能直通失败!

1. 硬件相关
  • 主板:华硕 TUF GAMING B550M-PLUS WIFI II
  • CPU: AMD 5600G
  • BIOS版本: 0305
  • 独立显卡:无!
2. 软件相关
  • PVE版本:7.2-7
  • Linux内核版本:Linux 5.15.30-2-pve #1 SMP PVE 5.15.30-3 (Fri, 22 Apr 2022 18:08:27 +0200) x86_64 GNU/Linux

2. 操作步骤

总体的步骤是 修改主板BIOS配置, 修改系统配置, 提取vbios, 设置直通核显, 安装核显驱动, 直通核显成功。

1. 修改主板BIOS配置
  • 开启VT
    SVM设置
  • 开启IOMMU(AUTO就可用所以没有修改,AUTO或者enable均可)
    开启IOMMU
  • 开启CSM
    开启CSM
2. 修改PVE系统配置

请先安装相同版本的PVE系统,其他版本如果存在问题请自行查找。
安装过程比较简单,具体方法请自行百度

1. 修改grub启动参数:

修改文件 /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT 配置:

GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init amd_iommu=on drm.debug=0 kvm_amd.nested=1 kvm.ignore_msrs=1 kvm.report_ignored_msrs=0 pci=assign-busses pcie_acs_override=downstream,multifunction vfio_iommu_type1.allow_unsafe_interrupts=1"

其中必须添加的:

  • iommu=pt 设置iommu为直通模式pass through
  • initcall_blacklist=sysfb_init 屏蔽掉pve7.2的一个bug
  • pcie_acs_override=downstream,multifunction iommu分组补丁
    其他参数之前直通存在问题,修改的一些配置,具体含义未详细了解,去掉是否有影响本人未做尝试。

然后执行update-grub 更新grub

2. 添加驱动黑名单

修改或新增配置文件/etc/modprobe.d/blacklist.conf, 添加内容:

blacklist amdgpu
blacklist snd_hda_intel
3. 添加加载模块

修改或新增配置文件/etc/modules, 添加内容:

vfio 
vfio_iommu_type1 
vfio_pci
vfio_virqfd
4. 获取核显id并绑定核显设备

执行命令:

root@nas:/# lspci -D -nnk | grep VGA
0000:07:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [1002:1638] (rev c9)

也可以直接执行此命令lspci -D -nnk找到包含VGA Controller的设备,记下其IOMMU分组和设备id

请记下命令显示的最前面的数字序号为IOMMU分组 0000:07:00.0;后面中括弧中1002:1638为设备id


修改或新增配置文件/etc/modprobe.d/vfio.conf, 添加内容:

options vfio-pci ids=1002:1638
options vfio-pci disable_idle_d3=1

其中1002:1638为核显设备id,如果已经存在其他直通设备,请使用 , 进行分隔填写多个,如:
options vfio-pci ids=14c3:7961,1002:1638

执行命令: update-initramfs -u -k all
重启机器:reboot

3. 提取vbios
1. 从主板官网下载对应主板的BIOS驱动

图片是我的主板BIOS下载页面,请自己找到自己主板对应型号和版本的BIOS驱动文件并下载到本地。
驱动下载

2. 下载UBU工具提取vbios

源连接:https://winraid.level1techs.com/t/tool-guide-news-uefi-bios-updater-ubu/30357
打开网页,点击下图中未知即可打开下载UBU页面,下载速度比较慢

UBU下载引导
这是百度网盘地址:
链接:https://pan.baidu.com/s/1CRqLtH9chTNpaaT2EuA1kg?pwd=q6vq
提取码:q6vq

3. 提取vbios
  • 第一步:解压UBU工具:
    解压UBU后
  • 第二步:解压BIOS文件:
    将刚才下载的主板BIOS文件解压出来:
    解压后的主板BIOS文件
  • 第三步:复制BIOS文件到UBU目录中:
    如上图,主板BIOS文件中TUF-GAMING-B550-PLUS-WIFI-II-ASUS-2803.CAP为BIOS文件,而不是.exe文件! 其他主板BIOS文件中可能不会待.exe文件。
    复制BIOS文件后
  • 第四步:运行UBU.bat文件,上图中红框下方的文件!并等待其处理完毕。
    运行完毕截图
  • 第五步:提取vbios
    依次选择: 2 Video OnBoard -> S Share files -> 等待其复制完毕。-> 0退出 -> 0 退出 -> 1 rename。
    此时UBU目录中会多出来一个Extracted文件夹,依次进入Extracted\VBIOS\017.010.000.029.000000文件夹中,文件vbios_1638.dat就是我们需要的vbios文件,请复制出来进行保存,后面会使用到。
    vbios文件路径

上面文件仅是同主板同CPU时的文件,其他主板或CPU文件名称可能不同!!!
如果不同请参考文件 Files\AMD\VBIOS\_List_vbios.txt中所列,找到对应文件。
vbios文件列表

  • 第六步:上传vbios到pve主机上
    通过命令或者软件上传vbios_1638.dat文件到PVE主机的/usr/share/kvm目录中
    上传vbios后
4. 创建windows10虚拟机并配置核显直通

我用的镜像文件,可以不使用这个,windows镜像可以随便用
这是百度网盘地址:
链接:https://pan.baidu.com/s/1CRqLtH9chTNpaaT2EuA1kg?pwd=q6vq
提取码:q6vq

1. 创建win10虚拟机
  • ISO镜像选择win10的iso,类别和版本选择windows10
    虚拟机操作系统设置

  • 机型选择q35; BIOS 选择 SeaBIOS
    虚拟机系统设置

  • 磁盘选择SATA, 至少给50G吧。
    虚拟机磁盘设置

  • CPU类别选择host, 核心数根据需要选择,我这里选择6核
    虚拟机CPU设置

  • 网络模型选择E100或者VirtIO都行吧,看个人。记得勾选断开,是为了先断网进行设置,之后记得要取消掉这个
    虚拟机网络设置

  • 手动安装windows10,这里略过详细步骤,不清楚请百度!

由于windows的iso一般缺少virtio的驱动,所以可能会有硬件无法识别的问题,这里提供vitrio的驱动包,请手动上传并导入到win10虚拟机中,然后手动安装驱动,不会操作的请百度!

  • 进入win10以后设置禁止windows自动更新:
    设置-更新和安全中设置暂停更新
    暂停更新
    禁止自动下载
  • 设置打开远程桌面连接,安装网卡驱动等,然后关闭计算机。关掉刚刚的网卡默认断开选项!!
  • 设置核显直通windows:
    选择添加 -> PCI设备 -> 选择刚刚记录的核显id我这里为0000:07:00.0
    添加核显pci设备
    勾选 主GPUPCI-Express
    pci设备配置
  • 设置显卡vbios配置
    使用ssh连接pve主机(不是windows,是pve主机!),编辑/etc/pve/qemu-server/101.conf(其中101是虚拟机id,根据你创建windows虚拟机时提供的id为准!!!)
  1. cpu: host后面添加,hidden=1
  2. hostpci0: 0000:07:00.0,pcie=1,x-vga=1后面添加,romfile=vbios_1638.dat(其中vbios_1638.dat为之前上传的vbios文件名称)
    修改虚拟机配置
  • 回到pve管理页面,重启windows虚拟机,等待启动完成后,通过远程桌面连接到虚拟机。
  • 通过浏览器,到amd官网下载5600g对应的驱动。

https://www.amd.com/zh-hans/support/previous-drivers/apu/amd-ryzen-processors/amd-ryzen-5-5000-g-series-desktop-processors-radeon-graphics/amd-ryzen-5-5600g
这是5600g驱动页面,其他cpu请下载对应驱动!!!

  • 在虚拟机windows10中安装此驱动,安装完成后,关闭计算机。
  • 在pve管理页面修改windows虚拟机设置,选择显示为none
    显示设置为none
  • 重启windows虚拟机,查看gpu等信息
    直通结果

3. 结果展示

虚拟机windows中安装jellyfin,并开启amd硬解码,流畅播放4k视频,占用率不到50%(CPU占用是扫描文件占用的。)
jellyfin播放测试

4. 注意事项

1. windows系统长时间开启的话,记得禁用掉自动休眠,自动休眠后PCI设备唤醒有问题导致无法使用,只能重启PVE解决。
2. 其他待补充
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐