查询和设置BIOS属性的API

13

假设我想在Linux(比如Ubuntu 11)中更改计算机BIOS的设置。有哪些API可以让您查询和操作BIOS设置?

此外,进行此类开发的好资源是什么?

4个回答

7
CMOS内存存在于正常地址空间之外,不能直接包含可执行代码。可以通过端口号70h(112d)和71h(113d)的IN和OUT命令访问它。要读取CMOS字节,需要在端口70h上执行一个带有要读取字节地址的OUT操作,然后从端口71h上执行一个IN操作来检索请求的信息。
您可以使用“inb”和“outb”宏从这些端口读取和写入以获取存储在CMOS中的整个BIOS设置。有关存储设置内存格式,请参见:http://bochs.sourceforge.net/techspec/CMOS-reference.txt 这些映射实际上是供应商相关的,但大多数应该是通用的。
虽然这不是API,但通过它,您可以直接访问CMOS内存并创建自己的API。对于快速程序,我建议获得API。在这种情况下,请查看@Nemo的答案。

5

flashrom是一款在Linux内部刷写新BIOS镜像的实用工具。

若要修改BIOS设置本身,您可以使用/dev/nvram设备。

此页面提供了这两个方面的良好信息。

请注意,NVRAM内容的含义完全取决于BIOS本身; 它会因BIOS而异,甚至在同一BIOS的不同版本之间也会有所不同。 因此,您唯一可靠的做法就是将一个系统的BIOS设置保存并恢复到相同的系统上。


4
这完全取决于“BIOS设置”的含义。在传统的PC/AT、PC机固件中,“BIOS设置”保存在与实时时钟芯片相关联的非易失性RAM中。对于NVRAM的每个字节代表什么(尽管有一些常见的约定),以及它们的含义因固件供应商和固件版本而异,几乎没有标准化。用于操作RTC NVRAM的工具包括Linux和FreeBSD的/dev/nvram设备。
但这不是现代PC上唯一的非易失性RAM。实际上,“BIOS ROM”也是非易失性RAM。(在正常操作中不能直接写入。必须执行魔法咒语来启用写周期。但它不是只读存储器。)后来的PC固件使用这种更大的(最多可达16MiB,而不是256字节)非易失性RAM进行设置存储。系统管理数据,例如扩展系统配置数据和臭名昭著的DMI Pool,都存储在那里。用于操作这些数据的工具包括Linux的dmidecode实用程序,该实用程序使用/dev/mem。
在具有EFI固件的现代PC上,“BIOS” NVRAM通常是存储EFI固件环境变量的地方。这些变量可以通过工具(例如uefivars)进行操作,这些工具依赖于/sys/firmware/efi文件系统(这有效地间接地将内核模式EFI API导出到应用程序模式)。EFI变量是现代EFI固件的“设置”,控制从EFI启动管理器菜单(参见efibootmgr实用程序)到哪些设备构成系统控制台的一系列事物。

3
我正在尝试在我的维基上整理一份工具列表,以完成以下操作:https://wiki.xkyle.com/Configuing_BIOS_From_Linux 虽然它们不是技术上的API,但它们是解决您问题的方法。
它们是供应商特定的,适用于服务器。
  • Intel服务器:Syscfg实用程序
  • Dell PowerEdge C服务器:setupbios或其syscfg
  • HP服务器:CONREP实用程序

已收藏并点赞! - Tripp Kinetics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接