要用到的工具
UEFITool
Universal IFR Extractor
grub_setupvar.efi
如果你的机型为 800g1DM 或者 600g1DM,可以直接跳到制作 grub 启动盘这一步。
提取 cfg lock 所在的模块
打开 UEFITool,找到 file -> open image file, 导入用编程器从中读取出来的二进制文件
搜索 cfg lock,找到 file -> search… 选项,搜索"cfg lock"

双击下面搜索结果,会自动定位到 cfglock 所在的位置

右键 Extract body 导出模块保存为 cfglock.bin
查找 cfg lock 和 DVMT Pre-Allocated 选项在 bios 中的位置
打开 Universal IFR Extractor, 载入刚刚导出的 cfglock.bin,点击 Extract 将模块转换为 txt

打开刚刚转换好的 txt 文件,搜索关键词"cfg lock", 可以看到 Variable 为 0x4A3

这里还记录了变量值的含义, 例如 0x00 为 Disabled(禁用), 0x01 为 Enabled(启用)
1
2
3
4
| 0xBF518 Setting: CFG lock, Variable: 0x4A3 {05 A6 0F 02 10 02 5C 00 01 00 A3 04 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xBF53E Option: Disabled, Value: 0x0 {09 0E CC 01 00 00 00 00 00 00 00 00 00 00}
0xBF54C Option: Enabled, Value: 0x1 {09 0E CB 01 30 00 01 00 00 00 00 00 00 00}
0xBF55A End of Options {29 02}
|
搜索关键词"DVMT Pre-Allocated", 可以看到 Variable 为 0x233

此处也记录了变量值的含义,我们要改的 96M 就是 0x3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 0xCDC94 Setting: DVMT Pre-Allocated, Variable: 0x233 {05 A6 01 05 13 05 11 01 01 00 33 02 10 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00}
0xCDCBA Option: 32M, Value: 0x1 {09 0E 02 05 30 00 01 00 00 00 00 00 00 00}
0xCDCC8 Option: 64M, Value: 0x2 {09 0E 03 05 00 00 02 00 00 00 00 00 00 00}
0xCDCD6 Option: 96M, Value: 0x3 {09 0E 04 05 00 00 03 00 00 00 00 00 00 00}
0xCDCE4 Option: 128M, Value: 0x4 {09 0E 05 05 00 00 04 00 00 00 00 00 00 00}
0xCDCF2 Option: 160M, Value: 0x5 {09 0E 06 05 00 00 05 00 00 00 00 00 00 00}
0xCDD00 Option: 192M, Value: 0x6 {09 0E 07 05 00 00 06 00 00 00 00 00 00 00}
0xCDD0E Option: 224M, Value: 0x7 {09 0E 08 05 00 00 07 00 00 00 00 00 00 00}
0xCDD1C Option: 256M, Value: 0x8 {09 0E 09 05 00 00 08 00 00 00 00 00 00 00}
0xCDD2A Option: 288M, Value: 0x9 {09 0E 0A 05 00 00 09 00 00 00 00 00 00 00}
0xCDD38 Option: 320M, Value: 0xA {09 0E 0B 05 00 00 0A 00 00 00 00 00 00 00}
0xCDD46 Option: 352M, Value: 0xB {09 0E 0C 05 00 00 0B 00 00 00 00 00 00 00}
0xCDD54 Option: 384M, Value: 0xC {09 0E 0D 05 00 00 0C 00 00 00 00 00 00 00}
0xCDD62 Option: 416M, Value: 0xD {09 0E 0E 05 00 00 0D 00 00 00 00 00 00 00}
0xCDD70 Option: 448M, Value: 0xE {09 0E 0F 05 00 00 0E 00 00 00 00 00 00 00}
0xCDD7E Option: 480M, Value: 0xF {09 0E 10 05 00 00 0F 00 00 00 00 00 00 00}
0xCDD8C Option: 512M, Value: 0x10 {09 0E 11 05 00 00 10 00 00 00 00 00 00 00}
0xCDD9A Option: 1024M, Value: 0x11 {09 0E 12 05 00 00 11 00 00 00 00 00 00 00}
0xCDDA8 End of Options {29 02}
|
制作 grub 启动盘
- 将 u 盘格式化为 FAT32 格式,建立文件夹 EFI/BOOT/
- 将 grub_setupvar.efi 重命名为 bootx64.efi, 放到 EFI 分区的 EFI/BOOT/bootx64.efi.
- 此时从 u 盘启动就可以进入 grub 命令行界面了
注意,这里的 grub_setupvar.efi 为特制的 grub,也就是给普通的 grub 添加了一个 setup_var 模块
修改值 cfglock 和 DVMT
此处需要修改 cfg lock 和 DVMT Pre-Allocated 的值,前面的工作已经找到了这两个变量的地址,以 800g1DM 或 600g1DM 为例,这两个变量的地址为0x4A3
和0x233
我们要关闭 cfg lock 并且把 DVMT Pre-Allocated 改为 96M,在 grub 命令行中输入以下命令即可。
1
2
3
4
| #关闭CFG锁
setup_var 0x4A3 0x0
#设置DVMT为96M
setup_var 0x233 0x3
|
附:
setup_var 命令的用法
1
2
3
4
| # 查看0x233处的值
setup_var 0x233
# 设置0x233处为0x03
setup_var 0x233 0x3
|
工具下载链接
此处的工具只包含了 grub_setupvar.efi 和 Universal IFR Extractor,UEFITool 可以去网上自行下载
cfglock-dvmt-tools.zip