使用C语言更改BIOS设置

时间:2009-11-21 07:40:56

标签: c

我想知道我是否有办法编写一个C程序来改变RAM和GFX卡之间共享的内存量,或者一般如何联系BIOS设置?

2 个答案:

答案 0 :(得分:14)

您可以通过I / O端口70h和71h访问BIOS设置。 (某些芯片组还具有72/73或类似的扩展CMOS。)

您使用的操作系统是什么?如果您运行的是Windows,则无法直接从应用程序执行端口I / O,您必须编写内核模式驱动程序,或使用WinIO等第三方工具包。在Linux下,您可以使用/ dev / nvram来获取CMOS设置。 (假设Linux nvram驱动程序支持您的芯片组。否则使用/ dev / port。)

一旦得到CMOS位,下一个任务就是确定CMOS中的哪个位置对应于视频存储器设置。

以下是CMOS内存位置的(可悲的是不完整的)地图: http://ivs.cs.uni-magdeburg.de/~zbrog/asm/cmos.html

CMOS位置图非常特定于主板,BIOS和BIOS版本。 (当添加/删除新的菜单选项时,CMOS映射可以在BIOS转速之间切换。)也许您的主板供应商可以为您提供CMOS映射。他们有生成这种地图的工具(它是BIOS编译过程的一部分),但他们可能不愿意分享它。

如果没有贴图,还有其他方法可以确定CMOS中的哪些位代表视频内存大小。尝试转储具有各种内存大小的CMOS设置,并找出哪些位发生变化。

其他一些细节:

  1. 除了一些“标准”CMOS位之外,其中大多数都是非常依赖平台的,我希望你不打算用它来制作一个通用的应用程序。

  2. CMOS中的某些偏移处有校验和。更改CMOS值后,您必须修复校验和以反映更改。

  3. 更改设置后,它将不会生效到下一次重启(当BIOS读取CMOS设置并初始化芯片组时)。

  4. 这是英特尔芯片组吗?英特尔图形核心具有称为动态视频内存技术(DVMT)的神奇功能,可根据运行应用程序的图形密集程度调整视频内存使用量。 http://www.intel.com/support/graphics/sb/cs-010488.htm我不确定其他芯片组供应商是否有类似的技术。

  5. 在现代UEFI系统上抛出所有这些,这通常使用BIOS闪存芯片中的非易失性存储分区进行设置。 (在UEFI系统上填充了一些CMOS位置以实现传统兼容性。)

答案 1 :(得分:10)

简短回答:不。

答案很长:不要乱用用户的BIOS。这就是为什么没有API或类似的原因。我的电脑,我的设置。

相关问题