In order to boot from USB, we need to install a beta version of the bootloader. This is done using the
rpi-eeprom-update command from a shell. To get started, you'll need to boot your Raspberry from an SD card. If you need help with this step, follow our guide on installing Raspbian (now Raspberry Pi OS) on your Raspberry Pi.
With Raspberry Pi OS installed and the SD card mounted, plug in the Raspberry Pi and boot.
Open the file /etc/default/rpi-eeprom-update to edit. This can be done using
nano like this:
sudo nano /etc/default/rpi-eeprom-update
Change "critical" to "beta". The file should look like this:
To install the bootloader use:
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/beta/pieeprom-2020-05-27.bin
Note: You may want to use a newer version of the pieeprom file if its available. To find a newer version you can use the following:
ls -lha /lib/firmware/raspberrypi/bootloader/beta/ | grep pieeprom
After running the
rpi-eeprom-update command, run:
After the Pi reboots, connect again using SSH so you can confirm your changes took effect. After connecting run:
You should expect to see the following:
May 27 2020 18:47:29 version d648db3968cd31d4948341e09cb8a925c49d2ea1 (release) timestamp 1590601649
Confirm the date matches the date in the beta pieeprom file.
At this point, you need to install Raspberry Pi OS on your USB drive. You can use Raspberry Pi Imager to do this as well. Just plug in your USB drive and select it under SD Card.
And just like your SD card install, now is the time to enable SSH and add your Wi-Fi credentials, if applicable.
You'll need to grab the
.elf files from a May 22, 2020 commit on the raspberrypi/firmware GitHub repo. The latest firmware does not work.
Note to self: when the latest firmware works to update this guide. :)
The easiest way to do this is to download the repository at the specified commit. To do this click Clone or download then Download ZIP. Then unzip the firmware.
Now, with your USB drive still mounted on your computer, run the following:
cp <path_to_firmware>/*.dat <path_to_boot_directory> cp <path_to_firmware>/*.elf <path_to_boot_directory>
For example, on macOS I'm running:
cp ~/Downloads/firmware-a6c9b6b48ce86ef2527586a50760d52f1b33f642/boot/*.dat /Volumes/boot/ cp ~/Downloads/firmware-a6c9b6b48ce86ef2527586a50760d52f1b33f642/boot/*.elf /Volumes/boot/
Now, you should be able to properly boot from your USB drive. Begin by shutting down your Pi and removing your SD card. Then unmount the USB drive from the computer and insert it into your Raspberry Pi. Then boot the Pi once again.
If you configured Wi-Fi and SSH, you should be able to find your Pi on the network and connect!