查询和设置BIOS属性的API

假设我想在Linux中更改我的计算机的BIOS中的设置(假设Ubuntu 11是重要的)。存在哪些types的API可以查询和操作BIOS设置?

而且,做这种发展的资源是什么呢?

Solutions Collecting From Web of "查询和设置BIOS属性的API"

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

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

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

虽然这不是一个API,但有了这个,你可以直接访问CMOS内存并制作你自己的API。 对于一个快速的程序,我会建议获得一个API。 在这种情况下看看@ Nemo的回答。

flashrom是从Linux内部刷新新BIOS映像的实用工具。

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

这个页面提供了关于这两个的很好的信息。

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

这一切都取决于“BIOS设置”的意思。

在传统的PC / AT,PC机固件中,“BIOS设置”保存在与实时时钟芯片相关的非易失性RAM中。 关于NVRAM的单个字节代表什么(尽管有一些常见的约定),它们的含义从固件供应商到固件供应商,从固件版本到固件版本都是不同的。 用于操作RTC NVRAM的工具包括Linux和FreeBSD /dev/nvram设备。

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

在具有EFI固件的现代PC上,“BIOS”NVRAM通常是存储EFI固件环境变量的地方。 这些可以通过诸如uefivars的工具来操纵,依次依赖于/sys/firmware/efi文件系统 (虽然有些间接地,它有效地将变量的内核模式EFI API导出到应用程序模式)。 EFI变量是现代EFI固件的“设置”,从EFI Boot Manager菜单(参考efibootmgr实用程序)到构成系统控制台的设备控制了一系列事物。

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

虽然不是技术上的API,但他们是做你所问的方法。

它们是供应商特定的,并且是服务器。

  • 英特尔服务器:Syscfg实用程序
  • 戴尔PowerEdge C服务器:setupbios或其syscfg
  • HP服务器:CONREP实用程序