[PATCH v2 13/13] doc: bootstd: describe the BLS bootmeth

Alexey Charkov <[email protected]>
Newsgroups org.u-boot-project.lists.u-boot
Message-ID <[email protected]>
Every other bootmeth has a page under doc/develop/bootstd/; add one for
BLS and list it in the index and in the overview's table of drivers.

Besides what the bootmeth does, record the two things a reader is most
likely to trip over: how paths inside an entry are resolved when $BOOT is
a directory rather than a partition, and which parts of the spec's entry
ordering and boot counting are not implemented yet.

Signed-off-by: Alexey Charkov <[email protected]>
---
 doc/develop/bootstd/bls.rst      | 56 ++++++++++++++++++++++++++++++++++++++++
 doc/develop/bootstd/index.rst    |  1 +
 doc/develop/bootstd/overview.rst |  1 +
 3 files changed, 58 insertions(+)

diff --git a/doc/develop/bootstd/bls.rst b/doc/develop/bootstd/bls.rst
new file mode 100644
index 000000000000..52e691b70165
--- /dev/null
+++ b/doc/develop/bootstd/bls.rst
@@ -0,0 +1,56 @@
+.. SPDX-License-Identifier: GPL-2.0+:
+
+BLS Bootmeth
+============
+
+The `Boot Loader Specification
+<https://uapi-group.org/specifications/specs/boot_loader_specification>`_ (BLS)
+describes a drop-in directory of boot entries, so that a distribution can add
+and remove kernels without rewriting a central configuration file. Type #1
+entries are plain text files, one per bootable kernel; this bootmeth implements
+those. Type #2 entries are EFI binaries and are out of scope here, since the
+EFI bootmeth already covers them.
+
+Entries live in ``<prefix>loader/entries/*.conf``, where ``<prefix>`` comes from
+the bootstd list of prefixes (``{"/", "/boot/"}`` by default, settable with the
+`filename-prefixes` property on the bootstd device). systemd's
+``kernel-install`` writes them in this layout when ``loader=bls``.
+
+The format is close enough to `extlinux.conf` that U-Boot reuses the same
+parser. Two extra keywords are recognised for it: ``title`` (the human-readable
+entry name, equivalent to extlinux's ``menu label``) and ``options`` (the kernel
+command line, equivalent to ``append``). Some spec-envisaged keys such as
+``version``, ``machine-id``, ``sort-key`` and ``architecture`` are not yet
+implemented and are skipped.
+
+Paths inside an entry are used as written: the spec has them "always relative
+to the root directory of the partition they are referenced from", which is
+what the bootmeth sees whichever prefix the entry itself was found under.
+systemd's ``90-loaderentry.install`` agrees, since it strips the mount point
+from the entry directory and so keeps the ``/boot`` component when $BOOT is
+not a mount point of its own.
+
+Entry selection
+---------------
+
+Only the highest-sorting entry on a partition is returned, because the bootstd
+framework currently allows one bootflow per (bootmeth, partition) pair.
+
+Ordering is by filename alone, which suits the common case of distros encoding
+the kernel version into the filename. The spec envisages more than this, none
+of which is implemented yet:
+
+* entries should be ordered by ``sort-key`` first and ``version`` second,
+  falling back to the filename only when those tie;
+
+* an entry may carry a boot counter as a ``+TRIES_LEFT[-TRIES_DONE]`` suffix on
+  its filename, to be decremented on each attempt and skipped once it reaches
+  zero. For now that suffix is left intact in the entry name and otherwise
+  ignored.
+
+When the bootflow is booted, the bootmeth re-parses the entry it read during
+the scan and hands the resulting label to ``label_boot()``, the same code path
+extlinux uses.
+
+The compatible string "u-boot,bls" is used for the driver. It is present if
+``CONFIG_BOOTMETH_BLS`` is enabled.
diff --git a/doc/develop/bootstd/index.rst b/doc/develop/bootstd/index.rst
index ec74fc2fb9d7..9271b5eef14e 100644
--- a/doc/develop/bootstd/index.rst
+++ b/doc/develop/bootstd/index.rst
@@ -9,6 +9,7 @@ Standard Boot
    overview
    extlinux
    pxelinux
+   bls
    qfw
    android
    cros
diff --git a/doc/develop/bootstd/overview.rst b/doc/develop/bootstd/overview.rst
index ec9fafa0fa05..eb0f68d9bb87 100644
--- a/doc/develop/bootstd/overview.rst
+++ b/doc/develop/bootstd/overview.rst
@@ -445,6 +445,7 @@ Available bootmeth drivers
 Bootmeth drivers are provided for booting from various media:
 
    - :doc:`Android <android>` bootflow (boot image v4)
+   - :doc:`BLS <bls>`: Boot Loader Specification type #1 entries from a disk
    - :doc:`ChromiumOS <cros>` ChromiumOS boot from a disk
    - EFI boot using bootefi from disk
    - EFI boot using boot manager

-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.