Merge branch 'master' into debian/buster

This commit is contained in:
Serge Schneider
2020-11-02 14:15:15 +00:00
6 changed files with 84 additions and 16 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3,6 +3,52 @@
USB MSD boot also requires the firmware from Raspberry Pi OS 2020-08-20 or newer.
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md
## 2020-10-28 Defer HDMI diagnostics display, update-timestamps, tryboot support
* Skip rendering of the diagnostics screen for HDMI_DELAY seconds (default 5).
This means that for SD-card and USB MSD flash boot devices the diagnostics
screen will not be visible.
* On Pi 4B 1.4 (8GB) initialise SDRAM whilst waiting for the USB port power
off time. This makes booting slightly faster.
* Remove HDMI console messages where the information is duplicated elsewhere
on the display.
* Improve compatiblity with external USB 3.0 disk enclosures by enumerating
the downstream hubs before executing the USB port power off.
N.B. Pi4 8GB automatically powers off the USB ports during chip-reset and
does not need this change.
* Don't timeout a USB MSD device after USB_MSD_LUN_TIMEOUT if there are no other
MSD devices or LUNs to tries. This avoids unecessary timeouts on very slow
to initialise disk drives e.g. USB HDDs designed for backups.
* Fix failover to partition zero if the partition number is invalid. For USB
MSD boot a start.elf update is also required.
* SD-Card - Change default retries from 0 to 1 to improve reliability with
some old SD v1 cards.
* Fix issue where boot would stop if partition type 0x83 was encountered
before the first FAT partition.
* SELF_UPDATE mode (Network, USB MSD boot) now reads the timestamp information
in pieeprom.sig created by rpi-eeprom-update to see if the updated is
newer than the current 'update-timestamp'. If not, the update is skipped
to avoid stale updates on network or USB disks being installed by accident.
recovery.bin updates (from the SD card) do not check the timestamp because
recovery.bin renames itself once the update is completed. However, it still
writes the update-timestamp to the EEPROM.
The update-timestamp is the timestamp when the update is created is
independent of the build-timestamp for the bootloader executable. See
rpi-eeprom-udpate -h
* Add support for the 'tryboot' feature that enables operating systems to
implement a fallback mechanism if an OS upgrade fails. This works with all
bootable media types but requires updated firmware and OS software.
This feature should be viewed as EXPERIMENTAL and may change depenending upon
feedback from other OS/distro maintainer.
https://github.com/raspberrypi/linux/commit/757666748ebf69dc161a262faa3717a14d68e5aa
## 2020-10-02 Include CM4 manufacturing bootloader image.
* Include the release image for reference. This contains some minor changes
to support manufacture test.
## 2020-09-14 Promote the 2020-09-03 release to be the default EEPROM images.
* Promote the 2020-09-03 bootloader EEPROM and VLI 0138A1 as the default
release (critical folder).

View File

@@ -22,6 +22,9 @@ MAX_BOOTCONF_SIZE = 2024
# The number, order and size of the sections depends on the bootloader version
# but the following mask can be used to test for section headers and skip
# unknown data.
#
# The last 4KB of the EEPROM image is reserved for internal use by the
# bootloader and may be overwritten during the update process.
MAGIC = 0x55aaf00f
MAGIC_MASK = 0xfffff00f
FILE_MAGIC = 0x55aaf11f # id for modifiable file, currently only bootconf.txt

View File

