Place u-boot in the boot MMC area
Feature: https://source.puri.sm/Librem5/use-cases/issues/60
u-boot is a device-specific piece of code, and OS should be generic across different devices. To allow the OS to get flashed seamlessly without taking care of what happens on the boot loader side, they should occupy separate areas. Unfortunately, the OS likes to control the partition table of the whole device it resides on, so it conflicts with the boot loader if that boot loader lives in the general usage space. This can be solved by moving the non-OS pieces to the boot area of the eMMC device, and u-boot is the most important of them.
The pieces affected should be:
- u-boot, to be able to run from the boot area (done)
- either u-boot builder, or image builder, to create a flashable boot area image
- image builder, to create a flashable OS image (without things in boot area)
- update arm01 Jenkins pipelines to expose the two images
- update flashing scripts to download two images and flash them separately
When u-boot is moved away from the main area, it will be possible to use GPT, as the SoC's load address otherwise conflicts with the partition table.
Additional consequences:
- when updating u-boot using the OS, some way to get the boot area read-write needs to be found
- boot data must be kept closely updated with the kernel, or very stable, in order to avoid non-booting kernels