#elf-file #avr #firmware #flashing #flash #cargo #micronucleus

app elf2nucleus

使用 micronucleus 从 elf 文件中烧录 AVR 固件

1 个不稳定版本

0.1.0 2024年1月5日

#1916 in 命令行工具

GPL-3.0 或更新

55KB
135 代码行

包含 (ELF 可执行文件/库, 135KB) test_data/attiny85-hello-world.elf

elf2nucleus

将 micronucleus 集成到 cargo 构建系统中,从 elf 文件中烧录 AVR 固件。

# ./.cargo/config.toml
[target.'cfg(target_arch = "avr")']
# Choose a default "cargo run" tool
runner = "elf2nucleus"

将此添加到您的 cargo 配置后,您可以使用 cargo-native 运行 命令进行烧录,无需进一步的 Makefile

RUSTC_BOOTSTRAP=1 cargo run --release

请注意,elf2nucleus 基于 micronucleus 构建,因此也需要安装。

本项目受 elf2uf2-rs 的启发,该工具用于 rp2040。

还要感谢 @cyber-murmel,他激励我开发此项目,并在 AVR 开发方面给予我帮助。

使用 cargo 构建固件

要构建一个 AVR 固件仓库,通常只需运行

RUSTC_BOOTSTRAP=1 cargo build --release

cargo,然后编译固件并将其放入类似于以下的 elf 容器文件

target/avr-attiny85/release/attiny85-hello-world.elf

对于此 .cargo/config.toml 需要正确配置,一个示例仓库可以在 github.com/kpcyrd/attiny85-hello-world 找到。

使用 elf2nucleus 进行烧录

要在没有 cargo 的情况下调用 elf2nucleus,您可以像这样运行它

elf2nucleus ./attiny85-hello-world.elf

如果您不想使用 elf2nucleus 进行烧录,而是从 elf 文件读取固件到原始二进制文件,您可以指定一个额外的输出文件名

elf2nucleus ./attiny85-hello-world.elf ./firmware.bin
micronucleus --type raw --run --no-ansi ./firmware.bin

直接使用 Rust 与 micronucleus

在撰写本文时,由于 micronucleus 不能从 elf 文件中读取,因此无法将 micronucleus 配置为 "cargo run" 工具。

如果您想避免使用 elf2nucleus,可以使用 avr-objcopy 自己准备固件文件

avr-objcopy --output-target=ihex target/avr-attiny85/release/attiny85-hello-world.elf target/avr-attiny85/release/attiny85-hello-world.hex
micronucleus --timeout 60 --run --no-ansi target/avr-attiny85/release/attiny85-hello-world.hex

许可证

GPL-3.0--更新

依赖项

~4.5–6.5MB
~114K SLoC