25 个版本

0.25.7 2024 年 6 月 23 日
0.25.6 2023 年 10 月 26 日
0.25.5 2023 年 5 月 8 日
0.25.4 2022 年 12 月 7 日
0.20.4 2021 年 7 月 29 日

#235Cargo 插件

每月 37 次下载

MIT/Apache

685KB
7K SLoC

cargo-pio = Cargo + PlatformIO

使用 PlatformIO 构建 Rust 嵌入式项目!

cargo-pio 是一个 cargo 子命令 cargo pio,同时也是一个库 crate。

为什么?

如果您正在构建一个混合 Rust/C 项目,或者需要调用板子供应商 SDK 的纯 Rust 项目,cargo-pio 可能会帮到您。

以 PlatformIO 为首的构建

在此模式下,您的嵌入式项目将是一个 PlatformIO 项目 一个 Rust 静态库 crate

  • 项目构建由 PlatformIO 触发(例如,使用 pio run -t debugcargo pio build),PlatformIO 将调用 Cargo 来构建 Rust 库 crate;
  • cargo-pio 作为 cargo 子命令用于创建项目的布局;
  • 此类项目在 cargo-pio 帮助文档中被称为 'PIO > Cargo 项目';

示例

  • cargo install cargo-pio(或 cargo install --git https://github.com/ivmarkov/cargo-pio.git cargo-pio
  • cargopio installpio
  • 创建新的 Cargo/PIO 项目
    • cargopio new --board <your-board> <path-to-your-new-project>
  • 进入您新创建的项目
    • cd<path-to-your-new-project>
  • 调试模式构建
    • 使用 pio run -t debugcargo pio build
  • 在发布模式下构建
    • 使用 pio run -t releasecargo pio build --release
  • 请注意,一旦安装了 PlatformIO 并创建了 PIO->Cargo 项目,您实际上就不需要 cargo-pio

调用 cargo pio --help 以了解 cargo-pio 支持的各种命令。

Cargo 首次构建

  • 在这种操作模式下,您的嵌入式项目是一个 纯 Cargo 项目,PlatformIO 不会干涉
  • cargo-pio 作为库 crate 使用,并通过 build.rs 脚本程序化驱动。

但是,Cargo 首次构建不太灵活。它们仅适用于构建和(与)“SYS” crate 链接,该 crate 代表您板卡的供应商 SDK。如果您依赖于其他 C 库,您应该使用 PlatformIO 首先即 'PIO->Cargo' 项目。

示例

  • 检查 esp-idf-sys SYS crate(由 rust-esp32-std-hello 二进制 crate 使用)。它演示了
    • 通过程序化驱动 PlatformIO 自动下载和安装 SDK(在这种情况下为 ESP-IDF);
    • 使用 Bindgen 自动生成 ESP-IDF SDK 的不安全绑定。例如,esp-idf-halesp-idf-svc crate 依赖于这些绑定来实现更高层次的安全 Rust 抽象;
    • 为 Rust 链接器自动生成 Rust 链接标志,以便将 ESP-IDF SDK 透明地链接到您将烧录的二进制 Rust crate 中。

依赖项

~13-26MB
~419K SLoC