U-Boot is seeing increasing adoption on pocket computers, many of which (sadly) have fused bootloader chains. Many of these bootloaders have a very rigid definition of what a "valid" downstream payload looks like. Sometimes it's just a boring old v0/v2 Android boot image. Sometimes it's something decidedly more grotesque.
To date, this last-mile packaging step has been trapped in downstream CI pipelines, blogposts, documentation, etc. This patch series aims to gather up all that esoterica and institutional knowledge and codify it in U-Boot's build system, using binman. Put differently: an overwhelming majority of these pocket computer devices have a "canonical" payload format that U-Boot currently has no support for. Let's fix that. The first patches in this series introduce an `android_boot` etype. To begin with, this is a "typical" abootimg, as defined by canonical AOSP sources and reference `fastboot`/`mkbootimg` implementation. There's plenty of devices out there with a sane(-ish, nothing in Android-land is ever truly sane) bootloader that will happily chain a U-Boot rolled into the kernel section of an abootimg. With that out of the way, the cursed bootloaders are next to be supported. Binman etypes for Qualcomm's "QCDT" and Samsung's "DTBH" formats are implemented. These are non-standard vendor-specific devicetree containers, which the previous bootloader uses to pick a FDT to boot the downstream with. In both cases, these vendor-specific formats are tacked on to the end of a v0 abootimg, with the header_version being hijacked to encode the length of this following payload. Thus, the android_boot etype is retrofitted to allow these shenanigans. Binman configs that produce flashable boot artifacts are introduced for the following devices: * google-sargo (vanilla v2) * oneplus-fajita (vanilla v2) * samsung-a5u-eur (QCDT v0) * samsung-gt510 (QCDT v0) * samsung-j7xelte (DTBH v0) I also successfully tested a vanilla v0 on my samsung-expressltexx, in conjunction with the qcom-armv7 series already on the list. However, since that work is still in-flight and the expressltexx DTS is downstream, I opted not to include it here. Note that, I dropped the commits that introduce this support for Qualcomm devices, as it was NAK'd by "Qualcomm". I still think this is worth inclusion upstream for a couple of reasons: * It's still useful for Exynos devices. * If/when other non-qcom devices with fused Android bootloaders come along, it will likely be useful there as well. * Downstreams can easily carry DTSI overlays for qcom devices to take advantage of this new native U-Boot support there. * Maybe the hard position against binman will change/soften on the Qualcomm side, in which case we can simply start dropping in DTSIs to add support for those devices. Signed-off-by: Sam Day <[email protected]> --- Changes in v2: - Rebase on next - Drop all qcom-related work as it has been NAK'd from mach-snapdragon - Link to v1: https://lore.kernel.org/r/[email protected] --- Sam Day (8): binman: Android boot image support .gitignore: ignore binman-generated blobs binman: android_boot: vendor-dt support binman: Add QCDT support binman: android_boot: SEANDROIDENFORCE support binman: Add DTBH support arch: arm: exynos: add j7xelte binman config configs: exynos-mobile: pull in BINMAN .gitignore | 1 + arch/arm/dts/exynos-mobile.dtsi | 5 + arch/arm/dts/exynos7870-j7xelte-u-boot.dtsi | 24 ++ arch/arm/mach-exynos/Kconfig | 1 + configs/exynos-mobile_defconfig | 1 + tools/binman/etype/android_boot.py | 407 +++++++++++++++++++++ tools/binman/etype/dtbh.py | 173 +++++++++ tools/binman/etype/qcdt.py | 160 ++++++++ tools/binman/ftest.py | 127 +++++++ .../test/vendor/android_boot_seandroidenforce.dts | 22 ++ tools/binman/test/vendor/android_boot_v0.dts | 29 ++ tools/binman/test/vendor/android_boot_v2.dts | 46 +++ .../binman/test/vendor/android_boot_vendor_dt.dts | 27 ++ tools/binman/test/vendor/dtbh.dts | 29 ++ tools/binman/test/vendor/dtbh_bad_model_info.dts | 19 + tools/binman/test/vendor/qcdt.dts | 20 + tools/binman/test/vendor/qcdt_bad_msm_id.dts | 17 + 17 files changed, 1108 insertions(+) --- base-commit: 9e87893c24d1f21350e69bc222e6a3214c933b3b change-id: 20260604-android-binman-ad7a43f4e99d Best regards, -- Sam Day <[email protected]>

