This repository was archived by the owner on Oct 15, 2026. It is now read-only.
Repository navigation
Added
bundle --uploadshows 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
bundlethat 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 useresident-fatin place ofembedded-sdmmc,
so long file names work.sd-write ./kickstart.toml /kickstart.toml
used to fail with "filesystem error", becauseembedded-sdmmcspeaks
only 8.3 names; it now createskickstart.toml, and a PC sees that
name.sd-read,sd-deleteandsd-mkdirtake long names too,
sd-listshows 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-writereceives 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-readlikewise
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 failedsd-writecommit 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-listhas 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-hal0.9.0, up from 0.6.0, for itsresident-fatfeature and
sd::SdBlockDevice, onresident-fat0.3 — whosemount_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 wheremem-writeis
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
(themakerecipe 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-loaderThe host CLI is a separate install: cargo install rpi-loader.