分享

榨干矿卡,实战老旧主板修改bios强行开启Resizable BAR功能

 pio9999 2024-01-04 发布于广西

前言:由于众所周知的原因,最近空闲在家的时间变多了,于是除了玩游戏,就只能折腾硬件玩了,前不久我发了一篇文章讲了下5600XT刷bios解锁超频限制的方法,但是还不够,今天咱们来继续压榨显卡(反正是矿卡,坏了也不心疼)

这次不同于上次,不是修改显卡bios,而是修改主板bios。SAM和Resizable BAR想必大家都知道,通过解锁显存访问限制来提高显卡性能。最早由AMD在RDNA架构的显卡上推出,后来Nvidia跟进,逐渐成了现在新主板和新显卡必备功能之一,但是旧主板和旧显卡呢?两家都没有为老用户考虑过,既然官方没有,就让我们自己动手丰衣足食吧。

20230502更新内容:

增加了技嘉主板DOS下刷bios的工具EFIFlash_0.74_mod版,去掉了bios检测,可以用来强刷bios

增加了CoffeeTime_0.99,一个修改bios的工具,可以用来替换微码,修改vbios等等

20230223更新内容:

尝试了修改MAX TOLUD的方法来增加Resizable BAR大小,具体步骤是在amibcp里开启MAX TOLUD的隐藏选项,并在bios里设置为1G,然后进系统运行ReBarState.exe,最大可以设置BAR大小为2G

增加了刷AMI bios的工具AFUWin64,带有/GAN强制刷入参数

使用方法:AFUWINx64.exe bios.rom /GAN,如果还是无法刷入,可以用烧录器+烧录夹

压缩包里增加了我修改过的技嘉B85M-D3H的bios,bios改动内容如下:

增加了nvme驱动,修改了CPU微码可以锁睿频,开启了超外频的隐藏选项,开启了Non-K OC,K OC等隐藏选项,其中MAX TOLUD设置隐藏在系统一栏最下方的没有名字的选项里,如下图:

移动到最下方回车,就可以看到bios大量隐藏的选项,里面就包括了MAX TOLUD

先放项目地址:https://github.com/xCuri0/ReBarUEFI

如果你觉得自己英文过关,直接去看原项目可能会比较快

本文所讲的内容主要就是整理并翻译了ReBarUEFI里的内容,该项目是向原本不支持Resizable BAR功能的旧型号主板添加该功能以提升显卡性能,支持大部分主板和显卡,已测试通过的列表可以在这里查看:https://github.com/xCuri0/ReBarUEFI/issues/11,下图是其中一部分:

本文以技嘉B85M-D3H主板为例,显卡是华硕5600XT

本文将要用到以下几个工具:

ReBarDxe.ffs,ReBarState.exe,UEFITool,UEFIPatch,MMTool,amibcp,IRFExtractor,modGRUBShell.efi,AmiBoardInfoTool,iasl,AFUWIN,文末将会提供打包下载

那么让我们正式开始吧,首先第一步,重启电脑进主板bios,关闭CSM,开启Above 4G Decoding(如果你的主板没有这个选项就先不管,后面会细说)

第二步,用UEFITool打开你的主板bios(用MMTool来修改也是可以的,本文以UEFITool为例),搜索"Pcibus",Unicode选项框打勾

然后双击搜索到的结果

鼠标点击右边滚动条下拉到最下面,选中第一个“Volume free space”上方的文件,点击右键,点击Insert after...

选择ReBarDxe.ffs文件,插入该模块

这是我的主板(技嘉B85M-D3H)已经插入后的效果,ReBarDxe和NvmeExpressDxE都是原本bios里没有的,NvmeExpressDxE你不用管,这是用来驱动Nvme SSD的,你看到ReBarDxe插入成功就可以,保存好你修改的这个bios

