By default EEPROM updates are applied automatically by the system. In brief summary, that upgrade process works as follows:
apt
downloads new firmware for the EEPROM when it is available
- The downloaded firmware is packaged as
*.bin
files, and they are saved to one of three (3) directories under /lib/firmware/raspberrypi/bootloader
- Once the new firmware is downloaded, it is written to the EEPROM during the next
reboot
.
You can verify the firmware version currently installed for both the bootloader and the vl805 USB firmware using the rpi-eeprom-update
script as follows:
$ sudo rpi-eeprom-update
BOOTLOADER: up to date
CURRENT: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
LATEST: Wed 11 Jan 17:40:52 UTC 2023 (1673458852)
RELEASE: stable (/lib/firmware/raspberrypi/bootloader/stable)
Use raspi-config to change the release.
VL805_FW: Dedicated VL805 EEPROM
VL805: up to date
CURRENT: 000138c0
LATEST: 000138c0
Alternatively, the following command will give you the installed firmware status (as above) and the status of the systemd
service that automatically updates the firmware:
$ systemctl status rpi-eeprom-update
Many users will not need to read any further; the default configuration will maintain your EEPROM firmware at the version considered to be safest and most reliable. If you're interested in alternatives to this default, read on.
There are other relevant details:
1. Firmware Release Streams
There are 3 firmware release streams that reflect 3 different maturity levels of the firmware. They are segregated into 3 sub-directories under /lib/firmware/raspberrypi/bootloader/
as follows:
old name |
new name |
"maturity" |
beta |
beta |
Least mature |
stable |
latest |
Medium maturity |
critical |
default |
Most mature |
Notice that soft links have been added to /lib/firmware/raspberrypi/bootloader/
that provide redirection for the new names to the old names; this should help minimize the confusion created by re-naming the release streams.
2. Choosing your default release stream:
For many people, the default, automatic firmware update process works best. If you do nothing to change it, this process will cause apt
to download (but not apply) all firmware updates as they become available. The latest version from the critical/default channel will then be applied during the next reboot
.
But you may decide that you want to keep your firmware a bit more current than the critical/default stream. If you decide that you wish to follow the stable/latest stream, you can change that as follows:
Open the file at /etc/default/rpi-eeprom-update
in your editor, and replace (or add) the following line:
FIRMWARE_RELEASE_STATUS="latest"
Of course, you may elect to follow the beta release stream instead. Which ever stream you choose, this will put your firmware upgrades on autopilot, with the caveat that a reboot
is required to actually apply the firmware in the file to the EEPROM.
Another option you may choose is to perform no firmware upgrades at all! There are two methods available to freeze your firmware revision temporarily or permanently:
- mask the
systemd
auto-update process:
sudo systemctl mask rpi-eeprom-update
3. Manual EEPROM firmware Upgrades & Retrogades:
For some, there may be occasions which demand a manual firmware upgrade. For example, a new feature is introduced, and you cannot wait for this feature to reach maturity and become part of the critical/default stream. Or, you may have applied a firmware upgrade, then concluded that it has created a problem and the firmware must be restored to a previous version.
The RPi organization's GitHub repo contains a set of release notes for the bootloader EEPROM updates. This can be very helpful wrt manual upgrade decisions.
In general, firmware upgrades AND firmware retrogrades are reliably performed using the rpi-eeprom-update
script. As always, users should refer to the system manuals for detailed usage guidance; i.e. read man rpi-eeprom-update
before undertaking any upgrades or retrogrades.
Pay particular attention to the OPTIONS in man rpi-eeprom-update
. Two in particular are -a
and -f filename
:
-a
: automatically install the latest available update from the stream defined in /etc/default/rpi-eeprom-update
. For example, if FIRMWARE_RELEASE_STATUS="default"
, this command will install the latest file at /lib/firmware/raspberrypi/bootloader/critical
:
sudo rpi-eeprom-update -a
And as of today (Jan 29, 2023), on my system, that command would write the EEPROM with contents of the file at: /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2022-12-07.bin
. The file at /lib/firmware/raspberrypi/bootloader/critical/vl805-000138a1.bin
would also be applied, but only to the USB firmware area of the EEPROM. I've been unable to find any reliable documentation on this, but apparently the RPi organization has made hardware changes (to appear in Rev 1.4) that will obviate the need for separate updates for the USB.
-f filename
: install the named file; for example:
$ sudo rpi-eeprom-update -f /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2022-12-07.bin
This would update the EEPROM firmware, but exclude an upgrade to the USB firmware. It is equivalent to:
$ sudo rpi-eeprom-update -A vl805
sudo raspi-config
butsudo rpi-eeprom-update
shows both current and latest as000138c0
. – sunknudsen Jan 28 '23 at 10:46sudo rpi-eeprom-update -a
. Not sure which version of bootloader is safe and how one can downgrade if one upgraded by mistake. – sunknudsen Jan 28 '23 at 12:16000138c0
is not actually a version number. Instead, the "version number" is obtained as follows:vcgencmd bootloader_version
. I rely on this answer & the docs for that opinion. Second: The answer to your question was in the link that I put in my first comment; please read it thoroughly. CONTINUED ==> – Seamus Jan 29 '23 at 07:35-f
option (refman rpi-eeprom-update
) - as was described in the answer which was linked in my first comment. And after walking through what passes for documentation now, I'll try to post an answer now that attempts to address what I *think* your concerns are. – Seamus Jan 29 '23 at 07:41