无需刷BIOS!使用setup_var命令解锁MSR 0xE2锁定,修改dvmt值,开启AHCI

无需刷BIOS!使用setup_var命令解锁MSR 0xE2锁定,修改dvmt值,开启AHCI

本文将介绍如何使用修改过的grub调整隐藏的BIOS设置,以达到无需刷BIOS解锁MSR 0xE2锁定,修改增大DVMT Pre-Allocated值,开启AHCI等目的。

在这里,我以微星GE60 2QD 894XCN笔记本为例。

提取原BIOS

在这里推荐使用Universal BIOS Backup ToolKit 2.0.exe软件来提取当前的BIOS文件。点我下载

Extract_BIOS

借助该工具,我们成功提取出了当前BIOS文件。我笔记本的BIOS文件点我下载

AmericanMegatrendsInc.-E16GFIMS.80D.rom

如果你的电脑BIOS不是AMI的,那么这个工具可以不支持提取你电脑的BIOS。你可以使用其它工具提取或者上官方网站下载BIOS文件刷入,再依据该BIOS文件来进行以下操作。

提取BIOS信息

这一步,我们需要使用UEFITool这个工具。官网点我打开

该工具有Mac版,Win版和Linux版,在这里我以Mac版为例。Mac版点我下载

打开UEFITool软件,菜单栏选择File>Open image file…

UEFITool_open_image

选择第一步提取出来的BIOS文件,得到类似如下界面

UEFITool_opened_image

同时按下alt+F(我这里是PS2键盘,如果你是USB键盘,那就按Win+F)打开搜索框,选择Text,输入CFG Lock,点OK。

UEFITool_search_CFG-Lock

得到如下信息。

UEFITool_CFG-Lock_info

双击这条信息,软件会自动定位到含有CFG Lock信息的模块。

UEFITool_CFG-Lock_location

右键该模块,选择extract body,提取出该模块。

UEFITool_extract-body
extracted-body

接下来,我们需要把该模块转换成我们能读懂的信息。我们需要借助ifrextract这个工具。官网点我打开点我下载

把上面提取出来的模块更名为1.bin(为了方便操作),把ifrextract文件放到桌面上。

打开终端,依次执行以下操作:

进入桌面这个目录

cd ~/desktop

转换信息

./ifrextract 1.bin 1.txt
ifrextract_terminal

这样,我们会看到桌面上生成了一个叫1.txt的文件,里面就是转换出来的我们能读懂的BIOS模块信息。我笔记本的BIOS提取出来的模块转换出来的1.txt点我下载

ifrextract_txt

寻找需要的偏移量

打开上一步转换出来的1.txt文件,同时按下alt+F(这是ps2键盘的,USB键盘使用Win+F),输入我们想要修改的东西名称进行查找。

例如,我们想要解锁MSR 0xE2,那就输入CFG Lock进行搜索

txt_CFG-Lock

提取整理出有用的信息:

One Of: CFG lock, VarStoreInfo (VarOffset/VarName): 0x62, VarStore: 0x1
One Of Option: Disabled, Value (8 bit): 0x0
One Of Option: Enabled, Value (8 bit): 0x1

其中,VarStoreInfo值以及Option中的Value值就是我们要找的。

VarStoreInfo值是CFG Lock这个选项的地址,也可以说其在BIOS中的偏移量。

后面的VarStore是当前值(BIOS默认值),为0x1

0x1对应下面的Option里就是Enabled,意思就是CFG Lock这个选择默认被打开了,也就是说MSR 0xE2默认被锁定了。

而我们想要解锁它就需要把该选择修改成0x0的Disabled,就是要把0x62这个地址上的数值修改为0x0

再来看看dvmt的例子:

DVMT-Pre-Allocted值:

