假设我想在Linux中更改计算机BIOS中的设置(如果重要的话,请说Ubuntu 11。)有哪些类型的API可用于查询和操作BIOS设置?
此外,进行此类开发的资源是什么?
答案 0 :(得分:7)
CMOS存储器存在于正常地址空间之外,不能存在 直接包含可执行代码。它可以通过IN和OUT到达 端口号为70h(112d)和71h(113d)的命令。要读取CMOS字节, 使用要读取的字节的地址执行OUT到端口70h 然后,来自端口71h的IN将检索所请求的信息。
您可以使用inb
和outb
宏来读取和写入这些端口,以获取存储在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,但它们是做你要求的方法。
它们是特定于供应商的,也适用于服务器。