binman: Add documentation for bintools

Add this documention to explain how bintools are used and which ones are
available.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2022-01-09 20:14:12 -07:00
parent bc570646f6
commit 3e7749eaea
3 changed files with 187 additions and 0 deletions

View file

@ -0,0 +1 @@
../../../tools/binman/bintools.rst

View file

@ -1027,6 +1027,77 @@ by increasing the -v/--verbosity from the default of 1:
You can use BINMAN_VERBOSE=5 (for example) when building to select this.
Bintools
========
`Bintool` is the name binman gives to a binary tool which it uses to create and
manipulate binaries that binman cannot handle itself. Bintools are often
necessary since Binman only supports a subset of the available file formats
natively.
Many SoC vendors invent ways to load code into their SoC using new file formats,
sometimes changing the format with successive SoC generations. Sometimes the
tool is available as Open Source. Sometimes it is a pre-compiled binary that
must be downloaded from the vendor's website. Sometimes it is available in
source form but difficult or slow to build.
Even for images that use bintools, binman still assembles the image from its
image description. It may handle parts of the image natively and part with
various bintools.
Binman relies on these tools so provides various features to manage them:
- Determining whether the tool is currently installed
- Downloading or building the tool
- Determining the version of the tool that is installed
- Deciding which tools are needed to build an image
The Bintool class is an interface to the tool, a thin level of abstration, using
Python functions to run the tool for each purpose (e.g. creating a new
structure, adding a file to an existing structure) rather than just lists of
string arguments.
As with external blobs, bintools (which are like 'external' tools) can be
missing. When building an image requires a bintool and it is not installed,
binman detects this and reports the problem, but continues to build an image.
This is useful in CI systems which want to check that everything is correct but
don't have access to the bintools.
To make this work, all calls to bintools (e.g. with Bintool.run_cmd()) must cope
with the tool being missing, i.e. when None is returned, by:
- Calling self.record_missing_bintool()
- Setting up some fake contents so binman can continue
Of course the image will not work, but binman reports which bintools are needed
and also provide a way to fetch them.
To see the available bintools, use::
binman tool --list
To fetch tools which are missing, use::
binman tool --fetch missing
You can also use `--fetch all` to fetch all tools or `--fetch <tool>` to fetch
a particular tool. Some tools are built from source code, in which case you will
need to have at least the `build-essential` and `git` packages installed.
Bintool Documentation
=====================
To provide details on the various bintools supported by binman, bintools.rst is
generated from the source code using:
binman bintool-docs >tools/binman/bintools.rst
.. toctree::
:maxdepth: 2
bintools
Technical details
=================

115
tools/binman/bintools.rst Normal file
View file

@ -0,0 +1,115 @@
.. SPDX-License-Identifier: GPL-2.0+
Binman bintool Documentation
============================
This file describes the bintools (binary tools) supported by binman. Bintools
are binman's name for external executables that it runs to generate or process
binaries. It is fairly easy to create new bintools. Just add a new file to the
'btool' directory. You can use existing bintools as examples.
Bintool: cbfstool: Coreboot filesystem (CBFS) tool
--------------------------------------------------
This bintool supports creating new CBFS images and adding files to an
existing image, i.e. the features needed by binman.
It also supports fetching a binary cbfstool, since building it from source
is fairly slow.
Documentation about CBFS is at https://www.coreboot.org/CBFS
Bintool: fiptool: Image generation for ARM Trusted Firmware
-----------------------------------------------------------
This bintool supports running `fiptool` with some basic parameters as
neeed by binman.
It also supports build fiptool from source.
fiptool provides a way to package firmware in an ARM Trusted Firmware
Firmware Image Package (ATF FIP) format. It is used with Trusted Firmware A,
for example.
See `TF-A FIP tool documentation`_ for more information.
.. _`TF-A FIP tool documentation`:
https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool
Bintool: futility: Handles the 'futility' tool
----------------------------------------------
futility (flash utility) is a tool for working with Chromium OS flash
images. This Bintool implements just the features used by Binman, related to
GBB creation and firmware signing.
A binary version of the tool can be fetched.
See `Chromium OS vboot documentation`_ for more information.
.. _`Chromium OS vboot documentation`:
https://chromium.googlesource.com/chromiumos/platform/vboot/+/refs/heads/main/_vboot_reference/README
Bintool: ifwitool: Handles the 'ifwitool' tool
----------------------------------------------
This bintool supports running `ifwitool` with some basic parameters as
neeed by binman. It includes creating a file from a FIT as well as adding,
replacing, deleting and extracting subparts.
The tool is built as part of U-Boot, but a binary version can be fetched if
required.
ifwitool provides a way to package firmware in an Intel Firmware Image
(IFWI) file on some Intel SoCs, e.g. Apolo Lake.
Bintool: lz4: Compression/decompression using the LZ4 algorithm
---------------------------------------------------------------
This bintool supports running `lz4` to compress and decompress data, as
used by binman.
It is also possible to fetch the tool, which uses `apt` to install it.
Documentation is available via::
man lz4
Bintool: lzma_alone: Compression/decompression using the LZMA algorithm
-----------------------------------------------------------------------
This bintool supports running `lzma_alone` to compress and decompress data,
as used by binman.
It is also possible to fetch the tool, which uses `apt` to install it.
Documentation is available via::
man lzma_alone
Bintool: mkimage: Image generation for U-Boot
---------------------------------------------
This bintool supports running `mkimage` with some basic parameters as
neeed by binman.
Normally binman uses the mkimage built by U-Boot. But when run outside the
U-Boot build system, binman can use the version installed in your system.
Support is provided for fetching this on Debian-like systems, using apt.