DVMT Pre-Allocated, VarStoreInfo (VarOffset/VarName): 0x301, VarStore: 0x1
One Of Option: 32M, Value (8 bit): 0x1 (default)
0x37794 			One Of Option: 64M, Value (8 bit): 0x2
0x377A2 			One Of Option: 96M, Value (8 bit): 0x3
0x377B0 			One Of Option: 128M, Value (8 bit): 0x4
0x377BE 			One Of Option: 160M, Value (8 bit): 0x5
0x377CC 			One Of Option: 192M, Value (8 bit): 0x6
0x377DA 			One Of Option: 224M, Value (8 bit): 0x7
0x377E8 			One Of Option: 256M, Value (8 bit): 0x8
0x377F6 			One Of Option: 288M, Value (8 bit): 0x9
0x37804 			One Of Option: 320M, Value (8 bit): 0xA
0x37812 			One Of Option: 352M, Value (8 bit): 0xB
0x37820 			One Of Option: 384M, Value (8 bit): 0xC
0x3782E 			One Of Option: 416M, Value (8 bit): 0xD
0x3783C 			One Of Option: 448M, Value (8 bit): 0xE
0x3784A 			One Of Option: 480M, Value (8 bit): 0xF
0x37858 			One Of Option: 512M, Value (8 bit): 0x10
0x37866 			One Of Option: 1024M, Value (8 bit): 0x11

由以上信息可知,BIOS里默认的DVMT-Pre-Allocted值为32MB。

我们想要把DVMT-Pre-Allocted值修改到至少96MB(驱动4k屏至少需要96MB,macOS系统里检查dvmt值需要至少64MB),那就要把0x301这个地址上的数值修改为0x3

再举个例子,有些本子默认使用RST RAID的SATA控制器,导致macOS系统里不认硬盘,我们需要降SATA控制器修改为AHCI。

提取有关SATA控制器的信息:

SATA:
SATA Mode Selection, VarStoreInfo (VarOffset/VarName): 0x1CA, VarStore: 0x1
One Of Option: IDE, Value (8 bit): 0x0
One Of Option: AHCI, Value (8 bit): 0x1

可以看到SATA控制器的地址(偏移量)为0x1CA,默认使用0x1,也就是AHCI,我们想开启AHCI那就要将0x1CA这个地址上的数值改成0x1

由以上信息可知,我的笔记本默认就是使用AHCI,所以无需修改。

修改BIOS隐藏设置

要修改BIOS隐藏设置,我们需要在UEFI shell里使用setup_var命令。

datasone修改了一份支持setup_var命令的grub引导,我们可以借助这个工具。项目点我打开

modGRUBShell

下载该引导文件。点我下载

使用磁盘工具,把U盘抹掉,方案用主引导记录,格式选择MS-DOS(FAT)

然后在U盘分区里新建一个EFI文件夹,EFI文件夹里新建一个BOOT文件夹,把下载的modGRUBShell.efi更名为BOOTX64.efi,放入BOOT文件夹里面。

就这样,一个支持setup_var命令的grub引导启动盘就制作完成了。

进BIOS里设置第一启动项为U盘(UEFI模式启动)。

启动grub后,我们可以开始使用setup_var命令了。

首先来解锁MSR 0xE2

输入

setup_var_3 0x62

该命令是查询0x62这个地址(偏移量)的数值,0x62是我们在上面一步中查找到的CFG-Lock选项的地址,从下图中我们可以看到该0x62地址数值为0x01,即对应Enabled。

setup_var_CFG-Lock

输入

setup_var_3 0x62 0x00

该命令是修改0x62这个地址的数值为0x00,也就是把CFG-Lock这个选项设置为Disabled。

setup_var_CFG-Lock_0x00

其它设置,如DVMT-Pre-Allocted值,SATA控制器等等选项,操作步骤一样,关键在于上面一步寻找到的该选项的地址以及配置它的数值。

例如上面例子中的DVMT-Pre-Allocated选项,使用如下命令:

setup_var_3 0x301 0x3

SATA控制器使用如下命令:

setup_var_3 0x1CA 0x1

每一个BIOS的设置选项地址(偏移量)都是不一样的,不检查BIOS设置地址而直接使用setup_var命令修改是十分危险的事情!

验证结果

setup_var命令执行完毕后,我们怎么知道命令是否生效了呢?

其实不难,只要使用一些辅助软件看一下即可。

例如,CFG-Lock这个选项,我们可以在Mac里使用AppleIntelInfo驱动打印CPU相关状态信息,Hackintool工具已经集成了该驱动,所以我们可以很方便地获取相关信息。

Hackintool_AppleIntelinfo_0xE2-CFG-Lock

由上图可知,CFG-Lock已经成功解锁了。那么,你就可以删掉KernelPM补丁(Haswell+)或AppleIntelCPUPM(Haswell以前的)补丁,直接使用原生电源管理了。(Tips:用以防止开启HWP后奔溃的MSR_0xE2__xcpm_idle_instant_reboot内核补丁也不再需要了哦!)

