|
谁能够改个DFI X48的BIOS呀?
转:
主要基于的是ONLY的文章和ddww21cn给出的试验有效的BIOS所给信息的解读。
从ONLY的文章我们可以知道,现在NV对于SLI的认证主要是在ACPI DSDT表中加入一个包含认证字符串的设备来达到目的的。
ddww21cn则给出了改好的BIOS,但是并没有放出具体的实现方式。通过对所给BIOS的解析和ONLY的文章以及一些相关资料和自己对BIOS的了解,可以做出一些对于修改BIOS破解SLI支持的推测。
ddww21cn的修改方式其实就是在BIOS的DSDT表内写入类似于
Scope (_SB.PCI0)
{
Name (SLIC, Buffer (0x9E)
{
"987134512781Genuine NVIDIA Certified SLI ReadyMotherboard for GIGABYTE GA EX58 EXT1426-Copyright 2008 NVIDIACorporation All Rights Reserved-765289891023(R)"
})
Device (WMI1)
{
Name (_HID, "pnp0c14")
Name (_UID, "MXM2")
Name (_WDG, Buffer (0x14)
{
/* 0000 */ 0x3C, 0x5C, 0xCB, 0xF6, 0xAE, 0x9C, 0xBD, 0x4E,
/* 0008 */ 0xB5, 0x77, 0x93, 0x1E, 0xA3, 0x2A, 0x2C, 0xC0,
/* 0010 */ 0x4D, 0x58, 0x01, 0x02
})
Method (WMMX, 3, NotSerialized)
{
CreateDWordField (Arg2, 0x00, FUNC)
If (LEqual (FUNC, 0x41494C53))
{
Return (_SB.PCI0.SLIC)
}
Return (0x00)
}
}
}
这样的代码然后刷入BIOS。
目前主流的BIOS有2种,AMI和Award的。需要分别讨论。
AMI的BIOS比较模块化,并且有可视化的修改工具MMTools,一般地,我们需要修改的是10h模块ACPIAML,其中存放的是编译后的DSDT代码。用MMTools可以直接解压出该模块,然后用iasl这个工具加-d命令直接反编译该模块得到源代码。我们需要在源代码中加入上述的代码。加在根目录下面应该就可以了,不过可能加在设备地址为0x001F0000模块内也能起到很好的效果(Giga就是加在0x001F0000,设备名字是PX40的模块下面,有的主板开头的设备名字会是SBRG或者其他的),然后把修改过的ACPI AML模块的源文件用iasl编译后用MMTools导入BIOS文件,然后再用修改过的BIOS刷新即可。
Award的BIOS相对麻烦一点,我们需要使用CBROM这个命令行工具。最好是1.55版本的CBROM。用cbrom xxx.bin/acpiextract解压出ACPITBL模块。默认文件名一般是是ACPITBL.BIN。得到的ACPI模块后用WinHex之类的工具打开,找到DSDT表的开头,把DSDT之后的所有内容拷贝到一个新的文件。把这个新的文件用iasl反编译得到源代码。以同样的方式添加SLI认证代码。然后再用iasl编译,iasl很可能在编译过程中会提示语法Error而编译不出aml文件,修改至无Error就行,很多BIOS本身编写也不完全规范,Warning就不用管了。有的DSDT表代码本身是未优化的,那么编译时就加上-oa参数。
编译后的文件在WinHex中用Ctrl+B快捷键覆盖原来DSDT表内容。保存后得到新的ACPITBL.BIN。用cbrom xxx.bin /acpi ACPITBL.BIN导入回BIOS。
但是Award的BIOS麻烦在导入回BIOS后并不算完,很多BIOS都有MEMINIT模块或者PPMINIT模块,本身ACPITBL是第三个模块,修改后再导入会放到最后,这样导致MEMINIT之类的模块入口地址发生了变化,启动会黑屏。因为加入的SLI认证信息比较多,因此ACPITBL模块增加的字节数比较多,所以用WinHex手动把ACPITBL模块调到第三位,然后删主模块的OEM信息凑字节的方法是不可行的。需要用加入MS的SLIC时常用的移花接木工具生成一个计算好大小的模块,然后导入这一模块,用WinHex把这个模块手工移动到第三位。总的来说,会相当地麻烦。
因为我没有两张一样的NV显卡,所以也无法实际测试SLI。对于Award BIOS的描述也许不全面。
另外,载入修改的DSDT表未必一定要硬刷BIOS,有很多辅助工具可以在系统引导之前载入加料的DSDT表并且同样有效。特别是Award的BIOS改起来有时会非常麻烦,不如用其他方式加载。这一方面其实有很多中文资料可以查找。在远景的MAC区有很多非常深入的讨论。修改DSDT表被广泛用来解决普通PC装MacOS X之后的各种不兼容现象。 |
|