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:
parent
bc570646f6
commit
3e7749eaea
1
doc/develop/package/bintools.rst
Symbolic link
1
doc/develop/package/bintools.rst
Symbolic link
@ -0,0 +1 @@
|
||||
../../../tools/binman/bintools.rst
|
@ -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
115
tools/binman/bintools.rst
Normal 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.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user