Written by

Mison

8 thoughts on “无需刷BIOS!使用setup_var命令解锁MSR 0xE2锁定,修改dvmt值,开启AHCI

  1. 谢谢你的教程啊,写的很是仔细和有深度,读了后收获挺多的,有什么qq群或是微信群的吗,方便交流和学习的?

  2. x1c 2018 不能修改msr 0xE2,好郁闷。。直接查看说是0x0 ,修改的时候就提示错误。进系统后hackintool 说cfg lock是locked。。。

  3. DVMT Pre-Allocated找到了,但是提供的选项奇葩至极。
    这是想告诉我,已经给我最大值了,要改只能改小?
    0x5EC3D One Of: DVMT Pre-Allocated, VarStoreInfo (VarOffset/VarName): 0xDF, VarStore: 0x2, QuestionId: 0x1AA, Size: 1, Min: 0x0, Max 0xFE, Step: 0x0 {05 91 59 11 6C 11 AA 01 02 00 DF 00 10 10 00 FE 00}
    0x5EC4E Default: DefaultId: 0x0, Value (Other) {5B 85 00 00 08}
    0x5EC53 Value {5A 82}
    0x5EC55 QuestionId: 0x2 equals value in list (0x73, 0x74) {14 8A 02 00 02 00 73 00 74 00}
    0x5EC5F 64 Bit Unsigned Int: 0x1 {45 0A 01 00 00 00 00 00 00 00}
    0x5EC69 64 Bit Unsigned Int: 0x2 {45 0A 02 00 00 00 00 00 00 00}
    0x5EC73 Conditional {50 02}
    0x5EC75 End {29 02}
    0x5EC77 End {29 02}
    0x5EC79 End {29 02}
    0x5EC7B One Of Option: 0M, Value (8 bit): 0x0 {09 07 5A 11 00 00 00}
    0x5EC82 One Of Option: 32M, Value (8 bit): 0x1 {09 07 5B 11 00 00 01}
    0x5EC89 One Of Option: 64M, Value (8 bit): 0x2 {09 07 5C 11 00 00 02}
    0x5EC90 One Of Option: 4M, Value (8 bit): 0xF0 {09 07 5D 11 00 00 F0}
    0x5EC97 One Of Option: 8M, Value (8 bit): 0xF1 {09 07 5E 11 00 00 F1}
    0x5EC9E One Of Option: 12M, Value (8 bit): 0xF2 {09 07 5F 11 00 00 F2}
    0x5ECA5 One Of Option: 16M, Value (8 bit): 0xF3 {09 07 60 11 00 00 F3}
    0x5ECAC One Of Option: 20M, Value (8 bit): 0xF4 {09 07 61 11 00 00 F4}
    0x5ECB3 One Of Option: 24M, Value (8 bit): 0xF5 {09 07 62 11 00 00 F5}
    0x5ECBA One Of Option: 28M, Value (8 bit): 0xF6 {09 07 63 11 00 00 F6}
    0x5ECC1 One Of Option: 32M/F7, Value (8 bit): 0xF7 {09 07 64 11 00 00 F7}
    0x5ECC8 One Of Option: 36M, Value (8 bit): 0xF8 {09 07 65 11 00 00 F8}
    0x5ECCF One Of Option: 40M, Value (8 bit): 0xF9 {09 07 66 11 00 00 F9}
    0x5ECD6 One Of Option: 44M, Value (8 bit): 0xFA {09 07 67 11 00 00 FA}
    0x5ECDD One Of Option: 48M, Value (8 bit): 0xFB {09 07 68 11 00 00 FB}
    0x5ECE4 One Of Option: 52M, Value (8 bit): 0xFC {09 07 69 11 00 00 FC}
    0x5ECEB One Of Option: 56M, Value (8 bit): 0xFD {09 07 6A 11 00 00 FD}
    0x5ECF2 One Of Option: 60M, Value (8 bit): 0xFE {09 07 6B 11 00 00 FE}
    0x5ECF9 End One Of {29 02}
    0x5ECFB End If {29 02}

      1. 问题是这64MB好像是假的。
        如果不用FB的patch或者device里边增加stolenmem/fbmem补丁,必然会遭遇AppleIntelFrameBuffer的KP。
        然后在windows里边看到的显存又是128MB

gameboyforever进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注