binman: Drop repetitive heading for each entry
[platform/kernel/u-boot.git] / tools / binman / etype / mkimage.py
1 # SPDX-License-Identifier: GPL-2.0+
2 # Copyright (c) 2016 Google, Inc
3 # Written by Simon Glass <sjg@chromium.org>
4 #
5 # Entry-type module for producing an image using mkimage
6 #
7
8 from collections import OrderedDict
9
10 from binman.entry import Entry
11 from dtoc import fdt_util
12 from patman import tools
13
14 class Entry_mkimage(Entry):
15     """Binary produced by mkimage
16
17     Properties / Entry arguments:
18         - datafile: Filename for -d argument
19         - args: Other arguments to pass
20
21     The data passed to mkimage is collected from subnodes of the mkimage node,
22     e.g.::
23
24         mkimage {
25             args = "-n test -T imximage";
26
27             u-boot-spl {
28             };
29         };
30
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
33     binman.
34     """
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()
39         self._ReadSubnodes()
40
41     def ObtainContents(self):
42         data = b''
43         for entry in self._mkimage_entries.values():
44             # First get the input data and put it in a file. If not available,
45             # try later.
46             if not entry.ObtainContents():
47                 return False
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))
55         return True
56
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)
61             entry.ReadNode()
62             self._mkimage_entries[entry.name] = entry