Compare commits

..

86 Commits

Author SHA1 Message Date
Tim Gover
e86fc31d7a Merge pull request #456 from timg236/pieeprom-2022-11-25-default
pieeprom-2022-11-25 Promote STABLE to DEFAULT release
2022-12-05 09:52:09 +00:00
Tim Gover
ca1f5469db pieeprom-2022-11-25 Promote STABLE to DEFAULT release
* [tryboot] conditional statement + tryboot_a_b mode
* Support custom OTP mac addresses
* Increase TFTP_MAX_BLOCK_SIZE
* Stop NVMe cleanly
* Fixes for NETCONSOLE parsing and initialisation.
* Long filename support for start_file / fixup_file.
* Secure boot and display debug info on the diagnostis screen.
2022-12-01 15:53:42 +00:00
Tim Gover
0ebda77d49 tools: Add secure-boot related scripts to tools
Copy the tools from usbboot. The next step is for usbboot
to include rpi-eeprom as a git submodule to de-duplicate
EEPROM images and tools.
2022-11-29 16:59:19 +00:00
Tim Gover
b9fcc9dc72 Merge pull request #455 from timg236/rpi-eeprom-config-padding
rpi-eeprom-config: Improve robustness of padding code
2022-11-28 15:41:48 +00:00
Tim Gover
2c709e087a unit-test: Update to cover all the releases including beta 2022-11-28 12:56:03 +00:00
Tim Gover
214cb6ffd4 rpi-eeprom-config: Make padding more robust.
Make it explicit that a modifiable file is stored withing a
single 4K sector (for erase) and that this includes the 20
byte header.

When modifying a file pad up to the next section instead of
just to an alignment size. This enables future changes to be
more flexible in terms of alignment and padding. Although,
files/sections with different padding requirements will likely
get a different magic.
2022-11-28 12:55:58 +00:00
Tim Gover
d2cbfbc292 rpi-eeprom-config: Add -x option to extract files
For test/debug add an option to extract all of the modifiable files.
2022-11-28 12:55:58 +00:00
Tim Gover
7bbbd9407f Merge pull request #453 from timg236/pieeprom-2022-11-25
pieeprom-2022-11-25 - Fix unconfigured netconsole messages - BETA + STABLE
2022-11-25 11:21:40 +00:00
Tim Gover
141a8cd9f0 pieeprom-2022-11-25 - Fix unconfigured netconsole messages - BETA + STABLE
* Fix unconfigured netconsole messages https://github.com/raspberrypi/rpi-eeprom/issues/452
* Add display state to HDMI diagnostics screen
2022-11-25 11:00:38 +00:00
Tim Gover
9269d78320 Align rpi-eeprom-digest with usbboot 2022-11-07 09:37:15 +00:00
Tim Gover
1197a4ae31 Merge pull request #449 from timg236/pieeprom-2022-11-04
* Fix an OOM issue that was causing secure boot to fail (but not from RPIBOOT)
2022-11-04 15:34:15 +00:00
Tim Gover
551d9da184 * Fix an OOM issue that was causing secure boot to fail (but not from RPIBOOT) 2022-11-04 15:26:17 +00:00
Tim Gover
eb3bb76a81 rpi-eeprom-digest: Update from usbboot for the verify option
Sync to the version from usbboot in order to add support for
the verify option. This provides a command line interface for
verifying a .sig file (with RSA) against a public key in .PEM
format.
2022-11-03 11:48:54 +00:00
Tim Gover
049da63a4e Merge pull request #448 from timg236/pieeprom-2022-11-02
pieeprom-2022-11-02: Add option to use Customer OTP for MAC address -…
2022-11-02 14:05:51 +00:00
Tim Gover
cb57a7df05 pieeprom-2022-11-02: Add option to use Customer OTP for MAC address - BETA
Add a new EEPROM property that allows the Ethernet MAC address
programmed during manufacture to be overridden a value in the
Customer OTP register.

MAC_ADDRESS_OTP=A,B
where A and B are the customer row numbers (0..7)
2022-11-02 11:05:01 +00:00
Tim Gover
092f876595 Merge pull request #447 from timg236/pieeprom-2022-10-18-stable
pieeprom-2022-10-18: Promote BETA release to STABLE
2022-10-20 12:00:11 +01:00
Tim Gover
ec3ed8bc3c pieeprom-2022-10-18: Promote BETA release to STABLE 2022-10-20 10:59:51 +01:00
Tim Gover
d0ff0d5d72 Update release notes for 2022-10-18 - BETA 2022-10-20 10:56:52 +01:00
Tim Gover
d995c13dd9 Merge pull request #446 from timg236/pieeprom-2022-10-18
2022-10-18 - Tryboot enhancements for A/B partition booting - BETA
2022-10-18 12:30:47 +01:00
Tim Gover
0a5328a01a 2022-10-18 - Tryboot enhancements for A/B partition booting - BETA
* Add support for a [tryboot] conditional statement in config files.
* Load config.txt instead of tryboot.txt if tryboot_a_b=1 in autoboot.txt
* Fix failover to partition 1  if the `boot_partition` points to non-bootable partition.
* Enable `autoboot.txt` in secure-boot mode.
2022-10-18 12:06:10 +01:00
Tim Gover
19362b763f Merge pull request #445 from peterharperuk/fix_usb_issue
2022-10-12 - Fix USB boot regression - BETA
2022-10-12 17:12:40 +01:00
Peter Harper
a16f73a2e3 2022-10-12 - Fix USB boot regression - BETA
* Reduce size of USB transfer
2022-10-12 17:00:13 +01:00
Tim Gover
272d1573e3 Merge pull request #444 from peterharperuk/fix_screen_clearing_issue
2022-10-06 - Fix issue with screen display - BETA
2022-10-06 16:51:29 +01:00
Peter Harper
a5f5513b16 2022-10-06 - Fix issue with screen display - BETA
* Fix issue with the bootloader display not being cleared properly
2022-10-06 16:49:38 +01:00
Tim Gover
3f85bc0126 Merge pull request #441 from peterharperuk/nvme_fix_to_beta
2022-10-03 - Add pieeprom-2022-10-03.bin - BETA
2022-10-03 15:20:30 +01:00
Peter Harper
134e95484a 2022-10-03 - Add pieeprom-2022-10-03.bin - BETA
* Increase the size of USB in-transfers
* Increase TFTP_MAX_BLOCKSIZE to 1468
* stop NVMe cleanly
2022-10-03 14:33:42 +01:00
Tim Gover
2efe9daef6 rpi-eeprom-update: Mention rpiboot in the CM4 not supported error message 2022-09-30 10:52:44 +01:00
Tim Gover
e41bec0bed * Parse target MAC address in NETCONSOLE property
https://github.com/raspberrypi/rpi-eeprom/issues/440
2022-09-02 16:50:16 +01:00
Tim Gover
8c18e9c9bb chmod -x pieeprom-2022-08-02.bin 2022-09-02 15:17:25 +01:00
Tim Gover
e4f90a89e6 2022-08-02 - Add pieeprom-2022-08-02 - BETA + STABLE
* Display the secure-boot configuration on the diagnostics screen
  if secure-boot is enabled.
  See https://www.raspberrypi.com/documentation/computers/configuration.html#bcm2711-bootloader-properties-chosenbootloader
