#bootloader #secure #bare-metal #cortex

nightly no-std bin+lib loadstone

Cortex-M MCU 的便携式安全引导加载程序

1 个稳定版本

1.0.0 2021 年 7 月 8 日

#1707嵌入式开发

MIT 许可证

130KB
2.5K SLoC

Loadstone 安全引导加载程序

Loadstone 是由 Bluefruit Software 开发的免费和开源的 安全引导加载程序,用于裸机和 RTOS 应用程序。它高度模块化,以确保占用最小的内存(小于 32kb 的 CRC 图像验证,小于 64kb 的 ECDSA 图像签名),易于编译和移植到不同的 MCU 架构。

Loadstone 基于 blue_hal crate,它是由 Bluefruit 开发的一系列 Rust 硬件抽象和驱动程序。

Loadstone 的独特特性之一是其 构建器应用程序。这个图形应用程序允许您定义应用程序的功能集合和精确的内存布局,然后触发自动的 Github Actions 构建。无需工具或安装,只需导航 GUI,即可准备好最终的二进制文件以供烧录!

支持的功能

Loadstone 当前支持

  • 多个图像库以存储、复制、验证和引导固件图像。图像库完全可配置且灵活。
  • 支持可选的外部闪存芯片。
  • 黄金镜像回滚。
  • 自动或应用程序触发的更新。
  • 通过 CRC 检查确保图像完整性。
  • 通过 ECDSA P256 签名验证确保图像完整性和真实性(在 tools/ 目录下提供了图像签名工具。)
  • 串行通信用于引导过程报告。
  • 串行恢复模式。
  • 间接引导加载程序-应用程序和应用程序-引导加载程序通信。
  • 配套演示应用程序,具有功能丰富的 CLI,可在目标上测试所有 Loadstone 功能。

这些功能是模块化的,其中一些可能仅适用于特定的端口。目前,支持量最大的端口是 stm32f412 系列。

架构

Loadstone 由一个抽象的通用层和一个端口层组织。

端口位于 loadstone/src/ports/ 下,可以是完全手动定义的或依赖于代码生成。依赖于代码生成的那些端口需要由 loadstone_front 应用程序生成的配置文件。

要了解更多关于代码生成以及如何在使用Loadstone时何时/如何使用它,请查看代码生成文档部分。

构建

构建Loadstone需要在LOADSTONE_CONFIG环境变量中嵌入配置。如果您只是想运行单元测试或构建不需要代码生成的Loadstone(即您在loadstone/src/ports中手动定义的板),则可以将其设置为空字符串。

# Run unit tests
LOADSTONE_CONFIG='' cargo test

# Building a codegen port
LOADSTONE_CONFIG=`cat my_stm32_config.ron` cargo b loadstone --features stm32f412

# Building a manual port
LOADSTONE_CONFIG='' cargo b loadstone --features my_manual_port

依赖

~6–14MB
~340K SLoC