All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mattijs Korpershoek <mkorpershoek@baylibre.com>
To: Simon Glass <sjg@chromium.org>
Cc: Julien Masson <jmasson@baylibre.com>,
	 Guillaume La Roque <glaroque@baylibre.com>,
	 Dmitrii Merkurev <dimorinny@google.com>,
	 Roman Stratiienko <r.stratiienko@gmail.com>,
	 Igor Opaniuk <igor.opaniuk@gmail.com>,
	u-boot@lists.denx.de,
	 Mattijs Korpershoek <mkorpershoek@baylibre.com>
Subject: [PATCH v3 0/5] bootstd: Add Android support
Date: Wed, 10 Jul 2024 10:40:01 +0200	[thread overview]
Message-ID: <20240710-bootmeth-android-v3-0-b99406e22da3@baylibre.com> (raw)

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:
   a. Get slot (A/B) from BCB
   b. Run AVB (Android Verified Boot) on boot partitions
   c. Load boot and vendor_boot partitions
   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.

This has been tested on sandbox using:
$ ./test/py/test.py --bd sandbox --build -k test_ut

This has also been tested on the AM62X SK EVM using TI's Android SDK[6]
To test on TI board, the following (WIP) patch is needed as well:
https://gitlab.baylibre.com/baylibre/ti/ti-u-boot/-/commit/84cceb912bccd7cdd7f9dd69bca0e5d987a1fd04

[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/20230914165615.1058529-17-sjg@chromium.org/
[6] https://software-dl.ti.com/processor-sdk-android/esd/AM62X/09_02_00/docs/android/Overview.html

Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
---
Changes in v3:
- Fixed CI issues (Tom):
  * Generate bootv4.img and vendor_boot.img in test_ut.py
  * Mark CONFIG_BOOTMETH_ANDROID dependent on CONFIG_CMDLINE
  * Make bootflow_android() test dependent on CONFIG_BOOTMETH_ANDROID
  Because of the above changes, I've removed the reviewers on patch 5/5
- Link to v2: https://lore.kernel.org/r/20240613-bootmeth-android-v2-0-397f6e66eb29@baylibre.com

Changes in v2:
- Dropped patch 2/6 boot: android: Add image_android_get_version() (Igor)
- Fixed multi-line comment style (Igor, Simon)
- Added dependency on CMD_FASTBOOT for BOOTMETH_ANDROID (Igor)
- Fixed various resource leaks (Igor)
- Fixed bootmeth_priv dangling pointer on error cases (Igor)
- Updated test instructions in commit message for patch 6/6
- Added __weak impl of get_avendor_bootimg_addr() in patch 1 (dropped
  Igor's review because of this change)
- Added extra info in Kconfig to detail MMC limitation (Simon)
- Fixed typo Bootmethod->Bootmeth (Simon)
- Documented android_priv structure (Simon)
- Demoted various messages from printf() to log_debug (Simon)
- Fixed some lines too long (Simon)
- Added function documentation to read_slotted_partition() (Simon)
- Added some doc about avb extra_args being modified (Simon)
- Link to v1: https://lore.kernel.org/r/20240606-bootmeth-android-v1-0-0c69d4457cc5@baylibre.com

---
Mattijs Korpershoek (5):
      boot: android: Provide vendor_bootimg_addr in boot_get_fdt()
      bootstd: Add bootflow_iter_check_mmc() helper
      android: boot: Add set_abootimg_addr() and set_avendor_bootimg_addr()
      bootstd: Add a bootmeth for Android
      bootstd: Add test for bootmeth_android

 MAINTAINERS               |   7 +
 arch/sandbox/dts/test.dts |   8 +
 boot/Kconfig              |  17 ++
 boot/Makefile             |   2 +
 boot/bootflow.c           |  12 +
 boot/bootmeth_android.c   | 553 ++++++++++++++++++++++++++++++++++++++++++++++
 boot/bootmeth_android.h   |  29 +++
 boot/image-android.c      |   5 +
 boot/image-fdt.c          |   2 +-
 cmd/abootimg.c            |  10 +
 configs/sandbox_defconfig |   2 +-
 doc/develop/bootstd.rst   |   6 +
 include/bootflow.h        |   9 +
 include/image.h           |  14 ++
 test/boot/bootflow.c      |  68 +++++-
 test/py/tests/test_ut.py  |  79 +++++++
 16 files changed, 818 insertions(+), 5 deletions(-)
---
base-commit: 475aa8345a78396d39b42f96eccecd37ebe24e99
change-id: 20240605-bootmeth-android-bfc8596e9367

Best regards,
-- 
Mattijs Korpershoek <mkorpershoek@baylibre.com>


             reply	other threads:[~2024-07-10  8:40 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-10  8:40 Mattijs Korpershoek [this message]
2024-07-10  8:40 ` [PATCH v3 1/5] boot: android: Provide vendor_bootimg_addr in boot_get_fdt() Mattijs Korpershoek
2024-07-10  8:40 ` [PATCH v3 2/5] bootstd: Add bootflow_iter_check_mmc() helper Mattijs Korpershoek
2024-07-13 15:13   ` Simon Glass
2024-07-10  8:40 ` [PATCH v3 3/5] android: boot: Add set_abootimg_addr() and set_avendor_bootimg_addr() Mattijs Korpershoek
2024-07-10  8:40 ` [PATCH v3 4/5] bootstd: Add a bootmeth for Android Mattijs Korpershoek
2024-07-10  8:40 ` [PATCH v3 5/5] bootstd: Add test for bootmeth_android Mattijs Korpershoek
2024-07-11 13:11   ` Julien Masson
2024-07-11 13:49   ` Guillaume LA ROQUE
2024-07-13 15:13   ` Simon Glass
2024-07-18 23:10 ` [PATCH v3 0/5] bootstd: Add Android support Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240710-bootmeth-android-v3-0-b99406e22da3@baylibre.com \
    --to=mkorpershoek@baylibre.com \
    --cc=dimorinny@google.com \
    --cc=glaroque@baylibre.com \
    --cc=igor.opaniuk@gmail.com \
    --cc=jmasson@baylibre.com \
    --cc=r.stratiienko@gmail.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.