mirror of
https://github.com/raspberrypi/rpi-eeprom.git
synced 2026-01-20 21:13:36 +08:00
Compare commits
32 Commits
v2023.10.1
...
v.2024.01.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
759460850c | ||
|
|
9e0bffb291 | ||
|
|
258d0114c0 | ||
|
|
0cd761bc84 | ||
|
|
72cedfe5ee | ||
|
|
14e934cee3 | ||
|
|
e407fb0030 | ||
|
|
b405ed7465 | ||
|
|
ef0cfffced | ||
|
|
a66e79ba99 | ||
|
|
745eabf90e | ||
|
|
043841636c | ||
|
|
3f325bd482 | ||
|
|
52c5d89d48 | ||
|
|
77402b6527 | ||
|
|
9c8d97d6a2 | ||
|
|
f20bb90a67 | ||
|
|
7e22b8ff47 | ||
|
|
8f19146862 | ||
|
|
e4724b4783 | ||
|
|
1e5594c51b | ||
|
|
b57586ead2 | ||
|
|
46c89bee09 | ||
|
|
6b14e84a2f | ||
|
|
db154d4710 | ||
|
|
aded0825e3 | ||
|
|
d53db79009 | ||
|
|
5ec5c003ba | ||
|
|
b066f89a40 | ||
|
|
ff81e998c5 | ||
|
|
fdff8e81f0 | ||
|
|
645c2a1201 |
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -6,7 +6,7 @@ body:
|
||||
value: |
|
||||
**Is this the right place for my bug report?**
|
||||
|
||||
* This repository contains the Raspberry Pi 4, Pi400 and CM4 bootloader EEPROM images and installation scripts.
|
||||
* This repository contains the Raspberry Pi 5, Raspberry Pi 4, Pi400, CM4 and CM4-S bootloader EEPROM images and installation scripts.
|
||||
* Please report boot issues for the earlier models at the GPU firmware repo [github.com/raspberrypi/firmware](https://github.com/raspberrypi/firmware).
|
||||
* Please report USB issues which occur after the OS has started at the Linux repo [github.com/raspberrypi/linux/](https://github.com/raspberrypi/linux/).
|
||||
* If you simply have a question, then [the Raspberry Pi forums](https://www.raspberrypi.org/forums) are the best place to ask it.
|
||||
@@ -39,10 +39,12 @@ body:
|
||||
description: On which device you are facing the bug?
|
||||
multiple: true
|
||||
options:
|
||||
- Raspberry Pi 5
|
||||
- Raspberry Pi 4 Mod. B
|
||||
- Raspberry Pi 400
|
||||
- Raspberry Pi CM4
|
||||
- Raspberry Pi CM4 Lite
|
||||
- Raspberry Pi CM4-S
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
@@ -52,7 +54,7 @@ body:
|
||||
attributes:
|
||||
label: Bootloader configuration.
|
||||
description: |
|
||||
Copy and paste the results of `vcgencmd bootloader_config` or describe the failing configuration.
|
||||
Copy and paste the results of `rpi-eeprom-config` or describe the failing configuration.
|
||||
|
||||
* `rpi-eeprom-update` saves a backup of the previous bootloader configuration to `/var/lib/raspberrypi/bootloader/backup` before it schedules the update.
|
||||
* `rpi-eeprom-config pieeprom.upd` can be used to read the contents of an EEPROM image.
|
||||
|
||||
@@ -9,7 +9,7 @@ To reset the bootloader back to factory defaults use [Raspberry Pi Imager](https
|
||||
|
||||
# Bootloader documentation
|
||||
* [Config.txt boot options](https://www.raspberrypi.com/documentation/computers/config_txt.html#boot-options)
|
||||
* [Bootloader EEPROM](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-boot-eeprom)
|
||||
* [Bootloader configuration](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-bootloader-configuration)
|
||||
* [Bootloader EEPROM](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-boot-eeprom)
|
||||
* [Bootloader configuration](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-bootloader-configuration)
|
||||
* [Updating the Compute Module 4 bootloader](https://www.raspberrypi.com/documentation/computers/compute-module.html#cm4bootloader)
|
||||
* [Releases and release notes](releases.md)
|
||||
|
||||
BIN
firmware-2712/default/pieeprom-2023-10-30.bin
Normal file
BIN
firmware-2712/default/pieeprom-2023-10-30.bin
Normal file
Binary file not shown.
BIN
firmware-2712/default/pieeprom-2023-11-20.bin
Normal file
BIN
firmware-2712/default/pieeprom-2023-11-20.bin
Normal file
Binary file not shown.
BIN
firmware-2712/default/pieeprom-2023-12-06.bin
Normal file
BIN
firmware-2712/default/pieeprom-2023-12-06.bin
Normal file
Binary file not shown.
BIN
firmware-2712/default/pieeprom-2023-12-14.bin
Normal file
BIN
firmware-2712/default/pieeprom-2023-12-14.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2023-10-30.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2023-10-30.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2023-11-20.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2023-11-20.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2023-12-06.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2023-12-06.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2023-12-14.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2023-12-14.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2024-01-05.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2024-01-05.bin
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,51 @@
|
||||
# Raspberry Pi5 bootloader EEPROM release notes
|
||||
|
||||
2023-10-18: Display autodetect + HAT gpiomap (default + latest)
|
||||
2024-01-05: Fix handling of FAT files without LFNs.
|
||||
* Fix issues with SFN entries sometimes being treated as LFNs
|
||||
see https://github.com/raspberrypi/rpi-eeprom/issues/514
|
||||
* Add a dedicated message for "M.2 HAT" not being found instead of
|
||||
the generic 'unsupported boot order' message when NVMe boot is
|
||||
skipped.
|
||||
|
||||
2023-12-17: Promote 2023-12-14 to default release
|
||||
* Bump to the default release now that the partition number fix is confirmed.
|
||||
|
||||
2023-12-14: Fix boot partition parameter (latest)
|
||||
* Fix an issue where the boot partition parameter in PM_RSTS was cleared
|
||||
before being checked.
|
||||
https://github.com/raspberrypi/firmware/issues/1853
|
||||
* Add a specific fatal error pattern for RP1 not found - 4 long - 3 short
|
||||
|
||||
2023-12-12: Promote 2023-12-06 to default release.
|
||||
|
||||
2023-12-06: Initialise DWC PHY (latest)
|
||||
|
||||
* Initialise the DWC PHY to enable DWC host+peripheral support under Linux.
|
||||
Requires https://github.com/raspberrypi/linux/commit/82069a7a02632aa60fa5c69415bf891ede7d6fd4
|
||||
* Force PWM on 3V3 supply if cameras or HATs are connected or if power_force_3v3_pwm=1 in config.txt
|
||||
Resolves an image quality issue with the GS camera.
|
||||
* Add support for C(arm_min_freq) < 1500 MHz (must be at >= 200 MHz)
|
||||
* Manufacturing test updates for DVFS.
|
||||
|
||||
2023-11-20: Auto-detect support for PCIe expansion HAT (default + latest)
|
||||
|
||||
* Add autodetect support for PCIe expansion HATs
|
||||
* Add PCIE_PROBE=1 to the EEPROM config for custom PCIe exapansion
|
||||
designs that do not support the upcoming HAT spec. This gives
|
||||
similar behaviour to CM4 where PCIe x1 is enumerated to discover NVMe
|
||||
devices.
|
||||
* Fix loading of multiple initramfs images that are not 32-bit aligned sizes
|
||||
https://github.com/raspberrypi/firmware/issues/1843
|
||||
* Kernel load performance improvement - remove a memcpy
|
||||
|
||||
2023-10-30: UPG watchdog support + SD reset fixes (default + latest)
|
||||
|
||||
* Fix SDIO / WiFi clock-setup for BOOT_ORDER=0xf14
|
||||
* Fix SD power-on-reset
|
||||
* Firmware support for improved watchdog driver
|
||||
* Update DHCP Option97 to be R,P,i,5 on Pi5
|
||||
|
||||
2023-10-18: Display autodetect + HAT gpiomap (default + latest) (automatic update)
|
||||
|
||||
* Add support for HAT gpiomap for improved HAT compatibility.
|
||||
* Add I2C probe for DSI display auto detect
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[all]
|
||||
BOOT_UART=1
|
||||
BOOT_ORDER=0xf41
|
||||
BOOT_ORDER=0xf461
|
||||
POWER_OFF_ON_HALT=0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[all]
|
||||
BOOT_UART=1
|
||||
BOOT_ORDER=0xf41
|
||||
BOOT_ORDER=0xf461
|
||||
POWER_OFF_ON_HALT=0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[all]
|
||||
BOOT_UART=1
|
||||
BOOT_ORDER=0xf14
|
||||
BOOT_ORDER=0xf146
|
||||
POWER_OFF_ON_HALT=0
|
||||
|
||||
|
||||
@@ -8,4 +8,4 @@ script_dir=$(cd "$(dirname "$0")" && pwd)
|
||||
${script_dir}/make-release critical 2023-01-11 000138c0 "${script_dir}/2711-config" release-2711 rpi-boot-eeprom-recovery 2711
|
||||
|
||||
# Pi5
|
||||
${script_dir}/make-release critical 2023-10-18 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712
|
||||
${script_dir}/make-release critical 2023-12-06 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712
|
||||
|
||||
@@ -109,7 +109,7 @@ def exit_error(msg):
|
||||
sys.stderr.write("ERROR: %s\n" % msg)
|
||||
sys.exit(1)
|
||||
|
||||
def shell_cmd(args):
|
||||
def shell_cmd(args, timeout=5, echo=False):
|
||||
"""
|
||||
Executes a shell command waits for completion returning STDOUT. If an
|
||||
error occurs then exit and output the subprocess stdout, stderr messages
|
||||
@@ -117,9 +117,14 @@ def shell_cmd(args):
|
||||
"""
|
||||
start = time.time()
|
||||
arg_str = ' '.join(args)
|
||||
result = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
bufsize = 0 if echo else -1
|
||||
result = subprocess.Popen(args, bufsize=bufsize, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
|
||||
while time.time() - start < 5:
|
||||
while time.time() - start < timeout:
|
||||
if echo:
|
||||
s = result.stdout.read(80).decode('utf-8')
|
||||
if s != "":
|
||||
sys.stdout.write(s)
|
||||
if result.poll() is not None:
|
||||
break
|
||||
|
||||
@@ -128,8 +133,8 @@ def shell_cmd(args):
|
||||
|
||||
if result.returncode != 0:
|
||||
exit_error("%s failed: %d\n %s\n %s\n" %
|
||||
(arg_str, result.returncode, result.stdout.read(), result.stderr.read()))
|
||||
else:
|
||||
(arg_str, result.returncode, result.stdout.read().decode('utf-8'), result.stderr.read().decode('utf-8')))
|
||||
elif not echo:
|
||||
return result.stdout.read().decode('utf-8')
|
||||
|
||||
def get_latest_eeprom():
|
||||
@@ -170,8 +175,10 @@ def apply_update(config, eeprom=None, config_src=None):
|
||||
# with EEPROMs with configs delivered outside of APT.
|
||||
# The checksums are really just a safety check for automatic updates.
|
||||
args = ['rpi-eeprom-update', '-d', '-i', '-f', tmp_update]
|
||||
resp = shell_cmd(args)
|
||||
sys.stdout.write(resp)
|
||||
|
||||
# If flashrom is used then the command will not return until the EEPROM
|
||||
# has been updated so use a larger timeout.
|
||||
shell_cmd(args, timeout=20, echo=True)
|
||||
|
||||
def edit_config(eeprom=None):
|
||||
"""
|
||||
@@ -377,6 +384,15 @@ class BootloaderImage(object):
|
||||
% (src_filename, len(src_bytes), MAX_FILE_SIZE))
|
||||
self.update(src_bytes, dst_filename)
|
||||
|
||||
def set_timestamp(self, timestamp):
|
||||
"""
|
||||
Sets the self-update timestamp in an EEPROM image file. This is useful when
|
||||
using flashrom to write to SPI flash instead of using the bootloader self-update mode.
|
||||
"""
|
||||
ts = int(timestamp)
|
||||
struct.pack_into('<L', self._bytes, len(self._bytes) - 4, ts)
|
||||
struct.pack_into('<L', self._bytes, len(self._bytes) - 8, ~ts & 0xffffffff)
|
||||
|
||||
def write(self):
|
||||
"""
|
||||
Writes the updated EEPROM image to stdout or the specified output file.
|
||||
@@ -498,6 +514,7 @@ See 'rpi-eeprom-update -h' for more information about the available EEPROM image
|
||||
parser.add_argument('-d', '--digest', help='Signed boot only. The name of the .sig file generated by rpi-eeprom-dgst for config.txt ', required=False)
|
||||
parser.add_argument('-p', '--pubkey', help='Signed boot only. The name of the RSA public key file to store in the EEPROM', required=False)
|
||||
parser.add_argument('-x', '--extract', action='store_true', default=False, help='Extract the modifiable files (boot.conf, pubkey, signature)', required=False)
|
||||
parser.add_argument('-t', '--timestamp', help='Set the timestamp in the EEPROM image file', required=False)
|
||||
parser.add_argument('eeprom', nargs='?', help='Name of EEPROM file to use as input')
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -518,6 +535,8 @@ See 'rpi-eeprom-update -h' for more information about the available EEPROM image
|
||||
apply_update(args.apply, args.eeprom, args.apply)
|
||||
elif args.eeprom is not None:
|
||||
image = BootloaderImage(args.eeprom, args.out)
|
||||
if args.timestamp is not None:
|
||||
image.set_timestamp(args.timestamp)
|
||||
if args.config is not None:
|
||||
if not os.path.exists(args.config):
|
||||
exit_error("config file '%s' not found" % args.config)
|
||||
@@ -527,6 +546,8 @@ See 'rpi-eeprom-update -h' for more information about the available EEPROM image
|
||||
if args.pubkey is not None:
|
||||
image.update_key(args.pubkey, PUBKEY_BIN)
|
||||
image.write()
|
||||
elif args.config is None and args.timestamp is not None:
|
||||
image.write()
|
||||
else:
|
||||
image.read()
|
||||
elif args.config is None and args.eeprom is None:
|
||||
|
||||
@@ -19,6 +19,7 @@ elif [ -d /lib/firmware/raspberrypi/bootloader ] || [ -d /lib/firmware/raspberry
|
||||
else
|
||||
# Work from local git checkout
|
||||
LOCAL_MODE=1
|
||||
IGNORE_DPKG_CHECKSUMS=1
|
||||
FIRMWARE_ROOT="${script_dir}/firmware"
|
||||
fi
|
||||
|
||||
@@ -89,6 +90,9 @@ cleanup() {
|
||||
if [ -f "${NEW_EEPROM_CONFIG}" ]; then
|
||||
rm -f "${NEW_EEPROM_CONFIG}"
|
||||
fi
|
||||
if [ -f "${FLASHROM_LOG}" ]; then
|
||||
rm -f "${FLASHROM_LOG}"
|
||||
fi
|
||||
if [ -d "${TMP_BOOTFS_MNT}" ]; then
|
||||
umount "${TMP_BOOTFS_MNT}"
|
||||
rmdir "${TMP_BOOTFS_MNT}"
|
||||
@@ -97,6 +101,7 @@ cleanup() {
|
||||
TMP_EEPROM_IMAGE=
|
||||
TMP_EEPROM_CONFIG=
|
||||
NEW_EEPROM_CONFIG=
|
||||
FLASHROM_LOG=
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
@@ -169,7 +174,14 @@ prepareImage()
|
||||
if [ "${OVERWRITE_CONFIG}" = 0 ]; then
|
||||
"${script_dir}/rpi-eeprom-config" \
|
||||
--out "${TMP_EEPROM_IMAGE}" \
|
||||
--config "${NEW_EEPROM_CONFIG}" "${BOOTLOADER_UPDATE_IMAGE}"
|
||||
--config "${NEW_EEPROM_CONFIG}" \
|
||||
--timestamp "$(date -u +%s)" \
|
||||
"${BOOTLOADER_UPDATE_IMAGE}"
|
||||
else
|
||||
"${script_dir}/rpi-eeprom-config" \
|
||||
--out "${TMP_EEPROM_IMAGE}" \
|
||||
--timestamp "$(date -u +%s)" \
|
||||
"${BOOTLOADER_UPDATE_IMAGE}"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -200,7 +212,7 @@ applyRecoveryUpdate()
|
||||
# and the current timestamp.
|
||||
rpi-eeprom-digest -i "${TMP_EEPROM_IMAGE}" -o "${BOOTFS}/pieeprom.sig"
|
||||
|
||||
cp -f "${TMP_EEPROM_IMAGE}" "${BOOTFS}/pieeprom.upd" \
|
||||
cp -fv "${TMP_EEPROM_IMAGE}" "${BOOTFS}/pieeprom.upd" \
|
||||
|| die "Failed to copy ${TMP_EEPROM_IMAGE} to ${BOOTFS}"
|
||||
|
||||
# For NFS mounts ensure that the files are readable to the TFTP user
|
||||
@@ -225,7 +237,7 @@ applyRecoveryUpdate()
|
||||
RPI_EEPROM_SELF_UPDATE=0
|
||||
fi
|
||||
|
||||
# Setting bootlaoder_update=0 was really intended for use with network-boot with shared
|
||||
# Setting bootloader_update=0 was really intended for use with network-boot with shared
|
||||
# config.txt files. However, if it looks as though self-update has been disabled then
|
||||
# assume recovery.bin is required.
|
||||
config_txt="${BOOTFS}/config.txt"
|
||||
@@ -237,8 +249,33 @@ applyRecoveryUpdate()
|
||||
|
||||
[ "${BOOTLOADER_CURRENT_VERSION}" -ge "${RPI_EEPROM_SELF_UPDATE_MIN_VER}" ] || RPI_EEPROM_SELF_UPDATE=0
|
||||
|
||||
if [ "${RPI_EEPROM_SELF_UPDATE}" != "1" ]; then
|
||||
echo "Using recovery.bin for EEPROM update"
|
||||
# For immediate updates via flash the recovery.bin update is created and then discarded if the
|
||||
# flashrom update was successful. For SD boot (most common) this provides a rollback in the event
|
||||
# of power loss.
|
||||
if [ "${RPI_EEPROM_USE_FLASHROM}" = 1 ]; then
|
||||
echo
|
||||
echo "UPDATING bootloader."
|
||||
echo
|
||||
echo "*** WARNING: Do not disconnect the power until the update is complete ***"
|
||||
echo "If a problem occurs then the Raspberry Pi Imager may be used to create"
|
||||
echo "a bootloader rescue SD card image which restores the default bootloader image."
|
||||
echo
|
||||
FLASHROM_LOG="$(mktemp)"
|
||||
echo "flashrom -p linux_spi:dev=${SPIDEV},spispeed=16000 -w ${BOOTFS}/pieeprom.upd"
|
||||
if flashrom -p linux_spi:dev=${SPIDEV},spispeed=16000 -w "${BOOTFS}/pieeprom.upd" > "${FLASHROM_LOG}"; then
|
||||
# Success - remove update files from the boot partition
|
||||
removePreviousUpdates
|
||||
echo "UPDATE SUCCESSFUL"
|
||||
else
|
||||
# Leave the recovery files in case the EEPROM has been partially updated
|
||||
cat "${FLASHROM_LOG}"
|
||||
die "UPDATE FAILED"
|
||||
fi
|
||||
return
|
||||
elif [ "${RPI_EEPROM_SELF_UPDATE}" = "1" ]; then
|
||||
echo "Using self-update"
|
||||
else
|
||||
echo "Copying recovery.bin to ${BOOTFS} for EEPROM update"
|
||||
cp -f "${RECOVERY_BIN}" "${BOOTFS}/recovery.bin" || die "Failed to copy ${RECOVERY_BIN} to ${BOOTFS}"
|
||||
fi
|
||||
|
||||
@@ -269,6 +306,25 @@ applyUpdate() {
|
||||
) || die "Unable to validate EEPROM image package checksums"
|
||||
fi
|
||||
|
||||
# Disable flashrom if the SPI device is not found
|
||||
if [ "${RPI_EEPROM_USE_FLASHROM}" = 1 ]; then
|
||||
flashrom_probe_ok=0
|
||||
if ! [ -e "${SPIDEV}" ]; then
|
||||
echo "WARNING: SPI device ${SPIDEV} not found. Setting RPI_EEPROM_USE_FLASHROM to 0"
|
||||
fi
|
||||
|
||||
if ! flashrom -p linux_spi:dev=${SPIDEV},spispeed=16000 > /dev/null 2>&1; then
|
||||
echo "WARNING: Flashrom probe of ${SPIDEV} failed"
|
||||
else
|
||||
flashrom_probe_ok=1
|
||||
fi
|
||||
if [ "${flashrom_probe_ok}" != 1 ]; then
|
||||
echo "Setting RPI_EEPROM_USE_FLASHROM to 0"
|
||||
echo
|
||||
export RPI_EEPROM_USE_FLASHROM=0
|
||||
fi
|
||||
fi
|
||||
|
||||
applyRecoveryUpdate
|
||||
}
|
||||
|
||||
@@ -309,7 +365,7 @@ getBootloaderUpdateVersion() {
|
||||
}
|
||||
|
||||
chipNotSupported() {
|
||||
echo "This tool only works with Raspberry Pi4 and Rapberry Pi5"
|
||||
echo "Device does not a have a Raspberry Pi bootloader EEPROM (e.g. Pi 4 or Pi 5). Skipping bootloader update."
|
||||
exit ${EXIT_SUCCESS}
|
||||
}
|
||||
|
||||
@@ -334,17 +390,21 @@ checkDependencies() {
|
||||
BCM_CHIP=2711
|
||||
EEPROM_SIZE=524288
|
||||
BOOTLOADER_AUTO_UPDATE_MIN_VERSION="${BOOTLOADER_AUTO_UPDATE_MIN_VERSION:-1599135103}"
|
||||
|
||||
SPIDEV=/dev/spidev0.0
|
||||
elif [ $(((0x$BOARD_INFO >> 12) & 15)) = 4 ]; then
|
||||
# BCM2712 always supports self-update so recovery.bin is only used for RPi imager
|
||||
# bootloader updated SD cards or with RPIBOOT.
|
||||
BCM_CHIP=2712
|
||||
EEPROM_SIZE=2097152
|
||||
RPI_EEPROM_SELF_UPDATE=1
|
||||
BOOTLOADER_AUTO_UPDATE_MIN_VERSION="${BOOTLOADER_AUTO_UPDATE_MIN_VERSION:-1695896697}"
|
||||
BOOTLOADER_AUTO_UPDATE_MIN_VERSION="${BOOTLOADER_AUTO_UPDATE_MIN_VERSION:-1697650217}"
|
||||
SPIDEV=/dev/spidev10.0
|
||||
else
|
||||
chipNotSupported
|
||||
fi
|
||||
|
||||
# Default to off - in the future Raspberry Pi 5 may default to using flashrom if
|
||||
# flashrom is available.
|
||||
[ -z "${RPI_EEPROM_USE_FLASHROM}" ] && RPI_EEPROM_USE_FLASHROM=0
|
||||
|
||||
FIRMWARE_IMAGE_DIR="${FIRMWARE_ROOT}-${BCM_CHIP}/${FIRMWARE_RELEASE_STATUS}"
|
||||
if ! [ -d "${FIRMWARE_IMAGE_DIR}" ]; then
|
||||
# Use unadorned name for backwards compatiblity
|
||||
@@ -361,6 +421,18 @@ checkDependencies() {
|
||||
echo "The recommended method for flashing the EEPROM is rpiboot."
|
||||
echo "See: https://github.com/raspberrypi/usbboot/blob/master/Readme.md"
|
||||
echo "Run with -h for more information."
|
||||
echo
|
||||
echo "To enable flashrom programming of the EEPROM"
|
||||
echo "Add these the following entries to /etc/default/rpi-eeprom-update"
|
||||
echo "RPI_EEPROM_USE_FLASHROM=1"
|
||||
echo "CM4_ENABLE_RPI_EEPROM_UPDATE=1"
|
||||
echo
|
||||
echo "and these entries to config.txt and reboot"
|
||||
echo "[cm4]"
|
||||
echo "dtparam=spi=on"
|
||||
echo "dtoverlay=audremap"
|
||||
echo "dtoverlay=spi-gpio40-45"
|
||||
echo
|
||||
exit ${EXIT_SUCCESS}
|
||||
fi
|
||||
|
||||
@@ -378,11 +450,15 @@ checkDependencies() {
|
||||
die "lspci not found. Try installing the pciutils package."
|
||||
fi
|
||||
|
||||
if ! command -v strings > /dev/null; then
|
||||
die "strings not found. Try installing the binutils package."
|
||||
fi
|
||||
|
||||
# vcgencmd bootloader_version is deprecated. Use device-tree if available to
|
||||
# reduce the number of dependencies on VCHI.
|
||||
if ! [ -f "${DT_BOOTLOADER_TS}" ]; then
|
||||
if ! command -v vcgencmd > /dev/null; then
|
||||
die "vcgencmd not found. Try installing the libraspberrypi-bin package."
|
||||
die "vcgencmd not found. Try installing the raspi-utils package."
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -401,12 +477,16 @@ checkDependencies() {
|
||||
fi
|
||||
|
||||
if ! command -v sha256sum > /dev/null; then
|
||||
die "sha256sum not found. Try installing the coreutilities package."
|
||||
die "sha256sum not found. Try installing the coreutils package."
|
||||
fi
|
||||
|
||||
if [ "${BCM_CHIP}" = 2711 ] && [ ! -f "${RECOVERY_BIN}" ]; then
|
||||
die "${RECOVERY_BIN} not found."
|
||||
fi
|
||||
|
||||
if ! command -v flashrom > /dev/null; then
|
||||
RPI_EEPROM_USE_FLASHROM=0
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
@@ -454,7 +534,6 @@ Options:
|
||||
Ignores the FREEZE_VERSION flag in bootloader and is intended for manual
|
||||
firmware updates.
|
||||
-h Display help text and exit
|
||||
-i Ignore package checksums - for rpi-eeprom developers.
|
||||
-j Write status information using JSON notation (requires -m option)
|
||||
-l Returns the full path to the latest available EEPROM image file according
|
||||
to the FIRMWARE_RELEASE_STATUS and FIRMWARE_IMAGE_DIR settings.
|
||||
@@ -492,10 +571,10 @@ to be stable.
|
||||
|
||||
default:
|
||||
The default bootloader image which supports all current models and hardware
|
||||
revisions.
|
||||
If a critical bug fix is required then the minimum default version number
|
||||
(BOOTLOADER_AUTO_UPDATE_MIN_VERSION) in the rpi-eeprom package is updated
|
||||
causing the bootloader to be automatically updated.
|
||||
revisions. If there is an important bug fix or hardware change that could
|
||||
affect most users then the BOOTLOADER_AUTO_UPDATE_MIN_VERSION is updated
|
||||
causing the update to be applied the next time the rpi-eeprom APT package is
|
||||
updated.
|
||||
|
||||
latest:
|
||||
Contains new features, bug fixes and performance improvements.
|
||||
@@ -545,6 +624,22 @@ N.B. If there is a power failure during SELF_UPDATE the EEPROM write may fail an
|
||||
usbboot must be used to flash the bootloader EEPROM. SELF_UPDATE is not recommended
|
||||
for updating the bootloader on remote systems.
|
||||
|
||||
FLASHROM:
|
||||
|
||||
If the RPI_EEPROM_USE_FLASHROM variable is set to 1 then flashrom is used to perform
|
||||
an immediate update to the SPI flash rather than installing the recovery.bin plus
|
||||
pieeprom.upd files. The power must not be disconnected during this update otherwise the
|
||||
EEPROM will need to be re-flashed using the Rasberry Pi Imager bootloader restore feature.
|
||||
|
||||
On Raspberry Pi 4, CM4, CM4-S and Pi400 flashrom updates are not enabled by default
|
||||
because the SPI GPIOs are shared with analog audio. To enable this add the following
|
||||
entries to config.txt. This moves analog audio to GPIO pins 12,13 and may not be
|
||||
compatible with some HATS / CM4 IO boards.
|
||||
|
||||
dtparam=spi=on
|
||||
dtoverlay=audremap
|
||||
dtoverlay=spi-gpio40-45
|
||||
|
||||
EOF
|
||||
exit ${EXIT_SUCCESS}
|
||||
}
|
||||
@@ -598,7 +693,9 @@ findBootFS()
|
||||
elif [ -z "$BOOTFS" ]; then
|
||||
if ! BOOTFS=$(/usr/lib/raspberrypi-sys-mods/get_fw_loc 2> /dev/null); then
|
||||
for BOOTFS in /boot/firmware /boot; do
|
||||
if findmnt --fstab "$BOOTFS" > /dev/null; then
|
||||
if [ -f "${BOOTFS}/config.txt" ]; then
|
||||
break
|
||||
elif findmnt --fstab "$BOOTFS" > /dev/null; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
@@ -717,7 +814,7 @@ checkAndApply()
|
||||
fi
|
||||
|
||||
if [ "${ACTION_UPDATE_BOOTLOADER}" = 1 ] || [ "${ACTION_UPDATE_VL805}" = 1 ]; then
|
||||
echo "*** INSTALLING EEPROM UPDATES ***"
|
||||
echo "*** PREPARING EEPROM UPDATES ***"
|
||||
echo ""
|
||||
|
||||
printVersions
|
||||
@@ -730,7 +827,7 @@ checkAndApply()
|
||||
fileUpdate()
|
||||
{
|
||||
removePreviousUpdates
|
||||
echo "*** INSTALLING ${BOOTLOADER_UPDATE_IMAGE} ${VL805_UPDATE_IMAGE} ***"
|
||||
echo "*** CREATED UPDATE ${BOOTLOADER_UPDATE_IMAGE} ${VL805_UPDATE_IMAGE} ***"
|
||||
echo
|
||||
|
||||
if [ -n "${BOOTLOADER_UPDATE_IMAGE}" ]; then
|
||||
@@ -822,7 +919,8 @@ AUTO_UPDATE_VL805=0
|
||||
SILENT_UPDATE=0
|
||||
MACHINE_OUTPUT=""
|
||||
JSON_OUTPUT="no"
|
||||
IGNORE_DPKG_CHECKSUMS=${LOCAL_MODE}
|
||||
# Ignore dpkg checksums by default so that rpi-update can install new binaries into /lib/firmware
|
||||
IGNORE_DPKG_CHECKSUMS=${IGNORE_DPKG_CHECKSUMS:-1}
|
||||
PACKAGE_INFO_DIR="/var/lib/dpkg/info/"
|
||||
if [ ! -d "${PACKAGE_INFO_DIR}" ]; then
|
||||
IGNORE_DPKG_CHECKSUMS=1
|
||||
@@ -852,7 +950,9 @@ while getopts A:abdhilf:m:ju:rs option; do
|
||||
;;
|
||||
f) BOOTLOADER_UPDATE_IMAGE="${OPTARG}"
|
||||
;;
|
||||
i) IGNORE_DPKG_CHECKSUMS=1
|
||||
i)
|
||||
# Script default is 1 but this could have been set to zero in the defaults file
|
||||
IGNORE_DPKG_CHECKSUMS=1
|
||||
;;
|
||||
j) JSON_OUTPUT="yes"
|
||||
;;
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader
|
||||
FIRMWARE_RELEASE_STATUS="default"
|
||||
FIRMWARE_BACKUP_DIR="/var/lib/raspberrypi/bootloader/backup"
|
||||
USE_FLASHROM=0
|
||||
EEPROM_CONFIG_HOOK=
|
||||
|
||||
# BOOTFS can be set here to override auto-detection in rpi-eeprom-update
|
||||
#BOOTFS=/boot
|
||||
|
||||
# Use flashrom if available to update the bootloader without rebooting - Raspberry Pi 5
|
||||
#RPI_EEPROM_USE_FLASHROM=1
|
||||
|
||||
Reference in New Issue
Block a user