Skip to content

Commit

Permalink
bootstd: Add a bootmeth for Android
Browse files Browse the repository at this point in the history
Android boot flow is a bit different than a regular Linux distro.
Android relies on multiple partitions in order to boot.

A typical boot flow would be:
1. Parse the Bootloader Control Block (BCB, misc partition)
2. If BCB requested bootonce-bootloader, start fastboot and wait.
3. If BCB requested recovery or normal android, run the following:
3.a. Get slot (A/B) from BCB
3.b. Run AVB (Android Verified Boot) on boot partitions
3.c. Load boot and vendor_boot partitions
3.d. Load device-tree, ramdisk and boot

The AOSP documentation has more details at [1], [2], [3]

This has been implemented via complex boot scripts such as [4].
However, these boot script are neither very maintainable nor generic.
Moreover, DISTRO_DEFAULTS is being deprecated [5].

Add a generic Android bootflow implementation for bootstd.
For this initial version, only boot image v4 is supported.

[1] https://source.android.com/docs/core/architecture/bootloader
[2] https://source.android.com/docs/core/architecture/partitions
[3] https://source.android.com/docs/core/architecture/partitions/generic-boot
[4] https://source.denx.de/u-boot/u-boot/-/blob/master/include/configs/meson64_android.h
[5] https://lore.kernel.org/r/all/[email protected]/

Reviewed-by: Simon Glass <[email protected]>
Reviewed-by: Julien Masson <[email protected]>
Tested-by: Guillaume La Roque <[email protected]>
Signed-off-by: Mattijs Korpershoek <[email protected]>
  • Loading branch information
makohoek authored and trini committed Jul 18, 2024
1 parent a525656 commit 125d9f3
Show file tree
Hide file tree
Showing 6 changed files with 614 additions and 0 deletions.
7 changes: 7 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -939,6 +939,13 @@ F: include/bootstd.h
F: net/eth_bootdevice.c
F: test/boot/

BOOTMETH_ANDROID
M: Mattijs Korpershoek <[email protected]>
S: Maintained
T: git https://source.denx.de/u-boot/custodians/u-boot-dfu.git
F: boot/bootmeth_android.c
F: boot/bootmeth_android.h

BTRFS
M: Marek Behún <[email protected]>
R: Qu Wenruo <[email protected]>
Expand Down
17 changes: 17 additions & 0 deletions boot/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,23 @@ config BOOTMETH_GLOBAL
EFI bootmgr, since they take full control over which bootdevs are
selected to boot.

config BOOTMETH_ANDROID
bool "Bootdev support for Android"
depends on X86 || ARM || SANDBOX
depends on CMDLINE
select ANDROID_AB
select ANDROID_BOOT_IMAGE
select CMD_BCB
select CMD_FASTBOOT
select PARTITION_TYPE_GUID
select PARTITION_UUIDS
help
Enables support for booting Android using bootstd. Android requires
multiple partitions (misc, boot, vbmeta, ...) in storage for booting.

Note that only MMC bootdevs are supported at present. This is caused
by AVB being limited to MMC devices only.

config BOOTMETH_CROS
bool "Bootdev support for Chromium OS"
depends on X86 || ARM || SANDBOX
Expand Down
2 changes: 2 additions & 0 deletions boot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,5 @@ obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_VBE_REQUEST) += vbe_request.o
obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_VBE_SIMPLE) += vbe_simple.o
obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_VBE_SIMPLE_FW) += vbe_simple_fw.o
obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_VBE_SIMPLE_OS) += vbe_simple_os.o

obj-$(CONFIG_$(SPL_TPL_)BOOTMETH_ANDROID) += bootmeth_android.o
Loading

0 comments on commit 125d9f3

Please sign in to comment.