Message ID | 20240613-bootmeth-android-v2-0-397f6e66eb29@baylibre.com |
---|---|
Headers | show |
Series | bootstd: Add Android support | expand |
Hi, i apply patch series with commit you give in cover letter and test on TI AM62S-SK board. Android boot properly , just with a small changes in uboot eenv setenv vendor_boot_comp_addr_r 0xd0000000 this changes is need link to patch done by roman on ramdisk and vendor boot loading. so you can add for this series: Tested-by: Guillaume La Roque <glaroque@baylibre.com> Guillaume Le 13/06/2024 à 12:13, Mattijs Korpershoek a écrit : > 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 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 | 16 ++ > 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 | 65 +++++- > test/py/tests/test_ut.py | 76 +++++++ > 16 files changed, 811 insertions(+), 5 deletions(-) > --- > base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be > change-id: 20240605-bootmeth-android-bfc8596e9367 > > Best regards,
Hi Guillaume, Thank you for testing. On ven., juin 14, 2024 at 11:53, Guillaume LA ROQUE <glaroque@baylibre.com> wrote: > Hi, > > i apply patch series with commit you give in cover letter and test on > TI AM62S-SK board. > Android boot properly , just with a small changes in uboot eenv > > setenv vendor_boot_comp_addr_r 0xd0000000 I see. Thank you for sharing this. I can confirm that this is indeed needed on next since da3447d09fa0 ("android: Fix ramdisk loading for bootimage v3+"). Will take that into account when sending board support using bootmeth_android > > this changes is need link to patch done by roman on ramdisk and vendor > boot loading. > > so you can add for this series: > > Tested-by: Guillaume La Roque <glaroque@baylibre.com> > > [...]
Hi Mattijs, On Thu, 13 Jun 2024 at 04:13, Mattijs Korpershoek <mkorpershoek@baylibre.com> wrote: > > 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 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 | 16 ++ > 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 | 65 +++++- > test/py/tests/test_ut.py | 76 +++++++ > 16 files changed, 811 insertions(+), 5 deletions(-) > --- > base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be > change-id: 20240605-bootmeth-android-bfc8596e9367 > > Best regards, > -- > Mattijs Korpershoek <mkorpershoek@baylibre.com> > Thinking about this, I believe we should start having docs about the individual bootmeths themselves. Can you add a section about your new bootmeth? I will come up with a patch for the others that I know about. Perhaps doc/develop/bootstd.rst would be a suitable place for now? Regards, Simon
Hi Simon, On lun., juin 17, 2024 at 07:53, Simon Glass <sjg@chromium.org> wrote: > Hi Mattijs, > > On Thu, 13 Jun 2024 at 04:13, Mattijs Korpershoek > <mkorpershoek@baylibre.com> wrote: >> >> 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 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 | 16 ++ >> 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 | 65 +++++- >> test/py/tests/test_ut.py | 76 +++++++ >> 16 files changed, 811 insertions(+), 5 deletions(-) >> --- >> base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be >> change-id: 20240605-bootmeth-android-bfc8596e9367 >> >> Best regards, >> -- >> Mattijs Korpershoek <mkorpershoek@baylibre.com> >> > > Thinking about this, I believe we should start having docs about the > individual bootmeths themselves. Yes. > > Can you add a section about your new bootmeth? I will come up with a > patch for the others that I know about. Perhaps > doc/develop/bootstd.rst would be a suitable place for now? Yes I can add a section. I would have preferred to have an example to work from there, but I can start writing docs as well. I'm leaving on vacation soon (without computer), so I'll be able to send a v3 with docs included in at earliest a 2-3 weeks from now. If you make a patch for the other bootmeths in the mean-time, please cc me so that I can help review and have an example for Android. Thanks! Mattijs > > Regards, > Simon
Hi Mattijs, On Mon, 17 Jun 2024 at 09:15, Mattijs Korpershoek <mkorpershoek@baylibre.com> wrote: > > Hi Simon, > > On lun., juin 17, 2024 at 07:53, Simon Glass <sjg@chromium.org> wrote: > > > Hi Mattijs, > > > > On Thu, 13 Jun 2024 at 04:13, Mattijs Korpershoek > > <mkorpershoek@baylibre.com> wrote: > >> > >> 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 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 | 16 ++ > >> 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 | 65 +++++- > >> test/py/tests/test_ut.py | 76 +++++++ > >> 16 files changed, 811 insertions(+), 5 deletions(-) > >> --- > >> base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be > >> change-id: 20240605-bootmeth-android-bfc8596e9367 > >> > >> Best regards, > >> -- > >> Mattijs Korpershoek <mkorpershoek@baylibre.com> > >> > > > > Thinking about this, I believe we should start having docs about the > > individual bootmeths themselves. > > Yes. > > > > > Can you add a section about your new bootmeth? I will come up with a > > patch for the others that I know about. Perhaps > > doc/develop/bootstd.rst would be a suitable place for now? > > Yes I can add a section. I would have preferred to have an example to > work from there, but I can start writing docs as well. > > I'm leaving on vacation soon (without computer), so I'll be able to > send a v3 with docs included in at earliest a 2-3 weeks from now. It isn't a blocker for this series, just something I thought of. > > If you make a patch for the other bootmeths in the mean-time, please cc > me so that I can help review and have an example for Android. Yes, will do, if I do. Regards, Simon
Hi Simon. On mar., juin 18, 2024 at 21:03, Simon Glass <sjg@chromium.org> wrote: > Hi Mattijs, > > On Mon, 17 Jun 2024 at 09:15, Mattijs Korpershoek > <mkorpershoek@baylibre.com> wrote: >> >> Hi Simon, >> >> On lun., juin 17, 2024 at 07:53, Simon Glass <sjg@chromium.org> wrote: >> >> > Hi Mattijs, >> > >> > On Thu, 13 Jun 2024 at 04:13, Mattijs Korpershoek >> > <mkorpershoek@baylibre.com> wrote: >> >> >> >> 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 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 | 16 ++ >> >> 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 | 65 +++++- >> >> test/py/tests/test_ut.py | 76 +++++++ >> >> 16 files changed, 811 insertions(+), 5 deletions(-) >> >> --- >> >> base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be >> >> change-id: 20240605-bootmeth-android-bfc8596e9367 >> >> >> >> Best regards, >> >> -- >> >> Mattijs Korpershoek <mkorpershoek@baylibre.com> >> >> >> > >> > Thinking about this, I believe we should start having docs about the >> > individual bootmeths themselves. >> >> Yes. >> >> > >> > Can you add a section about your new bootmeth? I will come up with a >> > patch for the others that I know about. Perhaps >> > doc/develop/bootstd.rst would be a suitable place for now? >> >> Yes I can add a section. I would have preferred to have an example to >> work from there, but I can start writing docs as well. >> >> I'm leaving on vacation soon (without computer), so I'll be able to >> send a v3 with docs included in at earliest a 2-3 weeks from now. > > It isn't a blocker for this series, just something I thought of. Understood. In that case if there are no other remarks on this series, I'd prefer to submit a separate documentation patch once this is applied! > >> >> If you make a patch for the other bootmeths in the mean-time, please cc >> me so that I can help review and have an example for Android. > > Yes, will do, if I do. > > Regards, > Simon
On Thu, Jun 13, 2024 at 12:13:07PM +0200, Mattijs Korpershoek wrote: > 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 This leads to failures in CI such as: =================================== FAILURES =================================== ___________________________ test_ut_dm_init_bootstd ____________________________ test/py/tests/test_ut.py:555: in test_ut_dm_init_bootstd setup_android_image(u_boot_console) test/py/tests/test_ut.py:488: in setup_android_image with open(boot_img, 'rb') as inf: E FileNotFoundError: [Errno 2] No such file or directory: '/tmp/malta64el/bootv4.img' ----------------------------- Captured stdout call -----------------------------
Hi Tom, On jeu., juin 20, 2024 at 08:23, Tom Rini <trini@konsulko.com> wrote: > On Thu, Jun 13, 2024 at 12:13:07PM +0200, Mattijs Korpershoek wrote: > >> 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 > > This leads to failures in CI such as: > =================================== FAILURES =================================== > ___________________________ test_ut_dm_init_bootstd ____________________________ > test/py/tests/test_ut.py:555: in test_ut_dm_init_bootstd > setup_android_image(u_boot_console) > test/py/tests/test_ut.py:488: in setup_android_image > with open(boot_img, 'rb') as inf: > E FileNotFoundError: [Errno 2] No such file or directory: '/tmp/malta64el/bootv4.img' > ----------------------------- Captured stdout call ----------------------------- Thank you for reporting, and sorry about the CI failure. I think I need to somehow declare a dependency on the bootv4.img file. I will send a v3 to fix this. > > -- > Tom
On mar., juin 18, 2024 at 21:03, Simon Glass <sjg@chromium.org> wrote: > Hi Mattijs, > > On Mon, 17 Jun 2024 at 09:15, Mattijs Korpershoek > <mkorpershoek@baylibre.com> wrote: >> >> Hi Simon, >> >> On lun., juin 17, 2024 at 07:53, Simon Glass <sjg@chromium.org> wrote: >> >> > Hi Mattijs, >> > >> > On Thu, 13 Jun 2024 at 04:13, Mattijs Korpershoek >> > <mkorpershoek@baylibre.com> wrote: >> >> >> >> 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 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 | 16 ++ >> >> 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 | 65 +++++- >> >> test/py/tests/test_ut.py | 76 +++++++ >> >> 16 files changed, 811 insertions(+), 5 deletions(-) >> >> --- >> >> base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be >> >> change-id: 20240605-bootmeth-android-bfc8596e9367 >> >> >> >> Best regards, >> >> -- >> >> Mattijs Korpershoek <mkorpershoek@baylibre.com> >> >> >> > >> > Thinking about this, I believe we should start having docs about the >> > individual bootmeths themselves. >> >> Yes. >> >> > >> > Can you add a section about your new bootmeth? I will come up with a >> > patch for the others that I know about. Perhaps >> > doc/develop/bootstd.rst would be a suitable place for now? >> >> Yes I can add a section. I would have preferred to have an example to >> work from there, but I can start writing docs as well. >> >> I'm leaving on vacation soon (without computer), so I'll be able to >> send a v3 with docs included in at earliest a 2-3 weeks from now. > > It isn't a blocker for this series, just something I thought of. For future reference, the doc has been submitted here: https://lore.kernel.org/all/20240724-doc-bootstd-android-v1-1-03a55b7a7c92@baylibre.com/ > >> >> If you make a patch for the other bootmeths in the mean-time, please cc >> me so that I can help review and have an example for Android. > > Yes, will do, if I do. > > Regards, > Simon
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 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 | 16 ++ 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 | 65 +++++- test/py/tests/test_ut.py | 76 +++++++ 16 files changed, 811 insertions(+), 5 deletions(-) --- base-commit: f9886bc60f42d5bcfcfa4e474af7dc230400b6be change-id: 20240605-bootmeth-android-bfc8596e9367 Best regards,