第三步,刷入你保存的主板bios,刷完后重启进入windows,运行ReBarState.exe,设置可访问的显存大小,输入0是关闭,输入32是无限,输入x是自定义大小(这里的x代表2的x次方MB,比如1G就是2的10次方,那么就输入10),这里我建议从1G(也就是10)开始慢慢试,试到你的显存大小为止。需要注意的是,如果你的主板没有开启Above 4G Decoding功能,那么最多只能设置1G,设置更高会进不了系统,我的技嘉B85M-D3H就是这样,不过设置1G同样对显卡性能有所提升。

设置完后重启一次,打开GPUZ和显卡驱动面板查看确认,你会发现Resizable BAR功能已经成功开启了,享受该功能带来的显卡性能提升吧!

让我们继续来讲讲Above 4G Decoding,该功能是让主板上的64位设备可以使用4G以上的寻址空间,如果该功能无法开启,Resizable BAR也就无法访问所有显存,根据不同品牌和不同芯片组的主板,这个选项在bios里可能有也可能没有,如果没有的话,请按照以下方法强行开启该功能(不一定每个主板都能成功,比如我的技嘉B85M-D3H目前还不行)

方法一:用amibcp来开启隐藏掉的选项

(旧型号主板bios用amibcp 4.55版,新一点的(AptioV)主板bios用amibcp 5.01版,两个版本我都打包在文末的压缩包里)

用amibcp打开你主板的bios,在Setup Configuration一栏,逐个点击左边的设置项,寻找"Above 4G Decoding"

如果找的到,那么恭喜你,只需要点击"Default",把它改成"USER",保存bios并刷入,重启电脑按Del你就可以在bios设置里找到该选项了,开启它即可

方法二:如果amibcp找不到选项,那我们就直接手动修改bios

还是用UEFITool打开你的主板bios,搜索"4G Decod"或者"Above 4G"

同样是双击找到的内容,这次我们点右键选择Extract body...,导出该模块,假设名字叫"4G_Decod.bin"

打开IRFExtractor,选择你刚刚导出的模块,看到绿色的"UEFI"就对了

点击Extract保存为txt文件,用文本编辑器打开该txt文件

搜索"4G Decod"或者"Above 4G",找到后记下搜索到的内容后面VarStoreInfo (VarOffset/VarName)的值,举个例子,下图中NFER这个功能对应的VarStoreInfo的值0x93就是要记下的(我的主板搜索不到4G Decod功能,所以用NFER来举例)

现在,找一个UEFI系统启动U盘(制作启动U盘我就不展开说了),把我给的压缩包里的modGRUBShell.efi改名为bootx64.efi,复制并替换启动U盘的EFI分区下的EFI\BOOT\bootx64.efi文件

接着用该启动U盘重启电脑,你会看到如下图的命令行

输入命令setup_var (offset),(offset)为上个步骤记录下来的值,这里以上面的0x93为例

这时可能出现两种结果

如果显示offset 0x93 is: 0x00,则输入命令setup_var 0x93 0x1并重启,拔掉U盘,进入系统,确认Above 4G Decoding是否已经开启

如果显示offset 0x93 is: 0x01,则输入命令setup_var 0x93 0x0并重启,先不拔U盘,再次启动到该命令行界面,输入命令输入命令setup_var 0x93 0x1并重启,然后拔掉U盘,进入系统,确认Above 4G Decoding是否已经开启

如果上述两种方法都行不通,比如我手里这块技嘉B85M-D3H,amibcp里找不到选项,UEFITool中虽然可以搜索到4G Decod字符串,但是提取出来后的txt里却找不到,于是我用16进制编辑器打开导出后的4G_Decod.bin文件,定位到UEFITool里找到的地址,发现了这么一个字符串"Above 4G Decoding. Enables or Disables 64bit capable Devices to be Decoded in Above 4G Address Space",看来,这并不是一个可以设置的选项,而仅仅是一个描述字符串而已。

难道B85M-D3H就没机会开启这个功能了吗?其实还是有可能的,我也和ReBarUEFI项目作者提到了这个问题,既然是开源项目,那就等待未来有人可以解决吧