* Toggle SD power at boot to reset card-state after ROM SD probe.
2022-08-02 17:05:12 +01:00
Tim Gover
38ee969c32 Merge pull request #439 from timg236/pieeprom-2022-07-26
pieeprom-2022-07-26: - Add pieeprom-2022-07-26 - BETA + STABLE
2022-07-26 11:41:11 +01:00
Tim Gover
7bc807661f pieeprom-2022-07-26: - Add pieeprom-2022-07-26 - BETA + STABLE
* Fix FAT issue https://github.com/raspberrypi/rpi-eeprom/issues/438
2022-07-26 11:34:23 +01:00
Tim Gover
4703b71a95 Merge pull request #437 from timg236/pieeprom-2022-07-22
pieeprom-2022-07-22 - Add pieeprom-2022-07-22 - BETA + STABLE
2022-07-22 14:52:36 +01:00
Tim Gover
a70a48ccb3 pieeprom-2022-07-22 - Add pieeprom-2022-07-22 - BETA + STABLE
* NVMe fix large file reads - see https://github.com/raspberrypi/firmware/issues/1731
  The firmware fix is also relevant for the bootloader when loading large boot.img files.
2022-07-22 13:45:42 +01:00
Tim Gover
51648bb0b3 Merge pull request #436 from timg236/pieeprom-2022-07-19
pieeprom-2022-07-19: Promote release from beta to STABLE
2022-07-20 12:22:35 +01:00
Tim Gover
6425f70225 pieeprom-2022-07-19: Promote release from beta to STABLE 2022-07-20 10:03:20 +01:00
Tim Gover
d7e137cf05 Merge pull request #435 from timg236/pieeprom-2022-07-14
2022-07-14 - Add pieeprom-2022-07-14 - BETA
2022-07-15 15:16:16 +01:00
Tim Gover
564fdb44f9 2022-07-14 - Add pieeprom-2022-07-14 - BETA
Enable long-filenames & sub-directories for start_file & fixup_file.
Use Unix path separators with a maximum path of 255 characters.
Relative paths (. or ..) are not supported.
2022-07-14 17:12:50 +01:00
Tim Gover
4eb1bd11c1 Restore ARM 32-bit vl805 flash programming tool
The tool was removed because for Pi4/Pi400 the VL805 update is now
handled by the bootloader. However, this might still be be useful
for anyone who is developing a custom VL805 board with an SPI EEPROM
and needs a mechanism to flash this.
2022-07-10 19:47:31 +01:00
Tim Gover
1c758a0904 Merge pull request #429 from timg236/pieeprom-2022-05-20.bin
pieeprom-2022-05-20.bin Reduce boot-time when network install is disabled. - BETA
2022-05-20 10:08:06 +01:00
Tim Gover
288489257f pieeprom-2022-05-20.bin Reduce boot-time when network install is disabled - BETA
* Reduce boot-time when network install is disabled NET_INSTALL_ENABLED=0.
* Switch to the newer SDIO HC and increase SPI clock speed.
2022-05-20 09:51:34 +01:00
Tim Gover
f38458e7cd Merge pull request #428 from timg236/prefer-self-update
rpi-eeprom-update: Avoid using recovery.bin if the current bootloader supports self-update
2022-05-16 08:34:16 +01:00
Tim Gover
4cbc4bc1c5 rpi-eeprom-update: Avoid using recovery.bin if the current bootloader supports self-update
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
does not support network or USB MSD loading of recovery.bin self-update has to
be used with other boot modes anyway.

If RPI_EEPROM_SELF_UPDATE=1 then avoid installing recovery.bin so long as the
current bootloader version supports self-update from SD/MMC and that doesn't
look as though SELF_UPDATE has been disable in the EEPROM config.
2022-05-11 14:06:13 +01:00
Tim Gover
43262c2c5c make-recovery-images: Attempt to avoid orphaned loopback devices 2022-05-11 14:04:00 +01:00
Tim Gover
3393903982 make-imager-release: Bump the imager release to 2022-04-26 2022-05-11 14:04:00 +01:00
Tim Gover
51491abb9c Merge pull request #426 from timg236/default-2022-04-26
2022-04-27 - Promote pieeprom-2022-04-26 to the DEFAULT release
2022-04-28 15:08:19 +01:00
Tim Gover
1b22faf38d pieeprom-2022-04-26: Promote pieeprom-2022-04-26 to the DEFAULT release
Enable Network Install in the default bootloader release.
This release is signed with the secure-boot key and supports
the new HTTP boot-order for downloading signed boot images for
automated provisioning systems.
2022-04-27 16:52:10 +01:00
Tim Gover
a4419567b8 Move old beta releases out of the APT package and into the old directory 2022-04-27 16:49:23 +01:00
Tim Gover
d75e8ff07f Merge pull request #425 from timg236/network-install-secure
pieeprom-2022-04-26: Network install / secure-boot STABLE/BETA
2022-04-27 10:50:45 +01:00
Tim Gover
83347f3968 pieeprom-2022-04-26: Network install / secure-boot STABLE/BETA
Candidate for the next default release.
2022-04-26 14:09:52 +01:00
Tim Gover
61f40841b7 Merge pull request #424 from timg236/pieeprom-2022-04-14
pieeprom-2022-04-14: Ethernet auto IDDQ fix & EEPROM update diagnostics
2022-04-22 20:09:38 +01:00
Tim Gover
7dfdc23014 pieeprom-2022-04-14: Ethernet auto IDDQ fix & EEPROM update diagnostics - BETA
* Fix netboot reboot failure on Pi 4B R1.1 if OS enables IDDQ power saving
     https://github.com/raspberrypi/rpi-eeprom/issues/417
* Fix incorrect error code (configuration error) on EEPROM update failure.
* Enable more verbose errors for EEPROM update failures
2022-04-22 17:52:15 +01:00
Tim Gover
dd0e086280 Merge pull request #420 from peterharperuk/net_install_stable
2022-03-10: Promote 2022-03-10 to LATEST/STABLE
2022-03-16 10:15:18 +00:00
Peter Harper
e8927007e3 2022-03-10: Promote 2022-03-10 to LATEST/STABLE
* Includes new net install feature, enabled by default for Pi 4 and Pi 400
* New net install download screen may appear on boot if a boot location can't
  be found or if boot is slow. Alternative press and hold shift on boot to
  start net install.
