Enable usage of rpi-eeprom-update on Raspberry Pi 4/5/Yellow (#4063)

* package/vcgencmd: add tool for RPi VideoCore commands

This tool is used by rpi-eeprom-update and is fairly lightweight binary without
dependencies. Use it as-is from raspberry/utils repo.

* package/rpi-eeprom: change package to install EEPROM userspace scripts

* configs: enable rpi-eeprom for rpi4, rpi4-64, rpi5-64 and yellow

On Pi5 and Yellow also enable flashrom so the firmware can be installed
directly without recovery being involved. On Yellow/CM4 this can't be done
without config.txt changes though (SPI and pinmuxing needs to be enabled) but
the image is shared there and users may eventually use the tools if they want,
so install BCM2711 on Yellow too. The "officially recommended" method is
rpiboot though, which is also documented in Yellow docs.
This commit is contained in:
Jan Čermák 2025-05-14 17:25:29 +02:00 committed by GitHub
parent 9803d41b2f
commit 65fdef963c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 190 additions and 13 deletions

View File

@ -17,4 +17,5 @@ source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in"
source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in"
source "$BR2_EXTERNAL_HASSOS_PATH/package/tempio/Config.in.host"
source "$BR2_EXTERNAL_HASSOS_PATH/package/udisks2/Config.in"
source "$BR2_EXTERNAL_HASSOS_PATH/package/vcgencmd/Config.in"
source "$BR2_EXTERNAL_HASSOS_PATH/package/xe-guest-utilities/Config.in"

View File

@ -160,6 +160,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4-64"
BR2_PACKAGE_OS_AGENT=y
BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi4"
BR2_PACKAGE_PI_BLUETOOTH=y
BR2_PACKAGE_RPI_EEPROM=y
BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y
BR2_PACKAGE_RPI_RF_MOD=y
BR2_PACKAGE_RPI_RF_MOD_DTS=y
BR2_PACKAGE_RTL88X2BU=y

View File

@ -158,6 +158,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4"
BR2_PACKAGE_OS_AGENT=y
BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi4"
BR2_PACKAGE_PI_BLUETOOTH=y
BR2_PACKAGE_RPI_EEPROM=y
BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4=y
BR2_PACKAGE_RPI_RF_MOD=y
BR2_PACKAGE_RPI_RF_MOD_DTS=y
BR2_PACKAGE_RTL88X2BU=y

View File

@ -75,6 +75,7 @@ BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW89=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_815X=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
BR2_PACKAGE_DBUS_BROKER=y
BR2_PACKAGE_FLASHROM=y
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
# BR2_PACKAGE_LVM2_STANDARD_INSTALL is not set
@ -151,6 +152,8 @@ BR2_PACKAGE_HASSIO_MACHINE="raspberrypi5-64"
BR2_PACKAGE_OS_AGENT=y
BR2_PACKAGE_OS_AGENT_BOARD="RaspberryPi5"
BR2_PACKAGE_PI_BLUETOOTH=y
BR2_PACKAGE_RPI_EEPROM=y
BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5=y
BR2_PACKAGE_RPI_RF_MOD=y
BR2_PACKAGE_RPI_RF_MOD_DTS=y
BR2_PACKAGE_RTL88X2BU=y

View File

@ -77,6 +77,7 @@ BR2_PACKAGE_RPI_FIRMWARE=y
BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y
# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
BR2_PACKAGE_DBUS_BROKER=y
BR2_PACKAGE_FLASHROM=y
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_INPUT_EVENT_DAEMON=y
@ -164,6 +165,7 @@ BR2_PACKAGE_HASSIO_MACHINE="yellow"
BR2_PACKAGE_OS_AGENT=y
BR2_PACKAGE_OS_AGENT_BOARD="Yellow"
BR2_PACKAGE_PI_BLUETOOTH=y
BR2_PACKAGE_RPI_EEPROM=y
BR2_PACKAGE_RPI_RF_MOD=y
BR2_PACKAGE_RPI_RF_MOD_DTS=y
BR2_PACKAGE_RPI_RF_MOD_DTS_YELLOW=y

View File

@ -0,0 +1,30 @@
From ecc0714d0c132acdce1d7363567917e00ece26f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
Date: Tue, 13 May 2025 17:19:59 +0200
Subject: [PATCH] rpi-eeprom-update: adjust hassos-boot discovery
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Make discovery of boot partition compatible with HAOS without the need
to set BOOTFS in /etc/default/rpi-eeprom-update.
Signed-off-by: Jan Čermák <sairon@sairon.cz>
Upstream: not applicable
---
rpi-eeprom-update | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rpi-eeprom-update b/rpi-eeprom-update
index b970142..720efb7 100755
--- a/rpi-eeprom-update
+++ b/rpi-eeprom-update
@@ -725,7 +725,7 @@ findBootFS()
# If ${BOOTFS} is not writable OR is not on /dev/mmcblk0 then error because the ROM
# can only load recovery.bin from the on-board SD-CARD slot or the EEPROM.
- if blkid | grep -qE "/dev/mmcblk0p1.*LABEL_FATBOOT.*RECOVERY.*TYPE.*vfat"; then
+ if blkid | grep -qE "/dev/mmcblk0p1.*LABEL_FATBOOT.*hassos-boot.*TYPE.*vfat"; then
TMP_BOOTFS_MNT="$(mktemp -d)"
mount /dev/mmcblk0p1 "${TMP_BOOTFS_MNT}"
BOOTFS="${TMP_BOOTFS_MNT}"

View File

@ -0,0 +1,68 @@
From bea845559542e556dfaffcec7334695a6387e0d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
Date: Tue, 13 May 2025 18:07:13 +0200
Subject: [PATCH] rpi-eeprom-update: remove raspi-config mentions and
unnecessary sudo in help
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
There is no sudo on HAOS, remove it from messages that could be shown to
users. Also remove raspi-config mention, we will only carry the default
release.
Signed-off-by: Jan Čermák <sairon@sairon.cz>
Upstream: not applicable
---
rpi-eeprom-update | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/rpi-eeprom-update b/rpi-eeprom-update
index 720efb7..eb19872 100755
--- a/rpi-eeprom-update
+++ b/rpi-eeprom-update
@@ -30,7 +30,6 @@ FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-default}
FIRMWARE_BACKUP_DIR=${FIRMWARE_BACKUP_DIR:-/var/lib/raspberrypi/bootloader/backup}
ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1}
CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0}
-RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}"
# Self-update is preferred to using recovery.bin because it avoids modifiy the
# boot partition in order to rename recovery.bin after use. Since the 2711 ROM
@@ -315,7 +314,7 @@ applyRecoveryUpdate()
echo "EEPROM updates pending. Please reboot to apply the update."
if [ "${RPI_EEPROM_USE_FLASHROM}" = 0 ]; then
- echo "To cancel a pending update run \"sudo rpi-eeprom-update -r\"."
+ echo "To cancel a pending update run \"rpi-eeprom-update -r\"."
fi
}
@@ -634,7 +633,7 @@ To update the configuration file in an EEPROM image:
rpi-eeprom-config pieeprom.bin --config bootconf.txt --out pieeprom-new.bin
To flash the new image:
- sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
+ rpi-eeprom-update -d -f ./pieeprom-new.bin
The syntax is the same as config.txt See online documentation for the list of parameters.
@@ -694,7 +693,6 @@ printVersions()
echo " CURRENT: $(date -u "-d@${BOOTLOADER_CURRENT_VERSION}") (${BOOTLOADER_CURRENT_VERSION})"
echo " LATEST: $(date -u "-d@${BOOTLOADER_UPDATE_VERSION}") (${BOOTLOADER_UPDATE_VERSION})"
echo " RELEASE: ${FIRMWARE_RELEASE_STATUS} (${FIRMWARE_IMAGE_DIR})"
- echo " Use ${RPI_EEPROM_UPDATE_CONFIG_TOOL} to change the release."
if [ "${BCM_CHIP}" = 2711 ]; then
echo ""
@@ -905,9 +903,7 @@ checkVersion()
if [ "${ACTION_UPDATE_BOOTLOADER}" = 1 ] || [ "${ACTION_UPDATE_VL805}" = 1 ]; then
echo "*** UPDATE AVAILABLE ***"
echo ""
- echo "Run \"sudo rpi-eeprom-update -a\" to install this update now."
- echo
- echo "To configure the bootloader update policy run \"sudo ${RPI_EEPROM_UPDATE_CONFIG_TOOL}\""
+ echo "Run \"rpi-eeprom-update -a\" to install this update now."
echo ""
printVersions
write_status_info "EXIT_UPDATE_REQUIRED"

