|
@@ -12,7 +12,13 @@ import sys
|
|
|
import fdt
|
|
|
from fdt import Fdt, NodeBase, PropBase
|
|
|
import fdt_util
|
|
|
-import libfdt_legacy as libfdt
|
|
|
+try:
|
|
|
+ import libfdt
|
|
|
+ legacy = False
|
|
|
+except ImportError:
|
|
|
+ import libfdt_legacy as libfdt
|
|
|
+ legacy = True
|
|
|
+
|
|
|
|
|
|
# This deals with a device tree, presenting it as a list of Node and Prop
|
|
|
# objects, representing nodes and properties, respectively.
|
|
@@ -36,7 +42,7 @@ class Prop(PropBase):
|
|
|
"""
|
|
|
def __init__(self, node, offset, name, bytes):
|
|
|
PropBase.__init__(self, node, offset, name)
|
|
|
- self.bytes = bytes
|
|
|
+ self.bytes = str(bytes)
|
|
|
if not bytes:
|
|
|
self.type = fdt.TYPE_BOOL
|
|
|
self.value = True
|
|
@@ -86,7 +92,10 @@ class Node(NodeBase):
|
|
|
offset = libfdt.fdt_first_subnode(self._fdt.GetFdt(), self.Offset())
|
|
|
while offset >= 0:
|
|
|
sep = '' if self.path[-1] == '/' else '/'
|
|
|
- name = libfdt.Name(self._fdt.GetFdt(), offset)
|
|
|
+ if legacy:
|
|
|
+ name = libfdt.Name(self._fdt.GetFdt(), offset)
|
|
|
+ else:
|
|
|
+ name = self._fdt._fdt_obj.get_name(offset)
|
|
|
path = self.path + sep + name
|
|
|
node = Node(self._fdt, offset, name, path)
|
|
|
self.subnodes.append(node)
|
|
@@ -139,6 +148,8 @@ class FdtNormal(Fdt):
|
|
|
|
|
|
with open(self._fname) as fd:
|
|
|
self._fdt = bytearray(fd.read())
|
|
|
+ if not legacy:
|
|
|
+ self._fdt_obj = libfdt.Fdt(self._fdt)
|
|
|
|
|
|
def GetFdt(self):
|
|
|
"""Get the contents of the FDT
|
|
@@ -175,12 +186,18 @@ class FdtNormal(Fdt):
|
|
|
props_dict = {}
|
|
|
poffset = libfdt.fdt_first_property_offset(self._fdt, node._offset)
|
|
|
while poffset >= 0:
|
|
|
- dprop, plen = libfdt.fdt_get_property_by_offset(self._fdt, poffset)
|
|
|
- prop = Prop(node, poffset, libfdt.String(self._fdt, dprop.nameoff),
|
|
|
- libfdt.Data(dprop))
|
|
|
- props_dict[prop.name] = prop
|
|
|
-
|
|
|
- poffset = libfdt.fdt_next_property_offset(self._fdt, poffset)
|
|
|
+ if legacy:
|
|
|
+ dprop, plen = libfdt.fdt_get_property_by_offset(self._fdt,
|
|
|
+ poffset)
|
|
|
+ prop = Prop(node, poffset,
|
|
|
+ libfdt.String(self._fdt, dprop.nameoff),
|
|
|
+ libfdt.Data(dprop))
|
|
|
+ else:
|
|
|
+ p = self._fdt_obj.get_property_by_offset(poffset)
|
|
|
+ prop = Prop(node, poffset, p.name, p.value)
|
|
|
+ props_dict[prop.name] = prop
|
|
|
+
|
|
|
+ poffset = libfdt.fdt_next_property_offset(self._fdt, poffset)
|
|
|
return props_dict
|
|
|
|
|
|
def Invalidate(self):
|