amd全系列7940 7840 5500 等bios和核显vbios提取pve核显直通win10教程 出bios启动画面

2023-10-26 来源:安卓模拟社区 作者:佚名

用手机看

扫描二维码随身看资讯 使用手机 二维码应用 扫描右侧二维码,您可以
1.在手机上细细品读~
2.分享给你的微信好友或朋友圈~

技术含量很高,支持一波

此为转载,转载地址:https://www.bilibili.com/read/cv25423474/

 

这里还是以 天宝wrt 5500u 举例,5500u无csm兼容选项,适用于所有bios没有csm选项的机器,pve只能采用ovmf+q35进行虚拟机核显直通。支持amd核显cpu全系列。

 
20260921补充:
 
amd用户如果你pve虚拟机win10跑分cpu-z下不正常,因核显直通功率分配原因吧,你可能只有换unraid平台跑分才完美,下面是我5500u跑分2000分有问题画面。不管怎么优化都上不去了,unraid直接可以跑3200多。
 
 
 1.jpg
pve多核跑分2000分有问题
目前我发现Pve即使你换成amd_pstate调频,可以最高4.06ghz全核睿频的,但是一开win虚拟机带核显直通,他就掉频率到基础频率2.1ghz,你只要把win虚拟机关了,又全部最高睿频4.06ghz了。这是个bug,pve下无法解决。
 
 
 
本教程支持amd核显cpu全系列。
 
只需要以下步骤:
 
第一部分:准备工作
 
1、pve环境8。请确认你的amd主机bios默认已经开了虚拟化svm, iommu等,没开需要自己手动打开一下。
 
如何安装pve8,可以下载pve8的iso文件后,直接拷贝进入ventoy启动盘里面。ventoy如何弄参考我以前的教程 。
 2.jpg
 
 
如何制作ventoy启动U盘,并安装pve,ubuntu等系统还有iso文件放进去
 
简单来说,Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘,你只需要把 ISO/WIM/IMG/VHD(x)/EFI 等类型的文件直接拷贝到U盘里面就可以启动了,无需其他操作。你可以一次性拷贝很多个不同类型的镜像文件,Ventoy 会在启动时显示一个菜单来供你进行选。下面是官方的示例图:比如我这里把winpe,pve7.4,ubuntu拷贝进u盘里面。启动画面就是这样的也可以直接把pve7 pve8的iso放在里面,开机选择一下直接引导安装pve。比pve直接写入u盘引
 
文章
李晓流
1246
1
12
2、提取物理机bios和核显vbios
 
2.1如果你的机器官网提供bios下载,请直接下载就是(无需提取机器的bios)
 
2.2如果你的机器官网不提供bios下载(或者你就是找不到),那就老老实实需提取机器bios了
 
请用下面这一篇文章中的AFUWIN5.12(win10完美运行)在win10系统上对主机提取bios
3.jpg
 
win10亲测可用!AMI bios(ami固件)提取工具AFUWIN分享
win10亲测可用!AMI bios(ami固件)提取工具AFUWIN分享
 
网上付费下了几个,觉得有用就分享一下了请按照自身需求下载https://wwn.lanzouv.com/ixwW7094m7ra(AFUWIN5.12)(win10完美运行)https://wwn.lanzouv.com/iIP18094m7qj(AFUWIN5.05)(win8完美运行)不能下载链接的也可以扫描以下二维码分别是5.055.12介绍一下这个工具1它是什么:事AMi固件备份的工具2.它能干啥:把你电脑的主板固件提取出来3.它有利于啥:在提取出来之后,你可以对bios进行修改,自定义你需要的内
 
文章
明阳Quan...
6005
32
39
在win10上运行这个软件点“储存”就能获取物理机的bios文件
把存储的bios拷贝进ubu软件目录下就是
 
UBU 1.79.17下载地址:https://pan.baidu.com/s/1pD7NqJoOThQawJw59NyTHQ 提取码: ivwk
4.jpg
5.jpg
6.jpg
 
我这里导出的是5500u的bios,并放进UBU文件夹内 名为5500u bios.bin
运行UBU.bat后的显示内容(如果显示卡住不动的话多敲两次回车或者空格就是)
输入2 选择核显并回车
输入S回车导出vbios
接下来,在ubu目录下分别有个GOP和VBIOS文件夹里面分别有efi文件和dat文件。5系列的核显这两个文件夹下都有东西而且完美,6系列和7系列估计只有一个efi文件。
 
 7.jpg
 
 
 
