【问题标题】:APIs for querying and setting bios properties用于查询和设置 bios 属性的 API
【发布时间】:2011-09-09 16:32:20
【问题描述】:

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

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

【问题讨论】:

    标签: c linux operating-system bios


    【解决方案1】:

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

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

    This page 提供了关于这两个方面的良好信息。

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

    【讨论】:

      【解决方案2】:

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

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

      这些映射实际上是依赖于供应商的,但其中大部分应该是通用的。

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

      【讨论】:

        【解决方案3】:

        这一切都取决于“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 之类的工具进行操作,而rely upon the /sys/firmware/efi filesystem(这实际上是,虽然有些间接,exports the kernel-mode EFI API for variables 到应用程序模式)。 EFI 变量是现代 EFI 固件的“设置”,控制从 EFI 引导管理器菜单(参见 efibootmgr 实用程序)到构成系统控制台的设备等一系列内容。

        【讨论】:

          【解决方案4】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-07-22
            • 1970-01-01
            • 1970-01-01
            • 2021-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多