#linux-terminal #settings #uefi #bios #read-write #ilo #hii-db

bin+lib uefisettings

用于从Linux终端读取/获取/提取和写入/更改/修改BIOS/UEFI设置的工具

5 个版本

0.1.4 2024年1月10日
0.1.3 2024年1月3日
0.1.2 2024年1月3日
0.1.1 2024年1月3日
0.1.0 2023年7月19日

58硬件支持

Download history 116/week @ 2024-04-20 163/week @ 2024-04-27 94/week @ 2024-05-04 80/week @ 2024-05-11 201/week @ 2024-05-18 68/week @ 2024-05-25 123/week @ 2024-06-01 58/week @ 2024-06-08 49/week @ 2024-06-15 101/week @ 2024-06-22 84/week @ 2024-06-29 70/week @ 2024-07-06 771/week @ 2024-07-13 923/week @ 2024-07-20 952/week @ 2024-07-27 865/week @ 2024-08-03

每月3,536 次下载

BSD-3-Clause

735KB
6K SLoC

包含 (Zip文件, 155KB) doc/media/blobstore_transport.vsdx

uefisettings

关于

uefisettings 是一个用于在本地主机上读取和写入BIOS设置的工具。它目前支持两种接口

  • HiiDB(用于OCP,也部分支持其他平台)
  • iLO BlobStore(用于HPE)

安装

cargo install uefisettings

手动构建

cd /tmp
git clone https://github.com/linuxboot/uefisettings
cd uefisettings
cargo install --path .
~/.cargo/bin/uefisettings --help

用法示例

重置TPM

uefisettings hii set 'Pending operation' 'TPM Clear'

检查TXT是否启用

if [[ "$(uefisettings hii get --json 'Enable Intel(R) TXT' | jq -r '.responses | .[].question.answer')" = "Enable" ]]; then
    # Do something if TXT is enabled
fi

可用命令

SUBCOMMANDS:
    get         Auto-identify backend and get the current value of a question
    help        Print this message or the help of the given subcommand(s)
    hii         Commands which work on machines exposing the UEFI HiiDB
    identify    Auto-identify backend and display hardware/bios-information
    ilo         Commands which work on machines having HPE's Ilo BMC
    set         Auto-identify backend and set/change the value of a question

hii:

SUBCOMMANDS:
    extract-db      Dump HiiDB into a file
    get             Get the current value of a question
    help            Print this message or the help of the given subcommand(s)
    list-strings    List all strings-id, string pairs in HiiDB
    set             Set/change the value of a question
    show-ifr        Show a human readable representation of the Hii Forms

ilo:

SUBCOMMANDS:
    get                Get the current value of a question
    help               Print this message or the help of the given subcommand(s)
    set                Set/change the value of a question
    show-attributes    List bios attributes and their current values

使用自动化更改UEFI设置

要从Linux终端更改BIOS设置,通常有以下几种方式

  • Open Compute Project 硬件上 - 读取/解析名为Hii的二元数据库(由UEFI规范定义)并操作 /sys 文件系统中的二元文件以更改设置。这种方法也可能在一些非OCP消费硬件(如您的笔记本电脑)上工作。
  • 在惠普企业硬件上 - 使用惠普的redfish API读取/写入设置。这需要存在惠普的iLO BMC。
  • 使用不同的专有工具,如AMI的SCELNX或HPE的conrep。但是,这些需要加载额外的内核模块。

但是,这个工具是一种统一的开源方法,可以用于任何平台上操作UEFI设置。


工作原理

对于OCP硬件

  • 在从 /dev/mem 获取偏移量后,从 efivarfs 提取HiiDB。
  • 库(hii)在Rust中部分实现了UEFI Hii规范。
  • 它将HiiDB操作码解析成类似DOM树的结构,可以由机器和人类读取。
  • 它可以向HiiDB提出有关UEFI设置的问题并获取其答案。
  • 通过计算正确的偏移量并将数据写入 efivarfs 中的条目来更改UEFI设置。

对于HPE硬件

  • 与OCP硬件不同,HPE不将HiiDB暴露在 efivarfs 中。
  • 相反,他们提供了一个通过iLO使用Redfish API更改UEFI设置的方法。
  • Redfish可以通过
    • 标准网络协议如TCP进行访问,但这需要认证凭证和对BMC的网络访问。
    • 通过直接访问/dev/hpilo。这不需要认证凭证。惠普没有提供关于这种方法的相关文档,但他们提供了一款开源的ilorest CLI工具,该工具调用一个名为ilorest_chif.so的闭源动态加载共享库,从而实现神奇的功能。这里使用的传输方法(而非TCP)被称为Blobstore2。
  • 我们被禁止反汇编ilorest_chif.so,但我们通过查看Apache2许可的HPE的Python ilorest CLI工具(它调用了该工具),发现了其大部分功能签名。
  • Blobstore2通信逻辑和到ilorest_chif.so的Rust绑定在ilorest库中实现。请使用开源实现而非ilorest_chif.so以避免许可问题。

开源ilorest研究结果已发布在doc/ilorest.md中。


更新Thrift文件

如果需要更新thrift目录内的文件,那么

  1. 安装fbthrift编译器:cargo install fbthrift_compiler && (sudo dnf install -y fbthrift || sudo apt install -y fbthrift)
  2. 更新.thrift文件。
  3. 运行~/.cargo/bin/compiler path/to/updated/file.thrift
  4. 运行mv lib.rs path/to/generated/rust/file.rs

例如

# Install fbthrift compiler
cargo install fbthrift_compiler
sudo dnf install -y fbthrift

# Update file
vi thrift/uefisettings_spellings_db.thrift

# Re-generate the rust file from the thrift file.
cargo install fbthrift_compiler
~/.cargo/bin/compiler thrift/uefisettings_spellings_db.thrift
mv lib.rs thrift/rust/uefisettings_spellings_db_thrift/uefisettings_spellings_db.rs

依赖项

~9–19MB
~271K SLoC