GOP和VBIOS文件夹
AMDGopDriver.efi 用于加入pve的ovmf中,得到定制ovmf,核显直通的时候出bios画面使用
dat文件用于在win10系统中正确驱动核显(不显卡43错误)注意:1638是核显的编号,这个需要一一对应,不同核显编号不一样。
在pve下查看当前机器核显的编号是多少
在pve下执行:lspci -nnk | grep VGA 查看当前核显编号是多少,我这里是164c。和我bios导出的1638有差异,估计是可以使用的,如果你那无法使用,请多更换尝试一下其他dat。尽量两个编号一致。
 
vbios_1638.dat 这个文件核显直通要用
 
 
 
如果5000系列、6000系列、7000系列cpu的vbios dat文件用UBU提取不出来或者提取出来不能用,请参考教程:
 
https://forum.proxmox.com/threads/have-anyone-susscesfully-passthroughed-the-igpu-amd-radeon-680m-to-vm.119178/
 
中#11楼 xi4oyu的代码 ,复制张贴进去
 
nano vbios.c 
 
gcc vbios.c -o vbios
 
./vbios运行就出来你想要的核显vbios文件了
 
 
 
如果没装gcc自己apt install gcc装一个。
 
我这里以5500u为例,导出我的164c核显的vbios
8.jpg
 
用vbios可执行文件导出核显vbios
我这里导出名为vbios_1002_164c.bin,后面核显直通可以拿来使用
5系6系7系amd 核显cpu vbios dat导不出请用这个办法
他的代码我这里也贴一下,免得删了
 
 
 
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
 
typedef uint32_t ULONG;
typedef uint8_t UCHAR;
typedef uint16_t USHORT;
 
typedef struct {
    ULONG Signature;
    ULONG TableLength; // Length
    UCHAR Revision;
    UCHAR Checksum;
    UCHAR OemId[6];
    UCHAR OemTableId[8]; // UINT64  OemTableId;
    ULONG OemRevision;
    ULONG CreatorId;
    ULONG CreatorRevision;
} AMD_ACPI_DESCRIPTION_HEADER;
 
typedef struct {
    AMD_ACPI_DESCRIPTION_HEADER SHeader;
    UCHAR TableUUID[16]; // 0x24
    ULONG VBIOSImageOffset; // 0x34. Offset to the first GOP_VBIOS_CONTENT block from the beginning of the stucture.
    ULONG Lib1ImageOffset; // 0x38. Offset to the first GOP_LIB1_CONTENT block from the beginning of the stucture.
    ULONG Reserved[4]; // 0x3C
} UEFI_ACPI_VFCT;
 
typedef struct {
    ULONG PCIBus; // 0x4C
    ULONG PCIDevice; // 0x50
    ULONG PCIFunction; // 0x54
    USHORT VendorID; // 0x58
    USHORT DeviceID; // 0x5A
    USHORT SSVID; // 0x5C
    USHORT SSID; // 0x5E
    ULONG Revision; // 0x60
    ULONG ImageLength; // 0x64
} VFCT_IMAGE_HEADER;
 
typedef struct {
    VFCT_IMAGE_HEADER VbiosHeader;
    UCHAR VbiosContent[1];
} GOP_VBIOS_CONTENT;
 
