[PATCH v4 0/8] Qualcomm: teach the build system to emit signed ELF images

Neil Armstrong neil.armstrong at linaro.org
Tue Jun 17 10:26:19 CEST 2025


On 16/06/2025 18:13, Casey Connolly wrote:
> Hi Tom,
> 
> So I've been testing this a bit harder (really should have noticed this sooner) and it turns out using binman makes things a whole lot more complicated...
> 
> Specifically, the new trogdor chromebook board doesn't need binman, the U-Boot ELF is used directly since they have their own bootloader beforehand.
> 
> But since CONFIG_BINMAN can't be enabled in a defconfig and only selected by some other Kconfig there isn't really a nice way to handle this. The trogdor board doesn't add any Kconfigs of it's own and doing something like
> 
> depends on BINMAN if !CONFIG_SYS_COREBOOT
> 
> would be a huge hack...

Can't you change to depends on BINMAN if CONFIG_BINMAN_DTB ?

> 
> This wouldn't be an issue in and of itself, but binman makes the build fail since of course the DT doesn't have a binman node and the trogdor defconfig doesn't define CONFIG_BINMAN_DTB (and shouldn't have to...).
> 
> Possibly the easiest solution would be to allow defconfigs to set CONFIG_BINMAN, or add some additional kconfig we can use to pull it in (CONFIG_QCOM_BUILD_MBN ?), maybe the latter is the most comprehensible solution.
> 
> I think I'll go with that unless anyone can chime in with some other suggestions.
> 
> Kind regards,
> 
> On 6/13/25 19:23, Casey Connolly wrote:
>> With several new Qualcomm platforms appearing on the mailing list, all
>> of which build U-Boot as an ELF, sign it, and then flash it to some
>> partition on the board, we're getting a lot of defconfigs which just
>> contain a debug UART and a TEXT_BASE address. This leads to needless
>> rebuilds in CI of effectively the same image, and needless duplication
>> of build instructions.
>>
>> To address this, let's introduce a new tool "mkmbn.py", this is based
>> on the existing qtestsign[1] tool but is (currently) hardcoded to
>> only handle the Dragonwing and IPQ boards which use MBN header v6.
>> Additionally, the tool contains a lookup table that maps from a boards
>> DT compatible property to the load address it needs. Since it's highly
>> unusual for different boards using the same SoC to have different load
>> addresses, generic platform matching is also done (e.g. "qcom,qcm6490").
>>
>> With this tool in place, we teach binman to use it and introduce
>> a qcom-binman.dts file to describe the image. The tool will emit a
>> u-boot.mbn file for supported platforms, for unsupported platforms the
>> u-boot MBN etype in binman will print a notice explaining that no mbn
>> file is built and to look at tools/qcom/mkmbn/mkmbn.py
>>
>> Finally, the defconfigs are cleaned up by moving the debug UART
>> definitions to config fragments (since it doesn't make sense to have
>> them enabled by default anyway) and remove CONFIG_REMAKE_ELF. Notably,
>> the qcs9100_defconfig is removed entirely since the same binary can
>> be created with just make arguments. This platform entirely lacked
>> documentation to begin with, which should be addressed by future
>> patches.
>>
>> The Qualcomm documentation is also cleaned up, a new "signing" page
>> is added to briefly cover the what and why of MBN signing, and board
>> specific pages are updated to explain the new build process.
>>
>> These patches have been tested on the RB3 Gen 2, but additional
>> testing for other platforms would be super useful.
>>
>> [1]: https://github.com/msm8916-mainline/qtestsign
>>
>> To: Tom Rini <trini at konsulko.com>
>> To: Neil Armstrong <neil.armstrong at linaro.org>
>> To: Sumit Garg <sumit.garg at kernel.org>
>> Cc: u-boot at lists.denx.de
>> Cc: u-boot-qcom at groups.io
>> Cc: Varadarajan Narayanan <quic_varada at quicinc.com>
>> Cc: Balaji Selvanathan <balaji.selvanathan at oss.qualcomm.com>
>> Cc: Aswin Murugan <aswin.murugan at oss.qualcomm.com>
>>
>> Signed-off-by: Casey Connolly <casey.connolly at linaro.org>
>> ---
>> Changes in v4:
>> - Rework how qtestsign code is imported to make it easier to sync with upstream in the future.
>> - Actually raise an exception when mkmbn fails in an unexpected way.
>> - Link to v3: https://lore.kernel.org/r/20250612-b4-qcom-tooling-improvements-v3-0-76f34cf216e2@linaro.org
>>
>> Changes in v3:
>> - Fixup Makefiles and add missing qcom-binman.dts
>> - Adjust wording to reflect changes to build process
>> - Link to v2: https://lore.kernel.org/r/20250602-b4-qcom-tooling-improvements-v2-0-c7d19c0d4a8b@linaro.org
>>
>> Changes in v2:
>> - Reworked to use binman with a plugin to build the u-boot.mbn file
>> - Added some fixes for binman to work with OF_UPSTREAM and with tools
>>    in the srctree toolpath rather than objtree for out of tree builds.
>> - Link to v1: https://lore.kernel.org/r/20250522-b4-qcom-tooling-improvements-v1-0-8141b8955cfb@linaro.org
>>
>> ---
>> Casey Connolly (8):
>>        binman: add $(srctree)/tools to toolpath
>>        binman: support building binman dtb when OF_UPSTREAM is enabled
>>        tools: qcom: introduce mkmbn library
>>        tools: qcom: add mkmbn.py
>>        binman: add support for building Qualcomm signed MBN ELF images
>>        configs: qualcomm: use fragments for debug UART
>>        qualcomm: use mkmbn via binman and stop creating ELF files
>>        doc: board/qualcomm: update docs for new u-boot.mbn target
>>
>>   Makefile                            |   5 +
>>   arch/arm/Kconfig                    |   1 +
>>   arch/arm/dts/qcom-binman.dts        |  16 ++
>>   board/qualcomm/debug-qcm6490.config |   5 +
>>   board/qualcomm/debug-qcs9100.config |   5 +
>>   configs/qcm6490_defconfig           |  10 --
>>   configs/qcom_defconfig              |   2 +
>>   configs/qcom_ipq9574_mmc_defconfig  |   1 -
>>   configs/qcs9100_defconfig           |  10 --
>>   doc/board/qualcomm/index.rst        |   1 +
>>   doc/board/qualcomm/rb3gen2.rst      |  27 ++--
>>   doc/board/qualcomm/rdp.rst          |   5 +-
>>   doc/board/qualcomm/signing.rst      |  29 ++++
>>   dts/Makefile                        |  19 ++-
>>   tools/binman/btool/mkmbn.py         |  29 ++++
>>   tools/binman/etype/u_boot_mbn.py    |  53 +++++++
>>   tools/mkmbn                         |   1 +
>>   tools/qcom/mkmbn/cert.py            | 127 ++++++++++++++++
>>   tools/qcom/mkmbn/elf.py             | 238 ++++++++++++++++++++++++++++++
>>   tools/qcom/mkmbn/hashseg.py         | 281 ++++++++++++++++++++++++++++++++++++
>>   tools/qcom/mkmbn/mkmbn.py           | 154 ++++++++++++++++++++
>>   21 files changed, 981 insertions(+), 38 deletions(-)
>> ---
>> base-commit: 783f365c9dbb5c9e9341753fbad6a44dcdc7a069
>> change-id: 20250522-b4-qcom-tooling-improvements-ab40585b11a1
>>
>> Casey Connolly <casey.connolly at linaro.org>
>>
> 



More information about the U-Boot mailing list