* New HTTP boot order.
* Bootloader diagnosis screen is now 720p if supported by your monitor.
* Self update mode is now enabled during SD/EMMC boot.
* The PARTITION number can now be specified as an EEPROM property.
* Allow smaller MSD discovery timeouts to be specified.
* Some tweaks and fixes to IPV6 netboot.
* Increase the max ramdisk size to 128MB
* Increase timeout of early SD/EMMC commands to 100ms
2022-03-16 09:50:01 +00:00
Tim Gover
056d2432ba Merge pull request #418 from peterharperuk/final_net_install_update
2022-03-10: HTTP_PATH fix - BETA
2022-03-10 16:50:37 +00:00
Peter Harper
2dad157037 2022-03-10: HTTP_PATH fix - BETA
* Fix the defective HTTP_PATH eeprom configuration
2022-03-10 14:59:53 +00:00
Tim Gover
e866f258d9 Merge pull request #415 from peterharperuk/net_install_beta3
2022-02-28: More net Install changes - BETA
2022-02-28 17:51:00 +00:00
Peter Harper
827a199c7c 2022-02-28: More net Install changes - BETA
Net install changes.
* Net install is initiated on boot if shift is pressed.
* New HTTP boot order (7) and configuration parameters,
  HTTP_HOST, HTTP_PATH, HTTP_PORT to set url

Other interesting changes.
* Increase the max ramdisk size to 128MB
* Increase timeout of early SD/EMMC commands to 100ms
2022-02-28 16:00:34 +00:00
peterharperuk
42de218ded Merge pull request #411 from peterharperuk/net_install_beta_fixes
2022-02-16: Network Install updated - BETA
2022-02-17 14:15:28 +00:00
Peter Harper
e2e58a7dba 2022-02-16: Network Install updated - BETA
Net install changes.
* Got rid of confirmation step that required you to press <Space> to
  initiate net install. Now just long press <Shift>
* Updated the screen text to make it more obvious the device is still
  trying boot when the net install is showing.
* Fixed a DHCP net install bug which caused us to lose the
  gateway address.
* Fixed a bug with the uIP timers which could cause net install to
  always fail.
* Implemented resume and retry on download failure.

Other interesting changes.
* Allow smaller MSD discovery timeouts to be specified.
* Some tweaks and fixes to IPV6 netboot.
2022-02-17 12:09:20 +00:00
Tim Gover
9a70770c3e Update config.yml 2022-02-12 08:25:02 +00:00
Tim Gover
e899089b42 Update bug_report.yml 2022-02-12 08:22:52 +00:00
Tim Gover
e75ccb4b1c Update bug_report.yml 2022-02-12 08:18:46 +00:00
Tim Gover
aa59c8f7f8 Update bug_report.yml
Fix URL and tidyup
2022-02-12 08:13:44 +00:00
Tim Gover
c09026fcc7 Update bug_report.yml
Added request for bootloader config plus links to various sections of the docs for diagnostics
2022-02-12 08:08:54 +00:00
Tim Gover
348f7a5009 Update bug_report.yml 2022-02-11 09:28:25 +00:00
Tim Gover
368227330b Update bug_report.yml 2022-02-11 09:22:47 +00:00
Tim Gover
27fa8d7529 Update bug_report.yml 2022-02-11 09:18:44 +00:00
Tim Gover
f555eff6e6 Update bug_report.yml 2022-02-11 09:18:23 +00:00
Tim Gover
a84587a1ba Update bug_report.yml 2022-02-11 09:17:42 +00:00
Tim Gover
2e6344b4d2 Update bug_report.yml 2022-02-11 08:54:21 +00:00
Tim Gover
12e3352ce5 Update bug_report.yml 2022-02-11 08:53:24 +00:00
Tim Gover
55300389a9 Update and rename bug_report.md to bug_report.yml
Initial draft
2022-02-11 08:51:19 +00:00
Tim Gover
70df0c270d Update config.yml 2022-02-11 08:26:54 +00:00
Tim Gover
7deaaa181a Merge pull request #407 from timg236/pieeprom-2022-02-08
pieeprom-2022-02-08: Fix secure-boot boot failure - STABLE
2022-02-09 17:49:10 +00:00
Tim Gover
eb4502d528 pieeprom-2022-02-08: Fix secure-boot boot failure - STABLE
Fix boot failure regression on boards which had the OTP secure boot bits set.
2022-02-09 13:27:27 +00:00
Tim Gover
21bc8412b8 Merge pull request #406 from timg236/network-install-release-notes
Update release-notes for network-install BETA
2022-02-08 17:21:23 +00:00
Tim Gover
829c57378d Update release-notes for network-install BETA
Include details of other changes plus instructions for disabling
network-install.
2022-02-08 14:32:52 +00:00
Tim Gover
0254a8e959 Merge pull request #405 from peterharperuk/net_install_beta
2022-02-04: Network Install - BETA
2022-02-08 09:47:10 +00:00
Peter Harper
14b6455d07 2022-02-04: Network Install - BETA
* Includes new network install feature
2022-02-04 12:48:54 +00:00
timg236
77e4322e1f Merge pull request #404 from timg236/make-release-timestamp
make-release: Use rpi-eeprom-digest to generate update timestamps
2022-02-03 10:17:10 +00:00
Tim Gover
05cc42b98b make-release: Use rpi-eeprom-digest to generate update timestamps
Previously, the .sig would have an update timestamp of zero. Switching
to rpi-eeprom-digest is preferable because the update timestamp will
be much closer to when the image was installed.

N.B. Update-timestamp is used to track configuration changes and is
independent of the build-timestamps which are the version of the
bootloader executable.
2022-02-03 09:29:42 +00:00
Tim Gover
9652be2271 Fix typo in release notes date 2022-01-31 15:42:29 +00:00
Tim Gover
bd09360d11 Update make-imager-release to 2022-01-25 2022-01-31 15:42:29 +00:00
Tim Gover
1ce83c09b3 Merge pull request #401 from timg236/default-release-2022-01-25
2022-01-25 - Promote pieeprom-2022-01-25 to the DEFAULT release
2022-01-31 11:48:20 +00:00
Tim Gover
49355f48b3 2022-01-25 - Promote pieeprom-2022-01-25 to the DEFAULT release
Interesting changes since the last default release
    * Support and bug fixes for all Compute Module variants.
    * NVMe interoperability fixes
    * FAT/GPT fixes and file-system performance improvements.
    * Add secure-boot support for industrial applications
      See https://github.com/raspberrypi/usbboot/blob/master/secure-boot-recovery/README.md
    * Added ramdisk / boot.img - for RPIBOOT and secure-boot.
2022-01-31 09:48:01 +00:00
119 changed files with 913 additions and 173 deletions

View File