int main(int argc, char** argv)
{
    FILE* fp_vfct;
    FILE* fp_vbios;
    UEFI_ACPI_VFCT* pvfct;
    char vbios_name[0x400];
 
    if (!(fp_vfct = fopen("/sys/firmware/acpi/tables/VFCT", "r"))) {
        perror(argv[0]);
        return -1;
    }
 
    if (!(pvfct = malloc(sizeof(UEFI_ACPI_VFCT)))) {
        perror(argv[0]);
        return -1;
    }
 
    if (sizeof(UEFI_ACPI_VFCT) != fread(pvfct, 1, sizeof(UEFI_ACPI_VFCT), fp_vfct)) {
        fprintf(stderr, "%s: failed to read VFCT header!\n", argv[0]);
        return -1;
    }
 
    ULONG offset = pvfct->VBIOSImageOffset;
    ULONG tbl_size = pvfct->SHeader.TableLength;
 
    if (!(pvfct = realloc(pvfct, tbl_size))) {
        perror(argv[0]);
        return -1;
    }
 
    if (tbl_size - sizeof(UEFI_ACPI_VFCT) != fread(pvfct + 1, 1, tbl_size - sizeof(UEFI_ACPI_VFCT), fp_vfct)) {
        fprintf(stderr, "%s: failed to read VFCT body!\n", argv[0]);
        return -1;
    }
 
    fclose(fp_vfct);
 
    while (offset < tbl_size) {
        GOP_VBIOS_CONTENT* vbios = (GOP_VBIOS_CONTENT*)((char*)pvfct + offset);
        VFCT_IMAGE_HEADER* vhdr = &vbios->VbiosHeader;
 
        if (!vhdr->ImageLength)
            break;
 
        snprintf(vbios_name, sizeof(vbios_name), "vbios_%x_%x.bin", vhdr->VendorID, vhdr->DeviceID);
 
        if (!(fp_vbios = fopen(vbios_name, "wb"))) {
            perror(argv[0]);
            return -1;
        }
 
        if (vhdr->ImageLength != fwrite(&vbios->VbiosContent, 1, vhdr->ImageLength, fp_vbios)) {
            fprintf(stderr, "%s: failed to dump vbios %x:%x\n", argv[0], vhdr->VendorID, vhdr->DeviceID);
            return -1;
        }
 
        fclose(fp_vbios);
 
        printf("dump vbios %x:%x to %s\n", vhdr->VendorID, vhdr->DeviceID, vbios_name);
 
        offset += sizeof(VFCT_IMAGE_HEADER);
        offset += vhdr->ImageLength;
    }
 
    return 0;
}
 
 
这个办法 可以完美导出5、6、7系amd核显vbios。用于核显直通使用。
 
现在所有准备工作就绪!
 
 
 
第二部分:正式操作  关于nano编辑保存文件这个不会请自行百度
 
1、执行命令:nano /etc/default/grub
 
在里面加入以下内容
 
GRUB_CMDLINE_LINUX_DEFAULT="quiet  initcall_blacklist=sysfb_init"
 
解释:initcall_blacklist=sysfb_init 屏蔽掉pve7.2以上的一个bug,方便启动时候就屏蔽核显等设备驱动。这里说明一下,pve8的grub里面不需要加入amd_iommu=on (开启iommu) pcie_acs_override=downstream,multifunction (强制iommu分组)这些参数,好像默认就开启了一样。
 
2、执行命令:update-grub
 
 
 
3、执行命令:nano /etc/modprobe.d/pve-blacklist.conf
 
在里面加入
 
blacklist nvidiafb
 
blacklist amdgpu
 
blacklist i915
 
blacklist snd_hda_intel
 
options vfio_iommu_type1 allow_unsafe_interrupts=1
 
解释:屏蔽三大显卡驱动,屏蔽hdmi声音驱动;options vfio_iommu_type1 allow_unsafe_interrupts=1  允许不安全的设备中断
 
 
 
4、执行命令:update-initramfs -u -k all
 
解释:更新initramfs。
 
 
 
5、执行命令:reboot
 
接下来你就可以直通核显了。
 
 
 
6、OVMF中添加AMDGopDriver.efi得到自己的OVMF.fd 定制bios
 
    6.1 https://github.com/pbatard/ffs/releases 这个软件用于efi文件转ffs 比如把AMDGopDriver.efi转AMDGopDriver.ffs 我估计intel的11-13代核显也可以这样转ffs来加入得到定制bios(以后有空再试)
 9.jpg
点这个下载ffs到本地并解压
在ffs文件夹中cmd中运行GenMod.cmd AMDGopDriver.efi 得到ffs文件
请把前面导出的AMDGopDriver.efi拷贝进ffs文件夹中,在cmd中运行
 
GenMod.cmd AMDGopDriver.efi 就能得到一个AMDGopDriver.ffs 文件,这个文件是用来添加进自定义bios使用的
 
    6.2 把pve里面的OVMF_CODE.fd拷贝出来到本地
 
用winscp软件等,进入/usr/share/pve-edk2-firmware 目录,把里面的1.87M的OVMF_CODE.fd拷贝到本地,如果要用到安全引导,下载带sec...的个就是
 10.jpg
用winscp等软件把这个文件拷贝下来
    6.3 重头戏,AMDGopDriver.ffs加入OVMF_CODE.fd
 
 
下载MMTool V5.07 中文免费版  http://www.downxia.com/downinfo/284655.html 到本地并解压运行
 11.jpg
AMDGopDriver.ffs加入OVMF_CODE.fd得到定制bios
OVMF_CODE.fd把他加载映像到MMTool中,把AMDGopDriver.ffs插入到模块中,最后另存映像为OVMF.fd,这个文件核显直通要用
 
