From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E229C4338F for ; Mon, 23 Aug 2021 11:54:42 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CF09061357 for ; Mon, 23 Aug 2021 11:54:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org CF09061357 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xs4all.nl Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6B6E6821F0; Mon, 23 Aug 2021 13:54:40 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=xs4all.nl Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id F306281BCA; Mon, 23 Aug 2021 13:54:38 +0200 (CEST) Received: from sibelius.xs4all.nl (sibelius.xs4all.nl [83.163.83.176]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 28002831FC for ; Mon, 23 Aug 2021 13:54:31 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=xs4all.nl Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=mark.kettenis@xs4all.nl Received: from localhost (bloch.sibelius.xs4all.nl [local]) by bloch.sibelius.xs4all.nl (OpenSMTPD) with ESMTPA id 3aff6c6e; Mon, 23 Aug 2021 13:54:29 +0200 (CEST) Date: Mon, 23 Aug 2021 13:54:29 +0200 (CEST) From: Mark Kettenis To: Simon Glass Cc: u-boot@lists.denx.de, ilias.apalodimas@linaro.org, jaeckel-floss@eyet-services.de, michal.simek@xilinx.com, trini@konsulko.com, dennis@ausil.us, daniel.schwierzeck@gmail.com, lukas.auer@aisec.fraunhofer.de, sjg@chromium.org, jh80.chung@samsung.com, mbrugger@suse.com, peng.fan@nxp.com, swarren@nvidia.com, swarren@wwwdotorg.org In-Reply-To: <20210819034601.1618773-1-sjg@chromium.org> (message from Simon Glass on Wed, 18 Aug 2021 21:45:33 -0600) Subject: Re: [PATCH 00/28] Initial implementation of bootmethod/bootflow References: <20210819034601.1618773-1-sjg@chromium.org> Message-ID: <56140f0c4976b9f9@bloch.sibelius.xs4all.nl> X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean > From: Simon Glass > Date: Wed, 18 Aug 2021 21:45:33 -0600 > > Bootmethod and bootflow provide a built-in way for U-Boot to automatically boot > an Operating System without custom scripting and other customisation: > > - bootmethod - a method to scan a device to find bootflows (owned by U-Boot) > - bootflow - a description of how to boot (owned by the distro) > > This series provides an initial implementation of these, enable to scan > for bootflows from MMC and Ethernet. The only bootflow supported is > distro boot, i.e. an extlinux.conf file included on a filesystem or > tftp server. It works similiarly to the existing script-based approach, > but is native to U-Boot. > > With this we can boot on a Raspberry Pi 3 with just one command: > > bootflow scan -lb > > which means to scan, listing (-l) each bootflow and trying to boot each > one (-b). The final patch shows this. > > It is intended that this approach be expanded to support mechanisms other > than distro boot, including EFI-related ones. With a standard way to > identify boot devices, these features become easier. It also should > support U-Boot scripts, for backwards compatibility only. > > The first patch of this series moves boot-related code out of common/ and > into a new boot/ directory. This helps to collect these related files > in one place, as common/ is quite large. > > Like sysboot, this feature makes use of the existing PXE implementation. > Much of this series consists of cleaning up that code and refactoring it > into something closer to a module that can be called, teasing apart its > reliance on the command-line interpreter to access filesystems and the > like. Also it now uses function arguments and its own context struct > internally rather than environment variables, which is very hard to > follow. No core functional change is included in the included PXE patches. > > For documentation, see the 'doc' patch. > > There is quite a long list of future work included in the documentation. > One question is the choice of naming. Since this is a bootloader, should > we just call this a 'method' and a 'flow' ? The 'boot' prefix is already > shared by other commands like bootm, booti, etc. > > The design is described here: > > https://drive.google.com/file/d/1ggW0KJpUOR__vBkj3l61L2dav4ZkNC12/view?usp=sharing > > The series is available at u-boot-dm/bmea-working How does the user control the order in which devices are scanned/booted? And how do we define the default order? > Simon Glass (28): > Create a new boot/ directory > pxe: Move API comments to the header files > pxe: Use a context pointer > pxe: Move do_getfile() into the context > pxe: Add a userdata field to the context > pxe: Tidy up the is_pxe global > pxe: Move pxe_utils files > pxe: Tidy up some comments in pxe_utils > pxe: Tidy up code style a little in pxe_utils > pxe: Move common parsing coding into pxe_util > pxe: Clean up the use of bootfile > pxe: Drop get_bootfile_path() > lib: Add tests for simple_itoa() > lib: Add a function to convert a string to a hex value > pxe: Return the file size from the getfile() function > pxe: Refactor sysboot to have one helper > doc: Move distro boot doc to rST > pxe: Allow calling the pxe_get logic directly > bootmethod: Add the uclass and core implementation > bootmethod: Add an implementation of distro boot > bootmethod: Add a command > bootflow: Add a command > bootmethod: Add tests for bootmethod and bootflow > bootmethod: doc: Add documentation > mmc: Allow for children other than the block device > mmc: Add a bootmethod > ethernet: Add a bootmethod > RFC: rpi: Switch over to use bootflow > > Kconfig | 2 + > MAINTAINERS | 16 + > Makefile | 3 +- > README | 1 + > common/Kconfig.boot => boot/Kconfig | 22 +- > boot/Makefile | 39 ++ > {common => boot}/android_ab.c | 0 > {common => boot}/boot_fit.c | 0 > {common => boot}/bootm.c | 0 > {common => boot}/bootm_os.c | 0 > boot/bootmethod.c | 485 ++++++++++++++++++++ > {common => boot}/bootretry.c | 0 > {common => boot}/common_fit.c | 0 > boot/distro.c | 194 ++++++++ > {common => boot}/fdt_region.c | 0 > {common => boot}/image-android-dt.c | 0 > {common => boot}/image-android.c | 0 > {common => boot}/image-cipher.c | 0 > {common => boot}/image-fdt.c | 0 > {common => boot}/image-fit-sig.c | 0 > {common => boot}/image-fit.c | 0 > {common => boot}/image-sig.c | 0 > {common => boot}/image.c | 0 > {cmd => boot}/pxe_utils.c | 512 +++++++++++----------- > cmd/Kconfig | 8 + > cmd/Makefile | 5 +- > cmd/bootflow.c | 399 +++++++++++++++++ > cmd/bootmethod.c | 130 ++++++ > cmd/pxe.c | 136 +++--- > cmd/pxe_utils.h | 91 ---- > cmd/sysboot.c | 114 +++-- > common/Kconfig | 2 - > common/Makefile | 22 - > configs/sandbox_defconfig | 3 +- > doc/android/boot-image.rst | 2 +- > doc/develop/bootflow.rst | 323 ++++++++++++++ > doc/{README.distro => develop/distro.rst} | 180 ++++---- > doc/develop/index.rst | 2 + > doc/device-tree-bindings/bootmethod.txt | 14 + > doc/usage/bootflow.rst | 419 ++++++++++++++++++ > doc/usage/bootmethod.rst | 138 ++++++ > doc/usage/index.rst | 2 + > drivers/mmc/Makefile | 5 + > drivers/mmc/mmc-uclass.c | 23 +- > drivers/mmc/mmc_bootmethod.c | 46 ++ > include/bootmethod.h | 357 +++++++++++++++ > include/configs/rpi.h | 37 +- > include/distro.h | 62 +++ > include/dm/uclass-id.h | 1 + > include/mmc.h | 12 +- > include/pxe_utils.h | 253 +++++++++++ > include/test/suites.h | 2 + > include/vsprintf.h | 25 +- > lib/vsprintf.c | 20 +- > net/Kconfig | 9 + > net/Makefile | 1 + > net/eth-uclass.c | 8 + > net/eth_bootmethod.c | 76 ++++ > scripts/Makefile.spl | 4 +- > test/Makefile | 1 + > test/boot/Makefile | 5 + > test/boot/bootmethod.c | 271 ++++++++++++ > test/cmd_ut.c | 4 + > test/print_ut.c | 33 ++ > tools/Makefile | 16 +- > try.sh | 131 ++++++ > 66 files changed, 4035 insertions(+), 631 deletions(-) > rename common/Kconfig.boot => boot/Kconfig (98%) > create mode 100644 boot/Makefile > rename {common => boot}/android_ab.c (100%) > rename {common => boot}/boot_fit.c (100%) > rename {common => boot}/bootm.c (100%) > rename {common => boot}/bootm_os.c (100%) > create mode 100644 boot/bootmethod.c > rename {common => boot}/bootretry.c (100%) > rename {common => boot}/common_fit.c (100%) > create mode 100644 boot/distro.c > rename {common => boot}/fdt_region.c (100%) > rename {common => boot}/image-android-dt.c (100%) > rename {common => boot}/image-android.c (100%) > rename {common => boot}/image-cipher.c (100%) > rename {common => boot}/image-fdt.c (100%) > rename {common => boot}/image-fit-sig.c (100%) > rename {common => boot}/image-fit.c (100%) > rename {common => boot}/image-sig.c (100%) > rename {common => boot}/image.c (100%) > rename {cmd => boot}/pxe_utils.c (74%) > create mode 100644 cmd/bootflow.c > create mode 100644 cmd/bootmethod.c > delete mode 100644 cmd/pxe_utils.h > create mode 100644 doc/develop/bootflow.rst > rename doc/{README.distro => develop/distro.rst} (76%) > create mode 100644 doc/device-tree-bindings/bootmethod.txt > create mode 100644 doc/usage/bootflow.rst > create mode 100644 doc/usage/bootmethod.rst > create mode 100644 drivers/mmc/mmc_bootmethod.c > create mode 100644 include/bootmethod.h > create mode 100644 include/distro.h > create mode 100644 include/pxe_utils.h > create mode 100644 net/eth_bootmethod.c > create mode 100644 test/boot/Makefile > create mode 100644 test/boot/bootmethod.c > create mode 100755 try.sh > > -- > 2.33.0.rc1.237.g0d66db33f3-goog > >