问题及解决:ReBarDxe是通过hook了Pcibus的驱动来实现的,而且该驱动被PciHostBridge调用,所以如果你在设置Resizable BAR不同显存大小的过程中,碰到了问题(比如大小超过4G就无法启动),那么就需要用UEFIPatch来对主板的Pcibus和PCihostbridge做进一步的修改(如果你没碰到问题就不用看接下来的内容)。

项目作者已经整理了一些常用的补丁来解决问题,使用方法也很简单,把你修改后的主板bios(假设叫做modded_F3_ReBar),UEFIPatch.exe,以及patches.txt文件,放在同一个文件夹下面,打开cmd窗口,切换到该目录并输入以下命令:UEFIPatch.exe modded_F3_ReBar.bin,你会看到image patched提示信息,该目录下会自动生成一个打好补丁的主板bios文件,以.patched结尾。(patches.txt文件里有不同主板使用的不同补丁,如果不是你的主板用的就不会生效),通常把这个打好补丁的bios文件刷入主板,就能解决大部分问题。

部分华硕主板可能会遇到打完补丁后,pad file不一致的问题,表现为打完补丁的bios多出来了pad file或者pad file出现在和打补丁前不同的位置,如下图所示:

这是UEFIPatch的问题,可以借助MMTool来修复,具体方法是用UEFITool打开打完补丁的bios,选中打补丁的部分(patches文件里有写明补丁是打在哪个模块上,主要是pcibus和pcihostbridge这两个),右键选择Extract as is...来导出

然后用MMTool打开未打补丁的bios,切换到Replace一栏,选择下面对应的模块,点击文件选择框后边的Browse,选择刚才导出的打完补丁的模块,点击右下的Replace,这样就完成了替换,并且修复了打完补丁后pad file不一致的问题

如果你的主板打了PciHostBridge的补丁之后仍然有问题,那么还有可能需要进一步打DSDT补丁,请继续往下看:

用UEFITool打开你修改后的主板bios,搜索AmiBoardInfo,双击找到的位置,选中"PE32 image section"并导出

假设导出的文件名为AmiBoardInfo.efi,打开cmd命令行,切换到AmiBoardInfoTool.exe文件所在目录,把刚刚导出的AmiBoardInfo.efi复制一份过来,运行以下命令AmiBoardInfoTool -a AmiBoardInfo.efi -d DSDT.aml,得到DSDT.aml文件

切换到iasl工具所在目录,运行iasl DSDT.aml命令来反编译,会生成一个DSDT.dsl文件

用文本编辑器打开该文件,搜索CreateQWordField,你会找到类似以下内容

把内容改成如下图所示,0xFFFFFFFFF代表2的36次方的内存寻址范围,这个可以根据你的CPU做改动,比如ivybridge是36bit,Haswell是39bit

改好后运行iasl DSDT.dsl重新编译得到DSDT.aml文件,运行AmiBoardInfoTool -a AmiBoardInfo.efi -d DSDT.aml -o AmiBoardInfoMod.efi命令,得到修改后的AmiBoardInfoMod.efi文件

最后一步,还是用UEFITool在你刚才导出文件的地方,用Replace body来把原来的内容替换成AmiBoardInfoMod.efi,这样就得到了修改后的主板bios,刷入即可

PS:我的技嘉B85M-D3H主板bios无法开启above 4G,自然也无法在反编译出来的文件中找到CreateQWordField,所以上面的截图是以项目作者的技嘉B75M-D3H主板bios为例

好了,说了一大堆,不知道各位看明白没有,其实本文最关键的就是关闭CSM,开启Above 4G Decoding,给bios添加Resizable BAR模块,以及运行ReBarState.exe设置Bar的大小这几步,其他比如UEFIPatch和DSDT Patch都是解决各种问题的,如果像我的主板一样,不能开启Above 4G Decoding,那么就把Bar大小设置成1G使用就好。

本文所提到的工具和bios下载

链接:https://pan.baidu.com/s/1NCPKyQiXxOFXuNK7hs2vJQ

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多