Boards
The boards Start a project and cargo generate offer. This
table is generated from the same file they use,
template/boards.toml.
| Board | Build | Target | Kernel file | Load address | Firmware |
|---|---|---|---|---|---|
| Raspberry Pi 3 (B, B+, A+) | 32-bit | armv7a-none-eabi | kernel7.img | 0x8000 | bootcode.bin start.elf fixup.dat |
| 64-bit | aarch64-unknown-none-softfloat | kernel8.img | 0x80000 | bootcode.bin start.elf fixup.dat | |
| Raspberry Pi 4 (B, 400) | 32-bit | armv7a-none-eabi | kernel7.img | 0x8000 | start4.elf fixup4.dat |
| 64-bit | aarch64-unknown-none-softfloat | kernel8.img | 0x80000 | start4.elf fixup4.dat | |
| Raspberry Pi 2 (B) | 32-bit | armv7a-none-eabi | kernel7.img | 0x8000 | bootcode.bin start.elf fixup.dat |
| Raspberry Pi Zero (Zero, Zero W) | ARMv6 | armv6-none-eabi | kernel.img | 0x8000 | bootcode.bin start.elf fixup.dat |
| Raspberry Pi 1 (A, B, A+, B+) | ARMv6 | armv6-none-eabi | kernel.img | 0x8000 | bootcode.bin start.elf fixup.dat |
The kernel filename isn’t a convention. The firmware picks the one it
looks for from the CPU it finds (and, on a Pi 3 or 4, from arm_64bit in
config.txt). Finding none, it stops without printing anything, which
looks exactly like a dead board.
ARMv6 needs nightly Rust. armv6-none-eabi is a tier-3 target with
no precompiled core, so the project builds one with -Z build-std. The
generated project’s rust-toolchain.toml takes care of it.
The Pi 4 has no interrupt controller in rpi-hal yet, so Embassy’s time driver can’t run there. The template’s starter project doesn’t use interrupts, so it runs on every board above.
The Raspberry Pi Zero 2 W and the Pi 5 aren’t supported yet; both are planned. See Supported devices.