【问题标题】:Change BIOS settings using the C language使用 C 语言更改 BIOS 设置
【发布时间】:2015-03-19 05:52:10
【问题描述】:

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

【问题讨论】:

标签: c


【解决方案1】:

您可以通过 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 设置,并找出哪些位发生了变化。

其他一些细节:

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

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

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

  4. 在现代 UEFI 系统上将所有这些都扔到窗外,该系统通常使用 BIOS 闪存芯片中的非易失性存储分区进行设置。 (填充一些 CMOS 位置是为了在 UEFI 系统上实现旧版兼容性。)

【讨论】:

    【解决方案2】:

    简短回答:不。

    长答案:不要弄乱用户的 BIOS。没有 API 或类似的东西可以做到这一点是有原因的。我的电脑,我的设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 2015-06-19
      • 2015-10-05
      • 2011-02-05
      • 1970-01-01
      • 2010-11-26
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多