1 # SPDX-License-Identifier: GPL-2.0+
2 # Copyright (c) 2016 Google, Inc
3 # Written by Simon Glass <sjg@chromium.org>
5 # Entry-type module for producing an image using mkimage
8 from collections import OrderedDict
10 from binman.entry import Entry
11 from dtoc import fdt_util
12 from patman import tools
14 class Entry_mkimage(Entry):
15 """Binary produced by mkimage
17 Properties / Entry arguments:
18 - datafile: Filename for -d argument
19 - args: Other arguments to pass
21 The data passed to mkimage is collected from subnodes of the mkimage node,
25 args = "-n test -T imximage";
31 This calls mkimage to create an imximage with u-boot-spl.bin as the input
32 file. The output from mkimage then becomes part of the image produced by
35 def __init__(self, section, etype, node):
36 super().__init__(section, etype, node)
37 self._args = fdt_util.GetString(self._node, 'args').split(' ')
38 self._mkimage_entries = OrderedDict()
41 def ObtainContents(self):
43 for entry in self._mkimage_entries.values():
44 # First get the input data and put it in a file. If not available,
46 if not entry.ObtainContents():
48 data += entry.GetData()
49 uniq = self.GetUniqueName()
50 input_fname = tools.GetOutputFilename('mkimage.%s' % uniq)
51 tools.WriteFile(input_fname, data)
52 output_fname = tools.GetOutputFilename('mkimage-out.%s' % uniq)
53 tools.Run('mkimage', '-d', input_fname, *self._args, output_fname)
54 self.SetContents(tools.ReadFile(output_fname))
57 def _ReadSubnodes(self):
58 """Read the subnodes to find out what should go in this image"""
59 for node in self._node.subnodes:
60 entry = Entry.Create(self, node)
62 self._mkimage_entries[entry.name] = entry