繁体   English   中英

使用C语言更改BIOS设置

[英]Change BIOS settings using the C language

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

您可以通过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 rev。 (当添加/删除新的菜单选项时,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位置以实现传统兼容性。)

简答:不。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM