13

假设我想在 Linux 中更改我计算机的 BIOS 中的设置(如果重要的话,假设是 Ubuntu 11。)存在哪些类型的 API 可以让您查询和操作 BIOS 设置?

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

4

4 回答 4

7

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

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

这些映射实际上是依赖于供应商的,但它们中的大多数应该是通用的。

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

于 2011-06-07T10:18:11.607 回答
5

flashrom is a utility for flashing a new BIOS image from within Linux.

To modify the BIOS settings themselves, you can use the /dev/nvram device.

This page provides good information on both of these.

Note that the meaning of the NVRAM contents depends entirely on the BIOS itself; it will vary from BIOS to BIOS and even between revisions of the same BIOS. So the only thing you can reliably do is save the BIOS settings on one system and restore them onto an identical system.

于 2011-06-07T00:40:48.773 回答
4

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

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

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

在具有 EFI 固件的现代 PC 上,“BIOS”NVRAM 通常是存储 EFI 固件环境变量的位置。这些可以通过诸如 之类的工具来操作,uefivars而这些工具又依赖于/sys/firmware/efi文件系统(虽然有些间接,但它有效地将用于变量的内核模式 EFI API 导出到应用程序模式)。EFI 变量是现代 EFI 固件的“设置”,控制从 EFI 引导管理器菜单(参见efibootmgr实用程序)上的内容到构成系统控制台的设备等一系列内容。

于 2011-06-29T15:11:51.283 回答
2

我正在尝试在我的 wiki 上整理一个工具列表来执行此操作: https ://wiki.xkyle.com/Configuing_BIOS_From_Linux

虽然从技术上讲不是 API,但它们是执行您所要求的方法的方法。

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

  • 英特尔服务器:Syscfg 实用程序
  • Dell PowerEdge C 服务器:setupbios 或其 syscfg
  • HP 服务器:CONREP 实用程序
于 2013-02-08T22:40:50.863 回答