mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-22 11:13:07 +00:00
81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
|
# SPDX-License-Identifier: GPL-2.0+
|
||
|
# Copyright 2022 Google LLC
|
||
|
#
|
||
|
"""Bintool implementation for mkimage"""
|
||
|
|
||
|
import re
|
||
|
|
||
|
from binman import bintool
|
||
|
|
||
|
class Bintoolmkimage(bintool.Bintool):
|
||
|
"""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.
|
||
|
"""
|
||
|
def __init__(self, name):
|
||
|
super().__init__(name, 'Generate image for U-Boot')
|
||
|
|
||
|
# pylint: disable=R0913
|
||
|
def run(self, reset_timestamp=False, output_fname=None, external=False,
|
||
|
pad=None, version=False):
|
||
|
"""Run mkimage
|
||
|
|
||
|
Args:
|
||
|
reset_timestamp: True to update the timestamp in the FIT
|
||
|
output_fname: Output filename to write to
|
||
|
external: True to create an 'external' FIT, where the binaries are
|
||
|
located outside the main data structure
|
||
|
pad: Bytes to use for padding the FIT devicetree output. This allows
|
||
|
other things to be easily added later, if required, such as
|
||
|
signatures
|
||
|
version: True to get the mkimage version
|
||
|
"""
|
||
|
args = []
|
||
|
if external:
|
||
|
args.append('-E')
|
||
|
if pad:
|
||
|
args += ['-p', f'{pad:x}']
|
||
|
if reset_timestamp:
|
||
|
args.append('-t')
|
||
|
if output_fname:
|
||
|
args += ['-F', output_fname]
|
||
|
if version:
|
||
|
args.append('-V')
|
||
|
return self.run_cmd(*args)
|
||
|
|
||
|
def fetch(self, method):
|
||
|
"""Fetch handler for mkimage
|
||
|
|
||
|
This installs mkimage using the apt utility.
|
||
|
|
||
|
Args:
|
||
|
method (FETCH_...): Method to use
|
||
|
|
||
|
Returns:
|
||
|
True if the file was fetched and now installed, None if a method
|
||
|
other than FETCH_BIN was requested
|
||
|
|
||
|
Raises:
|
||
|
Valuerror: Fetching could not be completed
|
||
|
"""
|
||
|
if method != bintool.FETCH_BIN:
|
||
|
return None
|
||
|
return self.apt_install('u-boot-tools')
|
||
|
|
||
|
def version(self):
|
||
|
"""Version handler for mkimage
|
||
|
|
||
|
Returns:
|
||
|
str: Version string for mkimage
|
||
|
"""
|
||
|
out = self.run(version=True).strip()
|
||
|
if not out:
|
||
|
return super().version()
|
||
|
m_version = re.match(r'mkimage version (.*)', out)
|
||
|
return m_version.group(1) if m_version else out
|