@@ -104,7 +104,7 @@ die() {
prepareImage()
{
[ -f "${BOOTLOADER_UPDATE_IMAGE}" ] || die "EEPROM image \'${BOOTLOADER_UPDATE_IMAGE}\' not found"
[ -f "${BOOTLOADER_UPDATE_IMAGE}" ] || die "EEPROM image '${BOOTLOADER_UPDATE_IMAGE}' not found"
TMP_EEPROM_IMAGE="$(mktemp)"
TMP_EEPROM_CONFIG="$(mktemp)"
NEW_EEPROM_CONFIG="$(mktemp)"
@@ -150,10 +150,16 @@ applyRecoveryUpdate()
echo "BOOTFS ${BOOTFS}"
# A '.sig' file is created so that recovery.bin can check that the
# EEPROM image has not been created (e.g. SD card corruption).
# The .sig file format is currently just a SHA256 in ASCII hex. In future,
# if an actual public key signature is required then that plus any other
# data would be appended after the SHA256 signature.
# EEPROM image has not been corrupted (e.g. SD card corruption).
# Format of the .sig file.
# --
# SHA256\n
# ts: UPDATE-TIMESTAMP\n
# --
# SHA256 is a 64 character hex string
# UPDATE-TIMESTAMP is an unsigned decimal.
#
# The 'filename' output from sha256 MUST be omitted.
if [ -n "${BOOTLOADER_UPDATE_IMAGE}" ]; then
[ -f "${BOOTLOADER_UPDATE_IMAGE}" ] || die "${BOOTLOADER_UPDATE_IMAGE} not found"
@@ -167,6 +173,15 @@ applyRecoveryUpdate()
sha256sum "${TMP_EEPROM_IMAGE}" | awk '{print $1}' > "${BOOTFS}/pieeprom.sig" \
|| die "Failed to create ${BOOTFS}/pieeprom.sig"
# Appends the update creation timestamp on a newline in pieeprom.sig
# During a self-update mode the bootloader examines the update-timestamp
# and will only update itself if it is newer than the current update
# timestamp.
#
# The update-timestamp is independent of the bootloader version and
# does not have to be timestamp.
echo "ts: $(date -u +%s)" >> "${BOOTFS}/pieeprom.sig"
cp -f "${TMP_EEPROM_IMAGE}" "${BOOTFS}/pieeprom.upd" \
|| die "Failed to copy ${TMP_EEPROM_IMAGE} to ${BOOTFS}"
@@ -180,7 +195,7 @@ applyRecoveryUpdate()
|| die "Failed to create ${BOOTFS}/vl805.sig"
cp -f "${VL805_UPDATE_IMAGE}" "${BOOTFS}/vl805.bin" \
|| die "Failed to copy ${VL805_UPDATE_IMAGE} to ${BOOTFS/vl805.bin}"
|| die "Failed to copy ${VL805_UPDATE_IMAGE} to ${BOOTFS}/vl805.bin"
# For NFS mounts ensure that the files are readable to the TFTP user
chmod -f go+r "${BOOTFS}/vl805.bin" "${BOOTFS}/vl805.sig" \
@@ -196,16 +211,15 @@ applyUpdate() {
if [ "${IGNORE_DPKG_CHECKSUMS}" = 0 ]; then
(
package_info_dir="/var/lib/dpkg/info/"
package_checksums_file="${package_info_dir}/rpi-eeprom.md5sums"
package_checksums_file="${PACKAGE_INFO_DIR}/rpi-eeprom.md5sums"
if ! grep -qE '\.bin$' "${package_info_dir}/rpi-eeprom.md5sums"; then
if ! grep -qE '\.bin$' "${PACKAGE_INFO_DIR}/rpi-eeprom.md5sums"; then
# Try the old rpi-eeprom-images package
package_checksums_file="${package_info_dir}/rpi-eeprom-images.md5sums"
package_checksums_file="${PACKAGE_INFO_DIR}/rpi-eeprom-images.md5sums"
fi
CHECKSUMS=$(mktemp)
cat "${package_checksums_file}" | grep -E '\.bin$' > "${CHECKSUMS}"
grep -E '\.bin$' "${package_checksums_file}" > "${CHECKSUMS}"
cd /
if ! md5sum -c "${CHECKSUMS}" > /dev/null 2>&1; then
md5sum -c "${CHECKSUMS}"
@@ -304,7 +318,7 @@ checkDependencies() {
BOARD_TYPE=$(((0x$BOARD_INFO >> 4) & 0xff))
BOARD_REVISION=$((0x$BOARD_INFO & 0xf))
if [ ${BOARD_TYPE} -eq 20 ] && [ ${CM4_ENABLE_RPI_EEPROM_UPDATE} != '1' ]; then
if [ ${BOARD_TYPE} -eq 20 ] && [ "${CM4_ENABLE_RPI_EEPROM_UPDATE}" != '1' ]; then
# For CM4, USB device boot is the recommended method for EEPROM updates.
echo "rpi-eeprom-update is not enabled by default on CM4"
exit ${EXIT_SUCCESS}
@@ -706,7 +720,12 @@ AUTO_UPDATE_BOOTLOADER=0
AUTO_UPDATE_VL805=0
MACHINE_OUTPUT=""
JSON_OUTPUT="no"
IGNORE_DPKG_CHECKSUMS=$LOCAL_MODE
IGNORE_DPKG_CHECKSUMS=${LOCAL_MODE}
PACKAGE_INFO_DIR="/var/lib/dpkg/info/"
if [ ! -d "${PACKAGE_INFO_DIR}" ]; then
IGNORE_DPKG_CHECKSUMS=1
fi
while getopts A:abdhilf:m:ju:r option; do
case "${option}" in
@@ -722,9 +741,9 @@ while getopts A:abdhilf:m:ju:r option; do
a) AUTO_UPDATE_BOOTLOADER=1
AUTO_UPDATE_VL805=1
;;
b)
findBootFS
echo ${BOOTFS}
b)
findBootFS
echo "${BOOTFS}"
exit 0
;;
d) OVERWRITE_CONFIG=1