summaryrefslogtreecommitdiff
path: root/boot/bootmeth_android.h
diff options
context:
space:
mode:
authorMattijs Korpershoek <[email protected]>2024-07-10 10:40:05 +0200
committerTom Rini <[email protected]>2024-07-18 13:51:30 -0600
commit125d9f3306ea4bc8888dc991ae3aa87327b0d522 (patch)
tree1070bcb520507e4c549a68cbb81e0018fecdaa8d /boot/bootmeth_android.h
parenta525656c5ba69d307864c4de14e911384cc7dc0c (diff)
bootstd: Add a bootmeth for Android
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]>
Diffstat (limited to 'boot/bootmeth_android.h')
-rw-r--r--boot/bootmeth_android.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/boot/bootmeth_android.h b/boot/bootmeth_android.h
new file mode 100644
index 00000000000..a57fad9f011
--- /dev/null
+++ b/boot/bootmeth_android.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Bootmethod for Android
+ *
+ * Copyright (C) 2024 BayLibre, SAS
+ * Written by Mattijs Korpershoek <[email protected]>
+ */
+
+enum android_boot_mode {
+ ANDROID_BOOT_MODE_NORMAL = 0,
+
+ /*
+ * Android "recovery" is a special boot mode that uses another ramdisk.
+ * It can be used to "factory reset" a board or to flash logical partitions
+ * It operates in 2 modes: adb or fastbootd
+ * To enter recovery from Android, we can do:
+ * $ adb reboot recovery
+ * $ adb reboot fastboot
+ */
+ ANDROID_BOOT_MODE_RECOVERY,
+
+ /*
+ * Android "bootloader" is for accessing/reflashing physical partitions
+ * Typically, this will launch a fastboot process in U-Boot.
+ * To enter "bootloader" from Android, we can do:
+ * $ adb reboot bootloader
+ */
+ ANDROID_BOOT_MODE_BOOTLOADER,
+};