Browse Source

binman: Record the parent section of each section

At present sections have no record of their parent so it is not possible
to traverse up the tree to the root and figure out the position of a
section within the image.

Change the constructor to record this information.

Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass 6 years ago
parent
commit
08723a7abb
3 changed files with 9 additions and 4 deletions
  1. 4 1
      tools/binman/bsection.py
  2. 2 1
      tools/binman/etype/section.py
  3. 3 2
      tools/binman/image.py

+ 4 - 1
tools/binman/bsection.py

@@ -24,6 +24,7 @@ class Section(object):
 
 
     Attributes:
     Attributes:
         _node: Node object that contains the section definition in device tree
         _node: Node object that contains the section definition in device tree
+        _parent_section: Parent Section object which created this Section
         _size: Section size in bytes, or None if not known yet
         _size: Section size in bytes, or None if not known yet
         _align_size: Section size alignment, or None
         _align_size: Section size alignment, or None
         _pad_before: Number of bytes before the first entry starts. This
         _pad_before: Number of bytes before the first entry starts. This
@@ -46,14 +47,16 @@ class Section(object):
             section
             section
         _entries: OrderedDict() of entries
         _entries: OrderedDict() of entries
     """
     """
-    def __init__(self, name, node, test=False):
+    def __init__(self, name, parent_section, node, image, test=False):
         global entry
         global entry
         global Entry
         global Entry
         import entry
         import entry
         from entry import Entry
         from entry import Entry
 
 
+        self._parent_section = parent_section
         self._name = name
         self._name = name
         self._node = node
         self._node = node
+        self._image = image
         self._offset = 0
         self._offset = 0
         self._size = None
         self._size = None
         self._align_size = None
         self._align_size = None

+ 2 - 1
tools/binman/etype/section.py

@@ -32,7 +32,8 @@ class Entry_section(Entry):
     """
     """
     def __init__(self, section, etype, node):
     def __init__(self, section, etype, node):
         Entry.__init__(self, section, etype, node)
         Entry.__init__(self, section, etype, node)
-        self._section = bsection.Section(node.name, node)
+        self._section = bsection.Section(node.name, section, node,
+                                         section._image)
 
 
     def GetFdtSet(self):
     def GetFdtSet(self):
         return self._section.GetFdtSet()
         return self._section.GetFdtSet()

+ 3 - 2
tools/binman/image.py

@@ -42,7 +42,8 @@ class Image:
         self._size = None
         self._size = None
         self._filename = '%s.bin' % self._name
         self._filename = '%s.bin' % self._name
         if test:
         if test:
-            self._section = bsection.Section('main-section', self._node, True)
+            self._section = bsection.Section('main-section', None, self._node,
+                                             self, True)
         else:
         else:
             self._ReadNode()
             self._ReadNode()
 
 
@@ -52,7 +53,7 @@ class Image:
         filename = fdt_util.GetString(self._node, 'filename')
         filename = fdt_util.GetString(self._node, 'filename')
         if filename:
         if filename:
             self._filename = filename
             self._filename = filename
-        self._section = bsection.Section('main-section', self._node)
+        self._section = bsection.Section('main-section', None, self._node, self)
 
 
     def GetFdtSet(self):
     def GetFdtSet(self):
         """Get the set of device tree files used by this image"""
         """Get the set of device tree files used by this image"""