Skip to content
This repository was archived by the owner on Oct 15, 2026. It is now read-only.

rpi-loader 0.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Oct 20:07
· 1 commit to main since this release

Added

  • bundle --upload shows its progress: megabytes sent, percent and
    rate on one redrawn line, then a note that the wait which follows is
    the board installing. Drawn only when stdout is a terminal.

Fixed

  • Ctrl-C stops bundle --upload. The Ctrl-C handler, which only sets
    a flag the serial commands poll, was installed for every command, so a
    bundle that never polls it ignored Ctrl-C for as long as the body was
    still being sent. It is now installed only once a command is about to
    open the serial link.

Changed

  • The sd-* commands use resident-fat in place of embedded-sdmmc,
    so long file names work.
    sd-write ./kickstart.toml /kickstart.toml
    used to fail with "filesystem error", because embedded-sdmmc speaks
    only 8.3 names; it now creates kickstart.toml, and a PC sees that
    name. sd-read, sd-delete and sd-mkdir take long names too,
    sd-list shows them, and lookups match either the long name or its
    8.3 alias, case-insensitively.
  • The volume is the first FAT partition in the card's table, whichever
    slot it is in, rather than always slot 0 — or the whole card, when it
    has no partition table.
  • sd-write receives the whole file before writing any of it. The
    file lands contiguous and goes to the card one transfer per run instead
    of a command per 512-byte block, and an upload interrupted partway
    leaves the old file untouched instead of truncated. sd-read likewise
    reads the whole file before sending it, so a card error is a clean
    failure rather than a transfer that stops short. Both need the file to
    fit in the device's RAM.
  • A failure says why. sd-* errors that were all "filesystem error"
    are now named separately: a name FAT cannot store, a file that already
    exists, a file where a directory was needed or the reverse, a full
    card, the device out of memory, a card read/write failure, and no FAT32
    volume at all. A failed sd-write commit reports its cause rather than
    "write failed". "Filesystem error" is left for a volume found
    inconsistent. The CLI still names the old codes, for a loader flashed
    before this.
  • sd-list has no size limit. A listing was built in an 8 KiB
    buffer and refused beyond that; it is now allocated.
  • New files are stamped with the FAT epoch (1980-01-01) rather than a
    made-up 2026-01-01. The loader has no clock, and a fixed date that
    looks real is worse than one that is plainly a default.
  • rpi-hal 0.9.0, up from 0.6.0, for its resident-fat feature and
    sd::SdBlockDevice, on resident-fat 0.3 — whose mount_first_fat
    is now how the volume is found.
  • The firmware now has a heap, running from the top of the loader's
    stack to the top of the ARM's RAM. That is above where mem-write is
    allowed to write, so a kernel being loaded cannot overwrite it.
    Building the Pi 1 / Pi Zero image now needs -Z build-std=core,alloc
    (the make recipe passes it).

Images

Copy the image matching your board to the SD card's boot
partition, renamed to the filename in its own name:
kernel7.img (32-bit), kernel8.img (64-bit) or kernel.img
(ARMv6). The firmware loads one of those names and no others,
chosen by the CPU it finds, and a board handed the wrong one
stops without printing anything. Use kernel8.img only with
arm_64bit=1 in config.txt.

bcm2837 covers the Pi 2 v1.2 and Pi 3; bcm2711 covers the
Pi 4; bcm2835 covers the Pi 1 and Pi Zero, and is ARMv6, so it
has no 64-bit counterpart. Verify with
sha256sum -c SHA256SUMS.

rpi-loader-<version>.bash is the bash completion for the host
CLI, for installing without building it first:

sudo cp rpi-loader-<version>.bash \
  /usr/share/bash-completion/completions/rpi-loader

The host CLI is a separate install: cargo install rpi-loader.