123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # SPDX-License-Identifier: GPL-2.0+
- # Copyright (c) 2016 Google, Inc
- # Written by Simon Glass <sjg@chromium.org>
- #
- # Entry-type module for producing an image using mkimage
- #
- from collections import OrderedDict
- from binman.entry import Entry
- from dtoc import fdt_util
- from patman import tools
- class Entry_mkimage(Entry):
- """Binary produced by mkimage
- Properties / Entry arguments:
- - datafile: Filename for -d argument
- - args: Other arguments to pass
- The data passed to mkimage is collected from subnodes of the mkimage node,
- e.g.::
- mkimage {
- args = "-n test -T imximage";
- u-boot-spl {
- };
- };
- This calls mkimage to create an imximage with u-boot-spl.bin as the input
- file. The output from mkimage then becomes part of the image produced by
- binman.
- """
- def __init__(self, section, etype, node):
- super().__init__(section, etype, node)
- self._args = fdt_util.GetString(self._node, 'args').split(' ')
- self._mkimage_entries = OrderedDict()
- self.align_default = None
- self._ReadSubnodes()
- def ObtainContents(self):
- data = b''
- for entry in self._mkimage_entries.values():
- # First get the input data and put it in a file. If not available,
- # try later.
- if not entry.ObtainContents():
- return False
- data += entry.GetData()
- uniq = self.GetUniqueName()
- input_fname = tools.GetOutputFilename('mkimage.%s' % uniq)
- tools.WriteFile(input_fname, data)
- output_fname = tools.GetOutputFilename('mkimage-out.%s' % uniq)
- tools.Run('mkimage', '-d', input_fname, *self._args, output_fname)
- self.SetContents(tools.ReadFile(output_fname))
- return True
- def _ReadSubnodes(self):
- """Read the subnodes to find out what should go in this image"""
- for node in self._node.subnodes:
- entry = Entry.Create(self, node)
- entry.ReadNode()
- self._mkimage_entries[entry.name] = entry
|