Some unordered thoughts about boot on Android-based devices

Common boot/recovery build

We are building both boot.img and recovery.img deliberately as being the same configuration, except for one forcing the generation selection menu to be shown.

This allows us to have better homogeneity for the build process as "Boot as recovery" devices would need to be handled otherwise.

This means that the only difference between a boot.img and recovery.img for those older devices is a configuration line in /etc/boot/config that states the image is built as recovery. Everything else is the same exact build.

"Boot as recovery" devices, instead, rely solely on the lack of skip_initramfs in the kernel command-line to switch between the two boot flows.

Recovery as pseudo-A/B

For devices that are not "Boot as recovery", this setup has the added benefit that the recovery partition is always a fully functional stage-1 able to boot in the system.

Tinkering on-device is, thus, less scary as one can flash a boot.img knowing that they can reboot to recovery if it fails to do a proper full boot.

It is recommended to flash boot.img first, validate it works, and then to flash recovery.img if you are not in a situation where you can trivially recovery a broken boot.