summaryrefslogtreecommitdiff
path: root/tools/binman
AgeCommit message (Collapse)Author
2019-07-24binman: Add an image headerSimon Glass
It is useful to be able to quickly locate the FDT map in the image. An easy way to do this is with a pointer at the start or end of the image. Add an 'image header' entry, which places a magic number followed by a pointer to the FDT map. This can be located at the start or end of the image, or at a chosen location. As part of this, update GetSiblingImagePos() to detect missing siblings. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add an FDT mapSimon Glass
An FDT map is an entry which holds a full description of the image entries, in FDT format. It can be discovered using the magic string at its start. Tools can locate and read this entry to find out what entries are in the image and where each entry is located. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add a convenience functions for real-DTB testsSimon Glass
Quite a few tests will use a real device tree and need it updated with the binman metadata. Add a helper function for this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Update help for new featuresSimon Glass
A few new features have been added. This has rendered part of the README obsolete. Update it. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Update future featuresSimon Glass
A few features have been completed and a few items are added. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Simplify the entry testSimon Glass
The current test for the 'entry' module is a bit convoluted since it has to import the module multiple times. It also relies on ordering, in that test1EntryNoImportLib() must run before test2EntryImportLib() if they are running in the same Python process. This is unreliable since neither the ordering of tests nor the process that they run in is defined. Fix this by always reloading the entry in these two tests. Also add a check that the expected value of have_importlib is obtained. This corrects a code-coverage problem in the 'entry' module on some systems. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add support for fixed-offset files in CBFSSimon Glass
A feature of CBFS is that it allows files to be positioned at particular offset (as with binman in general). This is useful to support execute-in-place (XIP) code, since this may not be relocatable. Add a new cbfs-offset property to control this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Pad empty areas of the CBFS with filesSimon Glass
When there is lots of open space in a CBFS it is normally padded with 'empty' files so that sequentially scanning the CBFS can skip from one to the next without a break. Add support for this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add support for Intel IFWI entriesSimon Glass
An Integrated Firmware Image is used to hold various binaries used for booting with Apollolake and some later devices. Add support for this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add support for CBFS entriesSimon Glass
Add support for putting CBFSs (Coreboot Filesystems) in an image. This allows binman to produce firmware images used by coreboot to boot. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Add a utility library for coreboot CBFSSimon Glass
Coreboot uses a simple flash-based filesystem called Coreboot Filesystem (CBFS) to organise files used during boot. This allows files to be named and their position in the flash to be set. It has special features for dealing with x86 devices which typically memory-map their SPI flash to the top of 32-bit address space and need a 'boot block' ending there. Create a library to help create and read CBFS files. This includes a writer class, a reader class and associated other helpers. Only a subset of features are currently supported. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-24binman: Pass the toolpath to testsSimon Glass
Tools like ifwitool may not be available in the PATH, but are available in the build. These tools may be needed by tests, so allow tests to use the --toolpath flag. Also use this flag with travis. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Allow preserving test directoriesSimon Glass
Sometimes when debugging tests it is useful to keep the input and output directories so they can be examined later. Add an option for this and update the binman tests to support it. This affects both the test class and the tearDown() function called after each test. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Allow verbosity control when running testsSimon Glass
At present the -v flag is ignored with tests, so that (for example) -v2 does not have any effect. Update binman to pass this flag through to tests so that they work just like running binman normally, except in a few special cases where we are actually testing behaviour with different levels of verbosity. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Fix up the _DoTestFile() function -u argumentSimon Glass
This should be -u, not -up, since we don't need to preserve the output directory in this case. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Support ELF files for TPLSimon Glass
We currenty support using the ELF file in U-Boot proper and SPL, but not TPL. Add this as it is useful both with sandbox and for CBFS to allow adding TPL as a 'stage'. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Correct comment in u_boot_spl_elfSimon Glass
This comment mentions the wrong default filename. Fix it. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Use tools compression function for blob handlingSimon Glass
Avoid duplicate code here by using the new compression function in the tools module. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Drop unnecessary debug handlingSimon Glass
The -D option enables debug mode, but we only need to add -D to the command line once. Drop the duplicate code. Also drop the comment about enabling debugging since this can be done with -D. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Use the tools.Decompress methodSimon Glass
Update the compression test to use the tools module to decompress the output data. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23patman: Add functions to compress and decompress dataSimon Glass
Add utility functions to compress and decompress using lz4 and lzma algorithms. In the latter case these use the legacy lzma support favoured by coreboot's CBFS. No tests are provided as these functions will be tested by the CBFS tests in a separate patch. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Allow text directly in the nodeSimon Glass
At present text entries use an indirect method to specify the text to use, with a label pointing to the text itself. Allow the text to be directly written into the node. This is more convenient in cases where the text is constant. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Update entry.SetOffsetSize to be optionalSimon Glass
At present this function always sets both the offset and the size of entries. But in some cases we want to set only one or the other, for example with the forthcoming ifwi entry, where we only set the offset. Update the function to handle this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Don't assume there is an ME regionSimon Glass
At present having a descriptor means that there is an ME (Intel Management Engine) entry as well. The descriptor provides the ME location and assumes that it is present. For some SoCs this is not true. Before providing the location of a potentially non-existent entry, check if it is present. Update the comment in the ME entry also. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Assume Intel descriptor is at the start of the imageSimon Glass
At present binman requires that the Intel descriptor has an explicit offset. Generally this is 0 since the descriptor is at the start of the image. Add a default to handle this, so users don't need to specify the offset. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Ensure that coverage has access to site packagesSimon Glass
Code coverage tests fail on binman due to dist-packages being dropped from the python path on Ubuntu 16.04. Add them in so that we can find the elffile module, which is required by binman. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add a function to decode an ELF fileSimon Glass
Add a function which decodes an ELF file, working out where in memory each part of the data should be written. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add a function to create a sample ELF fileSimon Glass
It is useful to create an ELF file for testing purposes, with just the right attributes used by the test. Add a function to handle this, along with a test that it works correctly. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Detect skipped testsSimon Glass
If tests are skipped we should ideally exit with an error, since there may be a missing dependency. However at present this is not desirable since it breaks travis tests. For now, just report the skips. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Use a better error for missing Intel descriptorSimon Glass
FD is a bit confusing so write this out in full. Also avoid splitting the string so that people can grep for the error message more easily. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Tidy up help for --indirSimon Glass
The current help is confusing. Adjust it to indicate what the flag actually does. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add missing comments toentrySimon Glass
At present GetOffsets() lacks a function comment. Add one. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add missing comments to bsectionSimon Glass
Some functions lack comments in this file. Add comments to cover this functionality. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add a --toolpath option to set the tool search pathSimon Glass
Sometimes tools used by binman may not be in the normal PATH search path, such as when the tool is built by the U-Boot build itself (e.g. mkimage). Provide a way to specify an additional search path for tools. The flag can be used multiple times. Update the help to describe this option. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Add coverage tools info for Python 3Simon Glass
Test coverage with Python 3 requires a new package. Add details about this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Correct two typos in function names in ftestSimon Glass
Two functions have incorrect names. Fix them. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-23binman: Fix comment in bsection.GetEntries()Simon Glass
This comment is out of date as it does not correctly describe the return value. Fix it. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Update the README.entries fileSimon Glass
A few minor changes have been made including one new entry. Update the documentation with: $ binman -E >tools/binman/README.entries Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Document parallel testsSimon Glass
Since binman can run tests in parallel, document this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Read map files as textSimon Glass
These files are text files so should be read as such, so that string-equality assertions work as expected. With this binman tests work correctly on Python 2 and Python 3: PYTHONPATH=/tmp/b/sandbox_spl/scripts/dtc/pylibfdt \ python ./tools/binman/binman -t Change first line of binman.py to end "python3": PYTHONPATH=~/cosarm/dtc/pylibfdt:tools/patman \ python3 ./tools/binman/binman -t Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Fix up a format string in AssertInList()Simon Glass
Add the missing 's' to the required '%s' here. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Update 'text' entry for Python 3Simon Glass
This code reads a binary value and then uses it as a string to look up another value. Add conversions to make this work as expected on Python 3. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10patman: Update fmap code for Python 3Simon Glass
This needs special care to ensure that the bytes type is used for binary data. Add conversion code to deal with strings and bytes correctly. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Update entry_test to support Python 3Simon Glass
The reload() function is in a different place in Python 3. Update the code to handle this. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Convert to use bytes typeSimon Glass
With Python 3 we want to use the 'bytes' type instead of 'str'. Adjust the code accordingly so that it works on both Python 2 and Python 3. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Avoid changing a dict during iterationSimon Glass
This code works OK in Python 2 but Python 3 complains. Adjust it to avoid deleting elements from a dict while iterating through it. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Handle repeated bytes for Python 3Simon Glass
The method of multiplying a character by a number works well for creating a repeated string in Python 2. But in Python 3 we need to use bytes() instead, to avoid unicode problems, since 'bytes' is no-longer just an alias of 'str'. Create a function to handle this detail and call it from the relevant places in binman. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Drop an unused input fileSimon Glass
Drop this line which is not used or needed. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10binman: Use binary mode when compressing dataSimon Glass
The lz4 utility inserts binary data in its output which cannot always be converted to unicode (nor should it be). Fix this by using the new binary mode for program output. Signed-off-by: Simon Glass <sjg@chromium.org>
2019-07-10tools: binman: Open all binary files in binary modeSimon Glass
At present some files are opened in text mode despite containing binary data. This works on Python 2 but not always on Python 3, due to unicode problems. BC&D are not my favourite people. Adjust the affected open() statements to use binary mode. Signed-off-by: Simon Glass <sjg@chromium.org>