65.9K
CodeProject 正在变化。 阅读更多。
Home

NvramRestorer - 在 Windows 中转储和恢复 BIOS 设置

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.31/5 (8投票s)

2009 年 7 月 17 日

CPOL

3分钟阅读

viewsIcon

36669

downloadIcon

1215

这个小工具允许对 NVRAM 字节 14 到 127 进行底层 R/W 访问。

引言

这个小工具可以用来访问你的主板 NVRAM 的一些字节(原则上应该可以在 Win98 到 Win7 上工作,但只在 WinXP 上测试过)。 BIOS 将其设置存储在这个 NVRAM 中,因此它可以用来转储和恢复这些设置。

背景

我的一块旧的 ECS K7S5A 主板遇到了严重的问题,主要是因为它不时丢失 BIOS 设置,尽管我已经尝试了不同的电池和大约 10 个不同的 BIOS 版本。我的第一个方法是自定义 BIOS,使其默认设置符合系统的最佳设置。

遗憾的是,无法修改默认的 FSB 时钟 - 每次设置丢失时,它都会从 147 MHz 降低到 100 MHz,导致速度只有 2/3(CPU 和内存)- 简直无法接受。这就是我开始考虑在每次启动后从 Windows(在本例中为 XP)直接写入包含 BIOS 设置的 NVRAM 的地方。如果当前设置与要恢复的参考转储(定义 147 MHz FSB)不同,则会显示一个消息框,提醒我的妹妹,重新启动系统后,她将获得 47% 的速度提升。

关注点

我知道可以通过低级 I/O 端口(汇编程序中的 in 和 out 指令)访问 NVRAM。最近的 Windows 版本显然不允许从用户空间访问这些端口,因此需要一个驱动程序来完成这项工作。 我以前已经使用过强大的WinRing0 库,所以我再次将其用于这个有趣的底层操作。

那么,我们如何使用这些 I/O 端口访问 NVRAM 呢? 事实证明,NVRAM 的前 128 个字节是通过将字节偏移量(0 到 127)写入 I/O 端口 0x70,然后从 I/O 端口 0x71 读取字节或将其新值写入 I/O 端口 0x71 来访问的。

我有点担心,因为 BIOS 刷新工具显示了 16 KB 的 NVRAM,而且我没有找到有关访问所有这些其他字节的信息。 幸运的是,我了解到前 14 个字节是为 RTC(实时时钟)保留的,并且 BIOS 设置通常存储在这 14 个字节之后。由于可以从 I/O 端口 0x70/0x71 访问 114 个有用的字节,即超过 900 位,我只是希望它足以包含紧密压缩的设置以及末尾的校验和。

因此,我尝试了不同的 BIOS 设置(仅修改了 FSB 选项),并将 NVRAM 中的 114 个字节转储到文件中。 通过比较这些转储,我非常确定这是可以的,因为它们在两个区域(每个区域 1-2 个字节)互不相同 - 即,与 FSB 设置相关的位和末尾的校验和。

在该系统上,恢复转储(即将其写入 NVRAM)有效。 但是,请记住,这完全取决于你的 BIOS,因此请首先执行一些测试(转储和比较)。 如果出现问题,你可能需要手动重置 NVRAM,方法是在主板上设置跳线或按下按钮(通常称为 Clear CMOS)。

摘要

嗯,我不认为很多人会发现这个工具有用:D - 在我拿到这块 K7S5A 之前,我自己也没听说过主板会不时丢失设置。 但是,我发现能够从 Windows 内部访问这种底层内容很有趣(Linux 提供了 nvram 模块和一个特殊的 /dev/nvram 文件)- 我希望你们中的一些人可以使用这些信息。

© . All rights reserved.