mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-23 19:43:33 +00:00
124 lines
3.7 KiB
Python
124 lines
3.7 KiB
Python
|
# 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()
|