[PATCH 00/28] Initial implementation of bootmethod/bootflow
Mark Kettenis
mark.kettenis at xs4all.nl
Mon Aug 23 13:54:29 CEST 2021
> From: Simon Glass <sjg at chromium.org>
> 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
>
>
More information about the U-Boot
mailing list