7 个版本

0.3.1 2019 年 8 月 7 日
0.3.0 2019 年 8 月 6 日
0.2.0 2019 年 7 月 24 日
0.1.3 2019 年 3 月 6 日
0.1.0 2018 年 12 月 20 日

#1693 in 嵌入式开发

每月 21 次下载

MIT 许可证

115KB
2K SLoC

GBL 固件文件操作库

crates.io docs.rs Build Status

Rust 库,用于读取、创建和操作 .gbl 固件更新文件。

还可以查看这篇博客文章,了解基于类型状态的库 API 的简单介绍。

功能

  • 从原始应用程序镜像创建 GBL 文件
  • 解析现有 GBL 文件
  • 加密并签名 GBL 文件
  • 解密 GBL 文件并验证嵌入的签名
  • 为安全启动签名应用程序镜像
  • 简单命令行工具包装库

尚未支持

  • 引导加载程序镜像
  • 自定义元数据部分

命令行使用

可以使用在此目录中运行 cargo install 来安装命令行工具 gbl。如果您不想安装它,也可以使用 cargo run 来运行它。在这种情况下,将 gbl 命令替换为 cargo run --(例如,cargo run -- create --help)。

工具当前支持以下操作

SUBCOMMANDS:
    app-image    Raw application image manipulation.
    create       Create a GBL file from raw application data.
    decrypt      Decrypts an encrypted GBL file with a shared AES key.
    dump         Parses an existing GBL file and dumps its structure to the console.
    encrypt      GBL firmware file handling library
    help         Prints this message or the help of the given subcommand(s)
    sign         Sign a GBL file using a private ECDSA key.
    verify       Verifies the signature of a signed GBL file.

开发

模糊测试

您可以使用以下方式运行包含的模糊测试目标(gblapp_image

cargo +nightly fuzz run gbl

默认情况下,libFuzzer 不会生成超过 4096 字节的输入。为了解决这个问题,请使用此命令代替(当然,您可以使用任何最大长度)

cargo +nightly fuzz run gbl -- -max_len=100000

请注意,模糊测试目标在 CI 上未进行测试,并且可能会在 API 更改时偶尔中断。如果发生这种情况,请随时修复它们!

基准测试

基准测试使用 criterion,应该很简单。只需执行 cargo bench

火焰图

为特定基准生成火焰图

perf record --call-graph=dwarf target/release/deps/bench-<HASH> --measure-only '<BENCHMARK NAME>'
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

确保使用Cargo在执行cargo bench时显示的相同的<HASH>

依赖项

~13–22MB
~408K SLoC