View File

@ -1,6 +1,37 @@
config BR2_PACKAGE_RPI_EEPROM
bool "rpi-eeprom"
select BR2_PACKAGE_PYTHON3
select BR2_PACKAGE_VCGENCMD
help
EEPROM bootloader firmware for Raspberry Pi 4
EEPROM bootloader firmware update tool for Raspberry Pi
https://github.com/raspberrypi/rpi-eeprom
if BR2_PACKAGE_RPI_EEPROM
choice
prompt "Target platform"
default BR2_PACKAGE_RPI_EEPROM_TARGET_ANY
help
Select the target platform for the EEPROM files to be
installed. The default is to install all EEPROM files for
all Raspberry Pi boards.
config BR2_PACKAGE_RPI_EEPROM_TARGET_ANY
bool "Any Raspberry Pi"
help
Install all EEPROM files for all Raspberry Pi boards.
config BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4
bool "Raspberry Pi 4"
help
Install EEPROM files for Raspberry Pi 4 boards only.
config BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5
bool "Raspberry Pi 5"
help
Install EEPROM files for Raspberry Pi 5 boards only.
endchoice
endif

View File

@ -0,0 +1,3 @@
# Locally computed
sha256 9e64372f0480b8410fce3f9cc12c01548eaac36e36fe0fe8f979535281d41290 rpi-eeprom-cd4048df1d55be89bf84879754a4acf9c92e1f7a.tar.gz
sha256 594b7565fd3ccf8acd4711a2ec1b199181aafbc3426d0bacaa50ef40edbf7c4a LICENSE