@@ -1,63 +0,0 @@
---
name: Bug report
about: Create a bug report for the bootloader EEPROM or rpi-eeprom-update scripts. Please use the Raspberry Pi General Discussion forum for general questions about the bootloader.
---
This repository tracks bugs for the Raspberry Pi 4 bootloader EEPROM and Linux update scripts.
* If you suspect a hardware problem then please read the [Boot Problems](https://www.raspberrypi.org/forums/viewtopic.php?p=437084) post first before contacting the reseller.
* Support questions or should be posted on the Raspberry Pi [General Discussion](https://www.raspberrypi.org/forums/viewforum.php?f=63) forum
**Mandatory information**
* Raspberry Pi model
* Board revision (`cat /proc/cpuinfo | grep Revision`)
* Operating system version
* Details of any hardware attached e.g. links to USB
* Photo of the HDMI diagnostics screen, UART trace.
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
**Expected behaviour**
A clear and concise description of what you expected to happen.
**Bootloader version and configuration**
Please include the bootloader version and config.
```bash
vcgencmd bootloader_version
vcgencmd bootloader_config
```
**SD card boot (please complete the following information):**
- SD card type
- Partition information (`sudo fdisk -l`) if you are able to obtain this from another computer
**USB boot (please complete the following information):**
Verify that the the USB device works correctly when hot-plugged under Linux and attach the output of 'lsusb -vvv'.
**Network boot (please complete the following information):**
Network boot bug normally requires one or more of the following log types. [PiServer](https://github.com/raspberrypi/piserver) is the officially supported network boot server.
- DHCP server configuration files e.g. `dnsmasq.conf`
- Wireshark binary packet capture
- UART logs with `uart_2ndstage=1` set in `config.txt`
**NVMe boot (please complete the following information):**
```bash
sudo apt-get install nvme-cli
sudo nvme list
sudo nvme id-ctrl -H /dev/nvme0
sudo nvme list-ns /dev/nvme0
sudo nvme id-ns -H /dev/nvme0 --namespace-id=1
```
**Additional context**
Add any other context about the problem here.
The [Bootloader configuration](https://www.raspberrypi.org/documentation/computers/raspberry-pi.html#raspberry-pi-4-bootloader-configuration) page describes how to enable UART or NETCONSOLE logs. For complex USB boot issues NETCONSOLE logs are recommended.

123
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,123 @@
name: "Bug report"
description: Create a report to help us fix your issue
body:
- type: markdown
attributes:
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.
* 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.
* The ["Is your Pi not booting?"](https://forums.raspberrypi.com/viewtopic.php?f=28&t=58151) post has lots of useful advice.
- type: textarea
id: description
attributes:
label: Describe the bug
description: |
Add a clear and concise description of what you think the bug is.
* Attach a photo of the bootloader [diagnostics](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#boot-diagnostics-on-the-raspberry-pi-4).
* If the system is failing to boot then please check if the green activity LED is displaying an [error pattern](https://www.raspberrypi.com/documentation/computers/configuration.html#led-warning-flash-codes).
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce the behaviour
description: |
List the steps required to reproduce the issue.
validations:
required: true
- type: dropdown
id: model
attributes:
label: Device (s)
description: On which device you are facing the bug?
multiple: true
options:
- Raspberry Pi 4 Mod. B
- Raspberry Pi 400
- Raspberry Pi CM4
- Raspberry Pi CM4 Lite
- Other
validations:
required: true
- type: textarea
id: config
attributes:
label: Bootloader configuration.
description: |
Copy and paste the results of `vcgencmd bootloader_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.
validations:
required: true
- type: textarea
id: system
attributes:
label: System
description: |
Copy and paste the results of the `raspinfo` command in to this section.
Alternatively, copy and paste a pastebin link, or add answers to the following questions:
* Which OS and version (`cat /etc/rpi-issue`)?
* Which bootloader version (`vcgencmd bootloader_version`)?
* Which firmware version (`vcgencmd version`)?
* Which kernel version (`uname -a`)?
validations:
required: false
- type: textarea
id: Logs
attributes:
label: Bootloader logs
description: |
If the problem can't be diagnosed from the bootloader HDMI diagnostics screen then we'll normally need to see more detailed logs to diagnose the problem. The bootloader and GPU firmware can be configured to enable log output to the UART pins `14` and `15` on the [40-pin GPIO header](https://www.raspberrypi.com/documentation/computers/os.html#gpio-and-the-40-pin-header)
* To enable UART logging from the bootloader specify [BOOT_UART=1](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_UART) in the EEPROM config
* To enable UART logging from the `start.elf` GPU firmware stage add [uart_2ndstage=1](https://www.raspberrypi.com/documentation/computers/config_txt.html#uart_2ndstage) to `config.txt`.
* If you are familiar with using Wireshark then it's also possible to use [NETCONSOLE](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#NETCONSOLE) write logs to UDP packets.
Please paste the bootloader logs here.
validations:
required: false
- type: textarea
id: USB
attributes:
label: USB boot
description: |
Before using USB as the boot device it's advisble to verify that the USB device is [compatible](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#hardware-compatibility) and works reliably from Linux.
Please specify the make and model of the USB device plus any HUBs or USB/SATA adapters. Please also capture the output of the following command from Linux `lsusb -vvv` and paste the results here.
validations:
required: false
- type: textarea
id: NVMe
attributes:
label: NVMe boot
description: |
Before using NVMe as the boot device it's advisble to verify that the NVMe storage is working reliably when mounted from Linux. Please specify the make and model and also capture the following information from a working system when reporting NVMe issues.
* `sudo apt-get install nvme-cli`
* `sudo nvme list`
* `sudo nvme id-ctrl -H /dev/nvme0`
* `sudo nvme list-ns /dev/nvme0`
* `sudo nvme id-ns -H /dev/nvme0 --namespace-id=1`
validations:
required: false
- type: textarea
id: tftp
attributes:
label: Network (TFTP boot)
description: |
Please provide the following information if possible:-
* DHCP server configuration files e.g. `dnsmasq.conf`
* Wireshark binary packet capture
validations:
required: false

View File

@@ -1,2 +1,9 @@
blank_issues_enabled: false
contact_links:
- name: "⛔ Question"
url: https://www.raspberrypi.org/forums
about: "Please do not use GitHub for asking questions. If you simply have a question, then the Raspberry Pi forums are the best place to ask it. Thanks in advance for helping us keep the issue tracker clean!"
- name: "⛔ Problems with Raspberry Pi Imager / network-install"
url: https://github.com/raspberrypi/rpi-imager
about: "If the problem with network install occurs after the Raspberry Pi Imager UI has started then please report it at https://github.com/raspberrypi/rpi-imager/issues. Otherwise, raise the bug report here."

30
LICENSE
View File

@@ -64,4 +64,32 @@ License: custom
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
DAMAGE.
License: uIP
Copyright (c) 2006, Swedish Institute of Computer Science.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the Institute nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,7 +1,163 @@
# Raspberry Pi4 bootloader EEPROM release notes
USB MSD boot also requires the firmware from Raspberry Pi OS 2020-08-20 or newer.
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#raspberry-pi-4-bootloader-configuration
## 2022-12-01 - Promote pieeprom-2022-11-25 to the DEFAULT release.
Interesting changes since the last default release
* [tryboot] conditional statement + tryboot_a_b mode
* Support custom OTP mac addresses
* Increase TFTP_MAX_BLOCK_SIZE
* Stop NVMe cleanly
* Fixes for NETCONSOLE parsing and initialisation.
* Long filename support for start_file / fixup_file.
* Secure boot and display debug info on the diagnostis screen.
## 2022-11-25 - Fix unconfigured netconsole messages - BETA + STABLE
* Fix unconfigured netconsole messages https://github.com/raspberrypi/rpi-eeprom/issues/452
* Add display state to HDMI diagnostics screen
## 2022-11-04 - Fix secure boot issue - BETA + STABLE
* Fix an OOM issue that was causing secure boot to fail (but not from RPIBOOT)
## 2022-11-02 - Add option to use Customer OTP for MAC address - BETA
* Add a new EEPROM property that allows the Ethernet MAC address
programmed during manufacture to be overridden a value in the
Customer OTP register.
MAC_ADDRESS_OTP=A,B
where A and B are the customer row numbers (0..7)
## 2022-10-20 - Promote pieeprom-2022-10-18 BETA release to stable
## 2022-10-18 - Tryboot enhancements for A/B partition booting - BETA
* Add support for a [tryboot] conditional statement in config files.
* Load config.txt instead of tryboot.txt if tryboot_a_b=1 in autoboot.txt
* Fix failover to partition 1 if the `boot_partition` points to non-bootable partition.
* Enable `autoboot.txt` in secure-boot mode.
## 2022-10-12 - Fix USB boot regression - BETA
* Reduce size of USB transfer
## 2022-10-06 - Fix issue with screen display - BETA
* Fix issue with the bootloader display not being cleared properly
## 2022-10-03 - Add pieeprom-2022-10-03.bin - BETA
* Increase the size of USB in-transfers
* Increase TFTP_MAX_BLOCKSIZE to 1468
* stop NVMe cleanly
## 2022-09-02 - Add pieeprom-2022-09-02 - BETA + STABLE
* Parse target MAC address in NETCONSOLE property https://github.com/raspberrypi/rpi-eeprom/issues/440
## 2022-08-02 - Add pieeprom-2022-08-02 - BETA + STABLE
* Display the secure-boot configuration on the diagnostics screen
if secure-boot is enabled.
See https://www.raspberrypi.com/documentation/computers/configuration.html#bcm2711-bootloader-properties-chosenbootloader
* Toggle SD power at boot to reset card-state after ROM SD probe.
## 2022-07-26 - Add pieeprom-2022-07-26 - BETA + STABLE
* Fix FAT issue https://github.com/raspberrypi/rpi-eeprom/issues/438
## 2022-07-22 - Add pieeprom-2022-07-22 - BETA + STABLE
* NVMe fix large file reads - see https://github.com/raspberrypi/firmware/issues/1731
The firmware fix is also relevant for the bootloader when loading
large boot.img files.
## 2022-07-19 - Add pieeprom-2022-07-19 - STABLE
* Enable secure-boot on the 2022-07-14 beta release and promote to stable.
## 2022-07-14 - Add pieeprom-2022-07-14 - BETA
* Enable long-filenames & sub-directories for start_file & fixup_file.
Use Unix path separators with a maximum path of 255 characters.
Relative paths (. or ..) are not supported.
## 2022-05-20 - Add pieeprom-2022-05-20 - BETA
* Reduce boot-time when network install is disabled NET_INSTALL_ENABLED=0.
* Switch to the newer SDIO HC and increase SPI clock speed.
## 2022-04-27 - Promote pieeprom-2022-04-26 to the DEFAULT release
* Enable Network Install in the default bootloader release.
* This release is signed with the secure-boot key and supports
the new HTTP boot-order for downloading signed boot images for
automated provisioning systems.
## 2022-04-22 - Add pieeprom-2022-04-26 release - STABLE/BETA
* Release pieeprom-2022-04-22 signed with the secure-boot key so that
network install can be used on secure-boot devices.
## 2022-04-22 - Add pieeprom-2022-04-22 release - BETA
* Fix netboot reboot failure on Pi 4B R1.1 if OS enables IDDQ power saving
https://github.com/raspberrypi/rpi-eeprom/issues/417
* Fix incorrect error code (configuration error) on EEPROM update failure.
* Enable more verbose errors for EEPROM update failures.
## 2022-03-10 - Promote the 2022-03-10 beta release to LATEST/STABLE
* Includes new net install feature, enabled by default for Pi 4 and Pi 400
* New net install download screen may appear on boot if a boot location can't
be found or if boot is slow. Alternative press and hold shift on boot to
start net install.
* New HTTP boot order.
* Bootloader diagnosis screen is now 720p if supported by your monitor.
* Self update mode is now enabled during SD/EMMC boot.
* The PARTITION number can now be specified as an EEPROM property.
* Allow smaller MSD discovery timeouts to be specified.
* Some tweaks and fixes to IPV6 netboot.
* Increase the max ramdisk size to 128MB
* Increase timeout of early SD/EMMC commands to 100ms
## 2022-03-10 - HTTP_PATH fix - BETA
* Fix the defective HTTP_PATH eeprom configuration
## 2022-02-28 - More net Install changes - BETA
Net install changes.
* Net install is initiated on boot if shift is pressed.
* New HTTP boot order (7) and configuration parameters,
HTTP_HOST, HTTP_PATH, HTTP_PORT to set url
Other interesting changes.
* Increase the max ramdisk size to 128MB
* Increase timeout of early SD/EMMC commands to 100ms
## 2022-02-16 - Net Install fixes - BETA
Net install changes.
* Got rid of confirmation step that required you to press <Space> to
initiate net install. Now just long press <Shift>
* Updated the screen text to make it more obvious the device is still
trying boot when the net install is showing.
* Fixed a DHCP net install bug which caused us to lose the
gateway address.
* Fixed a bug with the uIP timers which could cause net install to
always fail.
* Implemented resume and retry on download failure.
Other interesting changes.
* Allow smaller MSD discovery timeouts to be specified.
* Some tweaks and fixes to IPV6 netboot.
## 2022-02-08 - Fix secure-boot boot failure - STABLE
* Fix boot failure regression on boards which had the OTP secure boot bits set.
## 2022-02-04 - Network Install - BETA
* New network install feature for the bootloader. To disable network install
(e.g. in an industrial product) set NET_INSTALL_ENABLED=0 in the EEPROM
config or HDMI_DISABLE=1.
* Self update mode is now enabled during SD/EMMC boot. This enables
rpi-eeprom-update to be used on a CM4 / CM4-lite because recovery.bin
is not required. For industrial products we recommend disabling
self-update after initial setup by setting ENABLE_SELF_UPDATE=0 in
the EEPROM config.
* The PARTITION number can now be specified as an EEPROM property. This
might be used to boot maintenance software if a button connected to
a GPIO is pressed. The partition number specified via the reboot
command or autoboot.txt are a higher precedence than the EEPROM
property.
## 2022-01-25 - Promote pieeprom-2022-01-25 to the DEFAULT release
Interesting changes since the last default release
* Support and bug fixes for all Compute Module variants.
* NVMe interoperability fixes
* FAT/GPT fixes and file-system performance improvements.
* Add secure-boot support for industrial applications
See https://github.com/raspberrypi/usbboot/blob/master/secure-boot-recovery/README.md
* Added ramdisk / boot.img - for RPIBOOT and secure-boot.
## 2022-01-25 - Create new release from 2022-01-20 - LATEST/STABLE
* Rebuild 2022-01-20 for new stable release

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -4,4 +4,4 @@ set -e
script_dir=$(cd "$(dirname "$0")" && pwd)
${script_dir}/make-release critical 2021-04-29 000138a1 "${script_dir}" release rpi-boot-eeprom-recovery
${script_dir}/make-release critical 2022-04-26 000138a1 "${script_dir}" release rpi-boot-eeprom-recovery

View File

@@ -47,7 +47,10 @@ EOF
mount "${LOOP}" fs
cp -v files/* fs
sync
sleep 5
umount fs
# Delay before calling kpartx otherwise it's sometimes possible to get orphaned loopback devices
sleep 5
kpartx -dv temp.img
)
mkdir -p images
@@ -60,3 +63,4 @@ EOF
rm "images/${img}"
chown "${SUDO_UID}:${SUDO_GID}" "images/${src}"
done
echo "Wrote images for rpi-imager to $(pwd)/images/${src}"

View File

@@ -38,7 +38,7 @@ gen_release() {
"${script_dir}/../rpi-eeprom-config" \
--config "${config}" --out pieeprom.bin \
"${firmware_dir}/pieeprom-${pieeprom_version}.bin" || die "Failed to create updated EEPROM config with \"${config}\""
sha256sum pieeprom.bin | awk '{print $1}' > pieeprom.sig
${script_dir}/../rpi-eeprom-digest -i pieeprom.bin -o pieeprom.sig
echo "Creating ${out}"
zip "${out}" *
cleanup

View File

@@ -16,9 +16,6 @@ import time
IMAGE_SIZE = 512 * 1024
# Larger files won't with with "vcgencmd bootloader_config"
MAX_FILE_SIZE = 2024
ALIGN_SIZE = 4096
BOOTCONF_TXT = 'bootconf.txt'
BOOTCONF_SIG = 'bootconf.sig'
PUBKEY_BIN = 'pubkey.bin'
@@ -39,6 +36,11 @@ FILE_HDR_LEN = 20
FILENAME_LEN = 12
TEMP_DIR = None
# Modifiable files are stored in a single 4K erasable sector.
# The max content 4076 bytes because of the file header.
ERASE_ALIGN_SIZE = 4096
MAX_FILE_SIZE = ERASE_ALIGN_SIZE - FILE_HDR_LEN
DEBUG = False
def debug(s):
if DEBUG:
@@ -221,7 +223,7 @@ class ImageSection:
self.offset = offset
self.length = length
self.filename = filename
debug("ImageSection %x %x %x %s" % (magic, offset, length, filename))
debug("ImageSection %x offset %d length %d %s" % (magic, offset, length, filename))
class BootloaderImage(object):
def __init__(self, filename, output=None):
@@ -250,7 +252,6 @@ class BootloaderImage(object):
"""
offset = 0
magic = 0
found = False
while offset < IMAGE_SIZE:
magic, length = struct.unpack_from('>LL', self._bytes, offset)
if magic == 0x0 or magic == 0xffffffff:
@@ -262,6 +263,7 @@ class BootloaderImage(object):
if magic == FILE_MAGIC: # Found a file
# Discard trailing null characters used to pad filename
filename = self._bytes[offset + 8: offset + FILE_HDR_LEN].decode('utf-8').replace('\0', '')
debug("section at %d length %d magic %08x %s" % (offset, length, magic, filename))
self._sections.append(ImageSection(magic, offset, length, filename))
offset += 8 + length # length + type
@@ -272,26 +274,46 @@ class BootloaderImage(object):
Returns the offset, length and whether this is the last section in the
EEPROM for a modifiable file within the image.
"""
ret = (-1, -1, False)
offset = -1
length = -1
is_last = False
next_offset = IMAGE_SIZE - ERASE_ALIGN_SIZE # Don't create padding inside the bootloader scratch page
for i in range(0, len(self._sections)):
s = self._sections[i]
if s.magic == FILE_MAGIC and s.filename == filename:
is_last = (i == len(self._sections) - 1)
ret = (s.offset, s.length, is_last)
offset = s.offset
length = s.length
break
debug('%s offset %d length %d last %s' % (filename, ret[0], ret[1], ret[2]))
# Find the start of the next non padding section
i += 1
while i < len(self._sections):
if self._sections[i].magic == PAD_MAGIC:
i += 1
else:
next_offset = self._sections[i].offset
break
ret = (offset, length, is_last, next_offset)
debug('%s offset %d length %d is-last %d next %d' % (filename, ret[0], ret[1], ret[2], ret[3]))
return ret
def update(self, src_bytes, dst_filename):
"""
Replaces a modifiable file with specified byte array.
"""
hdr_offset, length, is_last = self.find_file(dst_filename)
hdr_offset, length, is_last, next_offset = self.find_file(dst_filename)
update_len = len(src_bytes) + FILE_HDR_LEN
if hdr_offset + update_len > IMAGE_SIZE - ERASE_ALIGN_SIZE:
raise Exception('No space available - image past EOF.')
if hdr_offset < 0:
raise Exception('Update target %s not found' % dst_filename)
if hdr_offset + len(src_bytes) + FILE_HDR_LEN > IMAGE_SIZE:
raise Exception('EEPROM image size exceeded')
if hdr_offset + update_len > next_offset:
raise Exception('Update %d bytes is larger than section size %d' % (update_len, next_offset - hdr_offset))
new_len = len(src_bytes) + FILENAME_LEN + 4
struct.pack_into('>L', self._bytes, hdr_offset + 4, new_len)
@@ -312,7 +334,7 @@ class BootloaderImage(object):
# by convention bootconf.txt is the last section and there's no need to
# pad to the end of the sector. This also ensures that the loopback
# config read/write tests produce identical binaries.
pad_bytes = ALIGN_SIZE - (pad_start % ALIGN_SIZE)
pad_bytes = next_offset - pad_start
if pad_bytes > 8 and not is_last:
pad_bytes -= 8
struct.pack_into('>i', self._bytes, pad_start, PAD_MAGIC)
@@ -358,10 +380,17 @@ class BootloaderImage(object):
sys.stdout.write(self._bytes)
def get_file(self, filename):
hdr_offset, length, is_last = self.find_file(filename)
hdr_offset, length, is_last, next_offset = self.find_file(filename)
offset = hdr_offset + 4 + FILE_HDR_LEN
config_bytes = self._bytes[offset:offset+length-FILENAME_LEN-4]
return config_bytes
file_bytes = self._bytes[offset:offset+length-FILENAME_LEN-4]
return file_bytes
def extract_files(self):
for i in range(0, len(self._sections)):
s = self._sections[i]
if s.magic == FILE_MAGIC:
file_bytes = self.get_file(s.filename)
open(s.filename, 'wb').write(file_bytes)
def read(self):
config_bytes = self.get_file('bootconf.txt')
@@ -457,6 +486,7 @@ See 'rpi-eeprom-update -h' for more information about the available EEPROM image
parser.add_argument('-o', '--out', help='Name of output file', required=False)
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('eeprom', nargs='?', help='Name of EEPROM file to use as input')
args = parser.parse_args()
@@ -468,6 +498,9 @@ See 'rpi-eeprom-update -h' for more information about the available EEPROM image
if args.edit:
edit_config(args.eeprom)
elif args.eeprom is not None and args.extract:
image = BootloaderImage(args.eeprom, args.out)
image.extract_files()
elif args.apply is not None:
if not os.path.exists(args.apply):
exit_error("config file '%s' not found" % args.apply)

View File

@@ -16,7 +16,7 @@ die() {
TMP_DIR=""
cleanup() {
if [ -f "${TMP_DIR}" ]; then
if [ -d "${TMP_DIR}" ]; then
rm -rf "${TMP_DIR}"
fi
}
@@ -26,15 +26,15 @@ checkDependencies() {
die "sha256sum not found. Try installing the coreutilities package."
fi
if [ -n "${KEY}" ]; then
if ! command -v ${OPENSSL} > /dev/null; then
die "${OPENSSL} not found. Try installing the openssl package."
fi
if [ -n "${KEY}" ] || [ "${VERIFY}" = 1 ]; then
if ! command -v openssl > /dev/null; then
die "openssl not found. Try installing the openssl package."
fi
if ! command -v xxd > /dev/null; then
die "xxd not found. Try installing the xxd package."
fi
fi
if ! command -v xxd > /dev/null; then
die "xxd not found. Try installing the xxd package."
fi
fi
}
usage() {
@@ -59,18 +59,49 @@ The bootloader only verifies RSA signatures in signed boot mode
Examples:
# Generate RSA signature for the EEPROM config file.
rpi-eeprom-digest -k key.pem -i bootconf.txt -o bootconf.sig
rpi-eeprom-digest -k private.pem -i bootconf.txt -o bootconf.sig
# Generate the normal sha256 hash to guard against file-system corruption
rpi-eeprom-digest -i pieeprom.bin -o pieeprom.sig
rpi-eeprom-digest -i vl805.bin -o vl805.sig
# To verify the signature of an existing .sig file using the public key.
# N.B The key file must be the PUBLIC key in PEM format.
rpi-eeprom-digest -k public.pem -i pieeprom.bin -v pieeprom.sig
EOF
exit 0
}
writeSig() {
TMP_DIR=$(mktemp -d)
SIG_TMP="${TMP_DIR}/tmp.sig"
sha256sum "${IMAGE}" | awk '{print $1}' > "${OUTPUT}"
# Include the update-timestamp
echo "ts: $(date -u +%s)" >> "${OUTPUT}"
if [ -n "${KEY}" ]; then
[ -f "${KEY}" ] || die "RSA private \"${KEY}\" not found"
"${OPENSSL}" dgst -sign "${KEY}" -keyform PEM -sha256 -out "${SIG_TMP}" "${IMAGE}"
echo "rsa2048: $(xxd -c 4096 -p < "${SIG_TMP}")" >> "${OUTPUT}"
fi
}
verifySig() {
TMP_DIR=$(mktemp -d)
sig_file="${1}"
[ -f "${sig_file}" ] || die "Signature file ${sig_file} not found"
sig_hex="$(grep rsa2048 "${sig_file}" | cut -f 2 -d ' ')"
[ -n "${sig_hex}" ] || die "No RSA signature in ${sig_file}"
echo ${sig_hex} | xxd -c 4096 -p -r > "${TMP_DIR}/sig.bin"
"${OPENSSL}" dgst -verify "${KEY}" -signature "${TMP_DIR}/sig.bin" "${IMAGE}" || die "${IMAGE} not verified"
}
OUTPUT=""
while getopts i:k:ho: option; do
VERIFY=0
while getopts i:k:ho:v: option; do
case "${option}" in
i) IMAGE="${OPTARG}"
;;
@@ -78,6 +109,9 @@ while getopts i:k:ho: option; do
;;
o) OUTPUT="${OPTARG}"
;;
v) SIGNATURE="${OPTARG}"
VERIFY=1
;;
h) usage
;;
*) echo "Unknown argument \"${option}\""
@@ -86,25 +120,15 @@ while getopts i:k:ho: option; do
esac
done
[ -n "${IMAGE}" ] || usage
[ -n "${OUTPUT}" ] || usage
trap cleanup EXIT
checkDependencies
[ -n "${IMAGE}" ] || usage
[ -f "${IMAGE}" ] || die "Source image \"${IMAGE}\" not found"
TMP_DIR=$(mktemp -d)
SIG_TMP="${TMP_DIR}/tmp.sig"
sha256sum "${IMAGE}" | awk '{print $1}' > "${OUTPUT}"
# Include the update-timestamp
echo "ts: $(date -u +%s)" >> "${OUTPUT}"
if [ -n "${KEY}" ]; then
[ -f "${KEY}" ] || die "RSA private \"${KEY}\" not found"
"${OPENSSL}" dgst -sign "${KEY}" -keyform PEM -sha256 -out "${SIG_TMP}" "${IMAGE}"
echo "rsa2048: $(xxd -c 4096 -p < "${SIG_TMP}")" >> "${OUTPUT}"
if [ "${VERIFY}" = 1 ]; then
verifySig "${SIGNATURE}"
else
[ -n "${OUTPUT}" ] || usage
writeSig
fi

View File

@@ -33,6 +33,17 @@ BOOTFS=${BOOTFS:-/boot}
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
# does not support network or USB MSD loading of recovery.bin self-update has to
# be used with other boot modes anyway.
# If RPI_EEPROM_SELF_UPDATE=1 then avoid installing recovery.bin so long as the
# current bootloader version supports self-update from SD/MMC and that doesn't
# look as though SELF_UPDATE has been disable in the EEPROM config or config.txt.
RPI_EEPROM_SELF_UPDATE="${RPI_EEPROM_SELF_UPDATE:-0}"
RPI_EEPROM_SELF_UPDATE_MIN_VER=1650968668
# Automatic, critical updates are not applied unless the current bootloader version
# is older than pieeprom-2020-09-03
BOOTLOADER_AUTO_UPDATE_MIN_VERSION="${BOOTLOADER_AUTO_UPDATE_MIN_VERSION:-1599135103}"
@@ -215,8 +226,28 @@ applyRecoveryUpdate()
|| die "Failed to set permissions on eeprom update files"
fi
cp -f "${RECOVERY_BIN}" "${BOOTFS}/recovery.bin" \
|| die "Failed to copy ${RECOVERY_BIN} to ${BOOTFS}"
if getBootloaderConfig | grep -q ENABLE_SELF_UPDATE=0; then
# Self update has been disabled in the EEPROM config so recovery.bin
# must be used to clear this.
RPI_EEPROM_SELF_UPDATE=0
fi
# Setting bootlaoder_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"
if [ -f "${config_txt}" ]; then
if grep -q "bootloader_update=0" "${config_txt}"; then
RPI_EEPROM_SELF_UPDATE=0
fi
fi
[ "${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"
cp -f "${RECOVERY_BIN}" "${BOOTFS}/recovery.bin" || die "Failed to copy ${RECOVERY_BIN} to ${BOOTFS}"
fi
echo ""
echo "EEPROM updates pending. Please reboot to apply the update."
@@ -308,7 +339,10 @@ checkDependencies() {
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. Run with -h for more information."
echo "rpi-eeprom-update is not enabled by default on CM4."
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."
exit ${EXIT_SUCCESS}
fi

View File

@@ -1,28 +0,0 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
[none]
userdata0=0x12345789
userdata1=0x12345789
userdata2=0x12345789
userdata3=0x12345789
userdata4=0x12345789
userdata5=0x12345789
userdata6=0x12345789
userdata7=0x12345789
userdata8=0x12345789
userdata9=0x12345789
usercert=ZZZZZZZZZZZZlhEAAAADAQABAAABAQDg2l41l7troIKOA0hk3p9y4KuITWBL/aaTMORoqmXfyqEONNULSMElaLWch/b8ScHmcS+kxkS5DtLmKFo1JI14IaQNL5fr4C6Dp23CyMGIgjp3ZFg9tXs/qWpw36Ge0MCxjabbFeKVcMXD10voMT0AHfJtQb2YfOl37ffzC4bR3phUnp0Ceqpl0Loe6hxUP/r4Jen1OKskdfjsldfjalAjn9ASdkjnkjbaAKjnLKJbaKJHDRDkllDAlciaIKSPX2b0uk2MJRJhfarMHDnmxZtEzqMgwLdLol9XVjiSu/7EUzR9Qtvs8xhf6XuUJPRD6OtJCb49L+bb/pXAej/GOk0f
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# ++++++++++++++++++++++++++++++++++++++++++++++++

View File

@@ -1,28 +0,0 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
[none]
userdata0=0x12345789
userdata1=0x12345789
userdata2=0x12345789
userdata3=0x12345789
userdata4=0x12345789
userdata5=0x12345789
userdata6=0x12345789
userdata7=0x12345789
userdata8=0x12345789
userdata9=0x12345789
usercert=ZZZZZZZZZZZZlhEAAAADAQABAAABAQDg2l41l7troIKOA0hk3p9y4KuITWBL/aaTMORoqmXfyqEONNULSMElaLWch/b8ScHmcS+kxkS5DtLmKFo1JI14IaQNL5fr4C6Dp23CyMGIgjp3ZFg9tXs/qWpw36Ge0MCxjabbFeKVcMXD10voMT0AHfJtQb2YfOl37ffzC4bR3phUnp0Ceqpl0Loe6hxUP/r4Jen1OKskdfjsldfjalAjn9ASdkjnkjbaAKjnLKJbaKJHDRDkllDAlciaIKSPX2b0uk2MJRJhfarMHDnmxZtEzqMgwLdLol9XVjiSu/7EUzR9Qtvs8xhf6XuUJPRD6OtJCb49L+bb/pXAej/GOk0f
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# ++++++++++++++++++++++++++++++++++++++++++++++++!

46
test/bootconf-4076.txt Normal file
View File

@@ -0,0 +1,46 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
[none]
userdata0=0x12345789
userdata1=0x12345789
userdata2=0x12345789
userdata3=0x12345789
userdata4=0x12345789
userdata5=0x12345789
userdata6=0x12345789
userdata7=0x12345789
userdata8=0x12345789
userdata9=0x12345789
usercert=ZZZZZZZZZZZZlhEAAAADAQABAAABAQDg2l41l7troIKOA0hk3p9y4KuITWBL/aaTMORoqmXfyqEONNULSMElaLWch/b8ScHmcS+kxkS5DtLmKFo1JI14IaQNL5fr4C6Dp23CyMGIgjp3ZFg9tXs/qWpw36Ge0MCxjabbFeKVcMXD10voMT0AHfJtQb2YfOl37ffzC4bR3phUnp0Ceqpl0Loe6hxUP/r4Jen1OKskdfjsldfjalAjn9ASdkjnkjbaAKjnLKJbaKJHDRDkllDAlciaIKSPX2b0uk2MJRJhfarMHDnmxZtEzqMgwLdLol9XVjiSu/7EUzR9Qtvs8xhf6XuUJPRD6OtJCb49L+bb/pXAej/GOk0f
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

46
test/bootconf-4077.txt Normal file
View File

@@ -0,0 +1,46 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
[none]
userdata0=0x12345789
userdata1=0x12345789
userdata2=0x12345789
userdata3=0x12345789
userdata4=0x12345789
userdata5=0x12345789
userdata6=0x12345789
userdata7=0x12345789
userdata8=0x12345789
userdata9=0x12345789
usercert=ZZZZZZZZZZZZlhEAAAADAQABAAABAQDg2l41l7troIKOA0hk3p9y4KuITWBL/aaTMORoqmXfyqEONNULSMElaLWch/b8ScHmcS+kxkS5DtLmKFo1JI14IaQNL5fr4C6Dp23CyMGIgjp3ZFg9tXs/qWpw36Ge0MCxjabbFeKVcMXD10voMT0AHfJtQb2YfOl37ffzC4bR3phUnp0Ceqpl0Loe6hxUP/r4Jen1OKskdfjsldfjalAjn9ASdkjnkjbaAKjnLKJbaKJHDRDkllDAlciaIKSPX2b0uk2MJRJhfarMHDnmxZtEzqMgwLdLol9XVjiSu/7EUzR9Qtvs8xhf6XuUJPRD6OtJCb49L+bb/pXAej/GOk0f
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

View File

@@ -0,0 +1,5 @@
[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0

Some files were not shown because too many files have changed in this diff Show More