用于查询和设置bios属性的API

时间:2011-06-06 23:22:20

标签: c linux operating-system bios

假设我想在Linux中更改计算机BIOS中的设置(如果重要的话,请说Ubuntu 11。)有哪些类型的API可用于查询和操作BIOS设置?

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

4 个答案:

答案 0 :(得分:7)

  

CMOS存储器存在于正常地址空间之外,不能存在   直接包含可执行代码。它可以通过IN和OUT到达   端口号为70h(112d)和71h(113d)的命令。要读取CMOS字节,   使用要读取的字节的地址执行OUT到端口70h   然后,来自端口71h的IN将检索所请求的信息。

您可以使用inboutb宏来读取和写入这些端口,以获取存储在CMOS中的整个BIOS设置。对于存储的设置存储格式,请查看:http://bochs.sourceforge.net/techspec/CMOS-reference.txt

这些映射实际上取决于供应商,但大多数应该是常见的。

虽然这不是一个API,但是通过它可以直接访问CMOS内存并制作自己的API。对于快速程序,我建议获取API。在这种情况下,请查看@ Nemo的答案。

答案 1 :(得分:5)

flashrom是一个用于在Linux中刷新新BIOS映像的实用程序。

要自行修改BIOS设置,可以使用/ dev / nvram设备。

This page提供了有关这两者的良好信息。

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

答案 2 :(得分:4)

这一切都取决于BIOS设置"的含义。

在传统的PC / AT,PC机固件," BIOS设置"保存在与实时时钟芯片相关的非易失性RAM中。关于NVRAM的各个字节代表什么(虽然有几个常见的约定),它们的含义从固件供应商到固件供应商,从固件发布到固件发布,都有很多 no 标准化。用于操作RTC NVRAM的工具包括Linux和FreeBSD /dev/nvram设备。

但这不是现代PC上唯一的非易失性RAM。 " BIOS ROM"实际上,也是非易失性RAM。 (人们不能在正常操作中写入它。必须执行魔术咒语才能启用写入周期。但它不是只读内存。)后来的PC固件使用更大的(可能最多用于设置存储的16MiB而非256字节的非易失性RAM。系统管理数据(如扩展系统配置数据和臭名昭着的DMI池)存储在那里。用于操作这些数据的工具包括使用dmidecode的Linux /dev/mem实用程序。

在具有EFI固件的现代PC上," BIOS" NVRAM通常是存储EFI固件环境变量的位置。这些可以通过诸如uefivars之类的工具来操纵,而这些工具又rely upon the /sys/firmware/efi filesystem(有效地,虽然有点间接地,exports the kernel-mode EFI API for variables到应用程序模式)。 EFI变量是"设置"现代EFI固件,控制从EFI Boot Manager菜单(例如efibootmgr实用程序)上的内容到构成系统控制台的设备。

答案 3 :(得分:2)

我正在尝试策划一个工具列表,以便在我的wiki上执行此操作: https://wiki.xkyle.com/Configuing_BIOS_From_Linux

虽然不是技术上的API,但它们是做你要求的方法。

它们是特定于供应商的,也适用于服务器。

  • Intel服务器:Syscfg实用程序
  • Dell PowerEdge C服务器:setupbios或他们的syscfg
  • HP服务器:CONREP实用程序