diff --git a/debian/changelog b/debian/changelog index 5d0cf5e..ad50429 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,17 @@ +rpi-eeprom (5.1-1) buster; urgency=medium + + [ Tim Gover ] + * Print the firmware image directory in the version status message + * Remove network-boot beta documentation + + [ Ryan Finnie ] + * Allow for run from local git checkout + + [ Tim Gover ] + * pieeprom-2020-03-04: Netboot enhancements, self update and HDMI diagnostics + + -- Serge Schneider Fri, 13 Mar 2020 14:16:34 +0000 + rpi-eeprom (5.0-2) buster; urgency=medium * Add pciutils dependency diff --git a/firmware/beta/pieeprom-2020-03-04.bin b/firmware/beta/pieeprom-2020-03-04.bin new file mode 100644 index 0000000..2a9c369 Binary files /dev/null and b/firmware/beta/pieeprom-2020-03-04.bin differ diff --git a/firmware/beta/recovery.bin b/firmware/beta/recovery.bin index c69c191..8a1e66a 100644 Binary files a/firmware/beta/recovery.bin and b/firmware/beta/recovery.bin differ diff --git a/firmware/raspberry_pi4_network_boot_beta.md b/firmware/raspberry_pi4_network_boot_beta.md deleted file mode 100644 index 3ecc3c1..0000000 --- a/firmware/raspberry_pi4_network_boot_beta.md +++ /dev/null @@ -1,142 +0,0 @@ -# Raspberry Pi4 network boot (BETA) -The page describes how to install and configure network boot for the Raspberry Pi4 Model B. - -**This is an early beta test and has only been tested on a small number of networks. Check with your network administrator before enabling network boot.** - -This documentation will be merged into the main bootloader documents after the beta test is complete. - -## Known issues -* Linux 5.3 kernel seems to poll SDHCI SD ever 10 seconds printing warnings to dmesg - -## Server configuration -Network boot requires a TFTP and NFS server to be configured. See [Network boot server tutorial](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net_tutorial.md) - -Additional notes:- -* The VideoCore firmware (start4.elf and fixup4.dat) must be updated to the latest rpi-update version in order to get the Pi4 network drivers. -* The latest VideoCore firmware can be downloaded directly from the [rpi-update GitHub repo](https://github.com/Hexxeh/rpi-update) -* The MAC address on the Pi4 is programmed at manufacture and is not derived from the serial number. - -``` -# mac adddress (ip addr) - it should start with DC:A6:32 -ip addr | grep ether | head -n1 | awk '{print $2}' | tr [a-z] [A-Z] - -# serial number -vcgencmd otp_dump | grep 28: | sed s/.*://g -``` - -## Installation - Updating firmware and bootloader -``` -# Install the rpi-eeprom update package -sudo apt update -sudo apt upgrade -sudo apt install rpi-eeprom - -# Get the latest VideoCore firmware which includes the Pi4 network driver in start4.elf -sudo rpi-update - -# (Optional) Update rpi-eeprom-update to automatically get updates / bug fixes. -sudo echo FIRMWARE_RELEASE_STATUS="beta" > /etc/default/rpi-eeprom-update -``` - -### Configuration - Enable network boot -Network boot is not enabled by default in the bootloader. To enable it the bootloader configuration file must be edited. - -**NOTE:** The `/lib/firmware...` file listed in the code block below should not be copied directly, as it requires a date be maually used. There are several versions of the beta bootloader inside that directory, so make sure to select the most up-to-date version for your Raspberry Pi. -``` -# Extract the configuration file -cp /lib/firmware/raspberrypi/bootloader/beta/pieeprom-YYYY-MM-DD.bin pieeprom.bin -rpi-eeprom-config pieeprom.bin > bootconf.txt - -# Enable network boot -# change boot_order from 0x1 (sd-boot) to -BOOT_ORDER=0x21 -# sd-boot then failover to network boot - -# If you have a UART cable then setting BOOT_UART=1 will help debug network boot issues -BOOT_UART=1 - -# Apply the configuration change to the EEPROM image file -rpi-eeprom-config --out pieeprom-netboot.bin --config bootconf.txt pieeprom.bin -``` - -### Update the bootloader EEPROM -``` -# Flash the bootloader EEPROM with network boot enabled -# Run 'rpi-eeprom-update -h' for more information -sudo rpi-eeprom-update -d -f ./pieeprom-netboot.bin -sudo reboot -``` - -## TFTP prefix -As with the Pi3 bootloader the presence of /serial_number/start.elf is used to detect -whether the serial number should be used as the directory prefix for TFTP requests. - -N.B. A future update might additionally check for start4.elf as well as start.elf -in order to have a Pi4 specific TFTP root. The current assumption is that the TFTP -root directory has copied as-is from a Raspbian Buster image file. - -The bootloader loads start4.elf in preference to start.elf so it's possible to -just have an empty start.elf file if you only want to have Pi4 firmware in the TFTP -root directory. - -## Bootloader configuration - -### BOOT_ORDER -The BOOT_ORDER setting allows flexible configuration for the priority of different -bootmodes. It is represented as 32bit unsigned integer where each nibble represents -a bootmode. The bootmodes are attempted in LSB to MSB order. - -E.g. 0x21 means try SD first followed by network boot then stop. Where as -0x2 would mean try network boot and then stop without trying to boot from -the sd-card. - -The retry counters are reset when switching to the next boot mode. - -BOOT_ORDER fields -* 0x0 - NONE (stop with error pattern) -* 0x1 - SD CARD -* 0x2 - NETWORK - -Default: 0x00000001 (with 3 SD boot retries to match the current bootloader behaviour) - -### SD_BOOT_MAX_RETRIES -Specify the maximum number of times that the bootloader will retry booting from the sd-card. --1 means infinite retries -Default: 0 - -### NET_BOOT_MAX_RETRIES -Specify the maximum number of times that the bootloader will retry network boot. --1 means infinite retries -Default: 0 - -### DHCP_TIMEOUT -The timeout in milliseconds for the entire DHCP sequence before failing the current iteration. -Default: 45000 -Minimum: 5000 - -### DHCP_REQ_TIMEOUT -The timeout in milliseconds before retrying DHCP DISCOVER or DHCP REQ. -Default: 4000 -Minimum: 500 - -### TFTP_TIMEOUT -The timeout in milliseconds for an individual file download via TFTP. -Default: 15000 -Minimum: 5000 - -### TFTP_IP -Optional dotted decimal ip address (e.g. 192.169.1.99) for the TFTP server which overrides the server-ip from the DHCP request. -This maybe useful on home networks because tftpd-hpa can be used instead of dnsmasq where broadband router is the DHCP server. -Default: "" - -### TFTP_PREFIX (since 2019-10-08) -Configure the TFTP prefix string to probe -* 0 - The serial number -* 1 - The value of TFTP_PREFIX_STR -* 2 - The mac-address separated by dashes (lower case) -Default: 0 - -### TFTP_PREFIX_STR (since 2019-10-08) -The prefix string to use with TFTP_PREFIX=1 - up to 127 characters. -Default: "" - diff --git a/firmware/release-notes.md b/firmware/release-notes.md index e7899a2..9082a5d 100644 --- a/firmware/release-notes.md +++ b/firmware/release-notes.md @@ -1,5 +1,32 @@ # Raspberry Pi4 bootloader EEPROM release notes +## 2020-03-11 Add 2020-03-04 beta firmware recovery + * Support static IP address configuration. The following fields may be + set manually using dotted decimal address. If set, then DHCP if skipped. + * CLIENT_IP + * SUBNET + * GATEWAY + * TFTP_IP + * If a fatal bootloader occurs then a HDMI diagnostics screen is displayed + at VGA/DVI resolution on both monitors for two minutes. This may be + disabled by setting DISABLE_HDMI=1 in the EEPROM configuration OR + setting display_splash=1 in config.txt. + * Allow the PXE menu option to match a custom string specified by + PXE_OPTION43. The default is still "Raspberry Pi Boot" + * DHCP_OPTION97 - The default GUID has now changed to + RPI4+BOARD_ID+ETH_MAC_LSB+SERIAL in order to make it easier to + automatically identify Raspberry Pi computers. The old behaviour + is enabled by setting DHCP_OPTION97=0 which simply repeats the serial + number 4 times. + * SELF_UPDATE. If SELF_UPDATE is set to 1 in the EEPROM configration AND + config.txt contains bootloader_update=1 then the bootloader will looking + for pieeprom.upd and vl805.bin and apply these firmware files if + they are different to current image before doing a watchdog reset. + This should make it easier to update the bootloader for network + booted setups because an sd-card is not required for recovery.bin. + As usual, TFTP should only be used on private networks because the + protocol is not secure against spoofing. + ## 2020-02-27 rpi-eeprom-update & firmware * Remove the dependency check for the vl805 utility. This is deprecated and there is no 64-bit version. The file is still available in Github diff --git a/rpi-eeprom-update b/rpi-eeprom-update index 7feb54d..6d78b00 100755 --- a/rpi-eeprom-update +++ b/rpi-eeprom-update @@ -10,7 +10,19 @@ if [ -f /etc/default/rpi-eeprom-update ]; then . /etc/default/rpi-eeprom-update fi -FIRMWARE_ROOT=${FIRMWARE_ROOT:-/lib/firmware/raspberrypi/bootloader} +LOCAL_MODE=0 +if [ -n "$FIRMWARE_ROOT" ]; then + # Provided by environment + true +elif [ -d /lib/firmware/raspberrypi/bootloader ]; then + # Default firmware root exists + FIRMWARE_ROOT=/lib/firmware/raspberrypi/bootloader +else + # Work from local git checkout + LOCAL_MODE=1 + FIRMWARE_ROOT="${script_dir}/firmware" +fi + # May be used to select beta or stable releases instead of the default critical updates. FIRMWARE_RELEASE_STATUS=${FIRMWARE_RELEASE_STATUS:-critical} FIRMWARE_IMAGE_DIR=${FIRMWARE_IMAGE_DIR:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}} @@ -394,6 +406,7 @@ printVersions() echo "CURRENT: $(date -u "-d@${BOOTLOADER_CURRENT_VERSION}") (${BOOTLOADER_CURRENT_VERSION})" echo " LATEST: $(date -u "-d@${BOOTLOADER_UPDATE_VERSION}") (${BOOTLOADER_UPDATE_VERSION})" + echo " FW DIR: ${FIRMWARE_IMAGE_DIR}" if [ "${ACTION_UPDATE_VL805}" = 1 ]; then echo "VL805: update required" @@ -597,7 +610,7 @@ AUTO_UPDATE_BOOTLOADER=0 AUTO_UPDATE_VL805=0 MACHINE_OUTPUT="" JSON_OUTPUT="no" -IGNORE_DPKG_CHECKSUMS=0 +IGNORE_DPKG_CHECKSUMS=$LOCAL_MODE while getopts A:adhif:m:ju:r option; do case "${option}" in