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 在 硬件支持 中
每月3,536 次下载
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
目录内的文件,那么
- 安装fbthrift编译器:
cargo install fbthrift_compiler && (sudo dnf install -y fbthrift || sudo apt install -y fbthrift)
- 更新
.thrift
文件。 - 运行
~/.cargo/bin/compiler path/to/updated/file.thrift
。 - 运行
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