卷索引需要选择个目前内容最多的比如02:00-00,加了了amdgop后会在里面显示有个AMDGopDriver代表加入成功
 
 
 
7、直通虚拟机环境设置
 
在创建win10虚拟机里面请选择默认 (ovmf),q35 7.2版本以上机型,cpu为host,其他保持默认设置
 
在添加核显显卡pcie设备里面勾选主gpu,rom-bar,pcie-express这三个选项,并对所有功能不勾选。显示设置为无 none。
 
 12.jpg
并同时添加负责声音的pcie设备
 
关于你的机器核显编号,核显声卡编号等具体是多少,请用命令 lspci -nnk自己查一下,一般amd的核显显卡和核显声卡挨着的,我这里是0000:06:00.0和0000:06:00.1 你的可能不同。
 
 
 
如果你的bios阉割了csm兼容选项,那只能用ovmf的虚拟机直通显卡
 
手动修改虚拟机参数。
 
执行命令
 
nano /etc/pve/qemu-server/101.conf
 
101是你需要直通的windows虚拟机
 
删除 bios: ovmf 这一列,代表不使用pve自带的bios
 
增加一行 args: -bios /root/OVMF.fd   OVMF.fd 需要在第6步中自己弄出来,它可以直通看见bios启动画面
 
修改这一行为这样 hostpci0: 0000:06:00.0,pcie=1,romfile=vbios_1638.dat,x-vga=1  vbios_1638.dat是自己提取的vbios文件,用于启动核显使用。dat文件你可以尝试更换其他dat,直到核显不43错误。这个在准备工作中自己提取出来。
 
配置参照我这下面关键内容:
 
agent: 1
 
args: -bios /root/OVMF.fd
 
boot: order=sata0;ide2;net0
 
cores: 12
 
cpu: host
 
efidisk0: local-lvm:vm-101-disk-1,efitype=4m,pre-enrolled-keys=1,size=4M
 
hostpci0: 0000:06:00.0,pcie=1,romfile=vbios_1638.dat,x-vga=1
 
hostpci1: 0000:06:00.1
 
machine: pc-q35-8.0
 
vga: none
 
 
 
OVMF.fd 请放在root目录下。
 
 
13.jpg
 
 
怎么放,用winscp之类的软件哈。
 
 
 
8、安装win10系统
 
正常用iso文件安装windows并把amd驱动安装上,不要重启电脑。这个不废话了。
 
 
 
9、打补丁(不完美解决amd gpu passthrough rest bug问题)
 
下载RadeonResetBugFixService这个软件0.17版本,下载地址:https://github.com/inga-lovinde/RadeonResetBugFix/releases
 
下载解压放在c盘根目录,cmd管理员模式下运行RadeonResetBugFixService.exe install
 
等服务安装完成后,就可以随便关闭win10虚拟机了,就可以正常开机win10虚拟机了。
 
 
 
10、已知问题 
 
amd gpu passthrough rest bug问题
 
如果虚拟机没有安装amd显卡驱动,pve管理界面可以随便重启关机停止。
 
一旦安装上了amd显卡驱动,不管是win10自己更新安装的驱动还是自行下载安装amd官网的驱动还是安装主板厂商网站下载的显卡驱动,都会存在win10虚拟机重启就再也不出画面问题。只能依靠安装RadeonResetBugFixService这个软件不完美解决这个问题。安装这个软件后可以正常重启和关机(需要开机后等个2分钟以上等RadeonResetBugFixService服务启动并运行中才能正常重启或者关机虚拟机。本人盯着服务列表看总感觉这个服务启动比较慢,先是启动中然后慢慢变成运行中),不管是虚拟机里面还是pve管理界面,但是管理界面不能点停止,点了就只有重启整个物理机了才能重来了。
 
RadeonResetBugFixService这个软件在重启win10虚拟机的时候会有1-2分钟无画面状态,等系统自动重新安装了显卡驱动后就会一下显示出来win10画面,对远程比如rdp,todesk没有影响。RadeonResetBugFixService这个软件的原理是,在关机的时候自动卸载显卡,保持一个基本显示器以便下一次可以正常开机。
 
 
 
另外就是只有物理机开机后第一次开虚拟机可以看见核显直通的bios画面,后面你重启虚拟机或者关机后开启虚拟机,都会黑屏1分钟,直接一下就蹦出来win10画面,估计跟amd reset bug有关。不影响使用哈。
 
 
 
不需要/etc/modules 手动添加以下四个模块
 
vfio
 