View File

@ -4,24 +4,34 @@
#
################################################################################
RPI_EEPROM_VERSION = 16bb29427f96dc8276a7102c0526154a1084bffd
RPI_EEPROM_VERSION = cd4048df1d55be89bf84879754a4acf9c92e1f7a
RPI_EEPROM_SITE = $(call github,raspberrypi,rpi-eeprom,$(RPI_EEPROM_VERSION))
RPI_EEPROM_LICENSE = BSD-3-Clause
RPI_EEPROM_LICENSE_FILES = LICENSE
RPI_EEPROM_INSTALL_IMAGES = YES
RPI_EEPROM_FIRMWARE_PATH = firmware/beta/pieeprom-2020-10-28.bin
define RPI_EEPROM_BUILD_CMDS
$(@D)/rpi-eeprom-config $(@D)/$(RPI_EEPROM_FIRMWARE_PATH) --out $(@D)/default.conf
(cat $(@D)/default.conf | grep -v ^$$; echo HDMI_DELAY=0) > $(@D)/boot.conf
$(@D)/rpi-eeprom-config $(@D)/$(RPI_EEPROM_FIRMWARE_PATH) --config $(@D)/boot.conf --out $(@D)/pieeprom.upd
sha256sum $(@D)/pieeprom.upd | awk '{ print $$1 }' > $(@D)/pieeprom.sig
echo "ts: $$(date -u +%s)" >> $(@D)/pieeprom.sig
ifneq ($(BR2_PACKAGE_RPI_EEPROM_TARGET_ANY)$(BR2_PACKAGE_RPI_EEPROM_TARGET_RPI4),)
define RPI_EEPROM_INSTALL_RPI4_FILES
$(INSTALL) -d $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default
$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/recovery.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/vl805-000138c0.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
$(INSTALL) -D -m 0644 $(@D)/firmware-2711/default/pieeprom-2025-02-11.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2711/default/
endef
endif
define RPI_EEPROM_INSTALL_IMAGES_CMDS
$(INSTALL) -D -m 0644 $(@D)/pieeprom.sig $(BINARIES_DIR)/rpi-eeprom/pieeprom.sig
$(INSTALL) -D -m 0644 $(@D)/pieeprom.upd $(BINARIES_DIR)/rpi-eeprom/pieeprom.upd
ifneq ($(BR2_PACKAGE_RPI_EEPROM_TARGET_ANY)$(BR2_PACKAGE_RPI_EEPROM_TARGET_RPI5),)
define RPI_EEPROM_INSTALL_RPI5_FILES
$(INSTALL) -d $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default
$(INSTALL) -D -m 0644 $(@D)/firmware-2712/default/recovery.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default/
$(INSTALL) -D -m 0644 $(@D)/firmware-2712/default/pieeprom-2025-03-10.bin $(TARGET_DIR)/usr/lib/firmware/raspberrypi/bootloader-2712/default/
endef
endif
define RPI_EEPROM_INSTALL_TARGET_CMDS
$(RPI_EEPROM_INSTALL_RPI4_FILES)
$(RPI_EEPROM_INSTALL_RPI5_FILES)
$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-config $(TARGET_DIR)/usr/bin/rpi-eeprom-config
$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-digest $(TARGET_DIR)/usr/bin/rpi-eeprom-digest
$(INSTALL) -D -m 0755 $(@D)/rpi-eeprom-update $(TARGET_DIR)/usr/bin/rpi-eeprom-update
endef
$(eval $(generic-package))

View File

@ -0,0 +1,5 @@
config BR2_PACKAGE_VCGENCMD
bool "vcgencmd"
help
Command line utility that can get various pieces of
information from the VideoCore GPU on the Raspberry Pi.

View File

@ -0,0 +1,3 @@
# Locally computed
sha256 c31953e8ee666c9b01499d4da639f4f4ec6567822b6daa55dd402468564b1a12 vcgencmd-c57d8c29c46993d93f191218bbc1dc3a73fc7918.tar.gz
sha256 731da956431d1a7c5073e7ee5ebe01f54e359c5339310b32f0893c6fe6507d5a LICENSE

View File

@ -0,0 +1,17 @@
################################################################################
#
# vcgencmd
#
################################################################################
VCGENCMD_VERSION = c57d8c29c46993d93f191218bbc1dc3a73fc7918
VCGENCMD_SITE = $(call github,raspberrypi,utils,$(VCGENCMD_VERSION))
VCGENCMD_LICENSE = BSD-3-Clause
VCGENCMD_LICENSE_FILES = LICENSE
VCGENCMD_SUBDIR = vcgencmd
define VCGENCMD_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/vcgencmd/vcgencmd $(TARGET_DIR)/usr/bin/vcgencmd
endef
$(eval $(cmake-package))