| # SPDX-License-Identifier: GPL-2.0+ |
| # Copyright 2022 Google LLC |
| # |
| """Bintool implementation for fiptool |
| |
| 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. |
| |
| Documentation is at: |
| https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool |
| |
| Source code is at: |
| https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git |
| |
| Here is the help: |
| |
| usage: fiptool [--verbose] <command> [<args>] |
| Global options supported: |
| --verbose Enable verbose output for all commands. |
| |
| Commands supported: |
| info List images contained in FIP. |
| create Create a new FIP with the given images. |
| update Update an existing FIP with the given images. |
| unpack Unpack images from FIP. |
| remove Remove images from FIP. |
| version Show fiptool version. |
| help Show help for given command. |
| |
| """ |
| |
| from binman import bintool |
| |
| class Bintoolfiptool(bintool.Bintool): |
| """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 |
| """ |
| def __init__(self, name): |
| super().__init__(name, 'Manipulate ATF FIP files') |
| |
| def info(self, fname): |
| """Get info on a FIP image |
| |
| Args: |
| fname (str): Filename to check |
| |
| Returns: |
| str: Tool output |
| """ |
| args = ['info', fname] |
| return self.run_cmd(*args) |
| |
| # pylint: disable=R0913 |
| def create_new(self, fname, align, plat_toc_flags, fwu, tb_fw, blob_uuid, |
| blob_file): |
| """Create a new FIP |
| |
| Args: |
| fname (str): Filename to write to |
| align (int): Alignment to use for entries |
| plat_toc_flags (int): Flags to use for the TOC header |
| fwu (str): Filename for the fwu entry |
| tb_fw (str): Filename for the tb_fw entry |
| blob_uuid (str): UUID for the blob entry |
| blob_file (str): Filename for the blob entry |
| |
| Returns: |
| str: Tool output |
| """ |
| args = [ |
| 'create', |
| '--align', f'{align:x}', |
| '--plat-toc-flags', f'{plat_toc_flags:#x}', |
| '--fwu', fwu, |
| '--tb-fw', tb_fw, |
| '--blob', f'uuid={blob_uuid},file={blob_file}', |
| fname] |
| return self.run_cmd(*args) |
| |
| def create_bad(self): |
| """Run fiptool with invalid arguments""" |
| args = ['create', '--fred'] |
| return self.run_cmd_result(*args) |
| |
| def fetch(self, method): |
| """Fetch handler for fiptool |
| |
| This builds the tool from source |
| |
| Returns: |
| tuple: |
| str: Filename of fetched file to copy to a suitable directory |
| str: Name of temp directory to remove, or None |
| """ |
| if method != bintool.FETCH_BUILD: |
| return None |
| result = self.build_from_git( |
| 'https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git', |
| 'fiptool', |
| 'tools/fiptool/fiptool') |
| return result |
| |
| def version(self): |
| """Version handler for fiptool |
| |
| Returns: |
| str: Version number of fiptool |
| """ |
| out = self.run_cmd('version').strip() |
| return out or super().version() |