vfio_iommu_type1
 
vfio_pci
 
vfio_virqfd
 
不需要获取核显id并绑定核显设备为vfio_pci
 
 
 
不要开win10的休眠、睡眠功能,还有pve管理界面的虚拟机休眠、停止功能,开了直通会恢复不过来,只有重启物理机才可以解决
 
如果遇到pve的管理网页卡死了,那就重启物理机吧 
 
 
 
最后发张5500u核显直通后的效果图
 
 14.jpg
以及核显直通出bios的画面
 
 
 
 
最后更新一个老高的视频,方便小白可以参考使用:
 
10:21
揭秘全系AMD提取VBIOS和OVMF定制 分享提取VBIOS源码 PVE核显直通虚拟Windows必要文件
 1万  114
视频
爱折腾的老高
 
 
第三部分:补充一个惊喜方案
 
如果amd核显直通想反虚拟化检测核显玩游戏,请直接跳转查看下面文章的:第二部分:kvm反虚拟化检测部分
 
 15.jpg
 
intel 11-14代12700 N100 N305等pve8核显直通win10+kvm反虚拟化检测核显玩游戏教程
 
intel 11-14代核显直通win10可以参考这个教程。目前仅支持12-14代(14代是猜测)的intel全系列cpu。受限于vbios(只有唯一这个vbios_gvt_uefi.rom)没得其他选择,您在折腾本教程过程中经常会蓝屏或者花屏,也有可能不成功,如何选择合适的intel核显驱动会很痛苦的,在这里先提前告知!这是因为vbios_gvt_uefi.rom这个老古董他内部显存处理代码太旧显存不够导致花屏蓝屏。vbios_gvt_uefi.rom=igdAssignment.c不支持11代全系列比
 
文章
李晓流
2407
18
14
需要在虚拟机配置文件中再加入以下代码
 
args: -cpu host,hypervisor=off,vmware-cpuid-freq=false,enforce=false,host-phys-bits=true, -smbios type=0,version=UX305UA.201 -smbios type=1,manufacturer=ASUS,product=UX305UA,version=2021.1 -smbios type=2,manufacturer=Intel,version=2021.5,product='Intel i7-12700' -smbios type=3,manufacturer=XBZJ -smbios type=17,manufacturer=KINGSTON,loc_pfx=DDR4,speed=3200,serial=114514,part=FF63 -smbios type=4,manufacturer=Intel,max-speed=3200,current-speed=3200
这样使用apu在pve下核显直通你就可以玩游戏了,不怕被检测。关键的参数就是host和hypervisor=off。
 
思路和源代码来源于 https://github.com/zhaodice/proxmox-ve-anti-detection 项目
 
作者的演示图借用一下贴在这里大家欣赏。
 16.jpg
 
如果你想自己源码编译,可以看我这个教程。
17.jpg
 
pve7 pve8 kvmqemu反虚拟化检测显卡直通玩游戏教程小白直接安装+大神可以自己源码编译
 
在前面的文章中,我首次提了在pve8系统上kvm反虚拟化检测核显直通玩游戏。什么是虚拟机检测,比如这个就是,借用网上图,这个好像是原神今天我继续单独更新反虚拟化检测教程:小白如何直接使用大神怎么自己源码编译出这个包来。本文适用于intel核显直通,amd核显直通,intel、amd、nvidia三家独显直通, vgpu不清楚会不会被检测到(我估计是可以支持的,我测了一堆virtIO设备都没问题,包括virtIO显卡,vgpu这个请网友自己试试哈,检测工具在qq群群共享)。第一部分:小白大神都请看,项目来源
 
文章
李晓流
850
8
6
后记:一直想更加简单化,不定制ovmf的方法,目前还没弄去测试,留给网友尝试,方法就是
 
1. 定制ovmf直接集成efi 本文办法
 
2.使用pve自带ovmf,grub启动的时候就外挂efi 还没实现,原理应该可行,估计简单
 
3.使用pve自带ovmf,使用rom外挂efi(或者efi转成的rom)
 
2和3留给网友去尝试,2应该不难。 作者:李晓流 https://www.bilibili.com/read/cv25423474/ 出处:bilibili

表羞涩嘛~喜欢就点我

分享吧~提高逼格:

相关阅读

热点推荐

    Error:Change to use e:indexloop

热门合集

更多+

Copyright © 2018-2026 安卓模拟社区 snomm.com, All Rights Reserved.皖ICP备17005905号-1

皖ICP备17005905号-1
皖ICP备17005905号-1