dtoc: Support packing the device tree

After any node/property deletion the device tree can be packed to remove
spare space. Add a way to perform this operation.

Note that for fdt_fallback, fdtput automatically packs the device tree after
deletion, so no action is required here.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2016-07-25 18:59:15 -06:00
parent 2a70d897ed
commit da5f74998b
3 changed files with 28 additions and 0 deletions

View File

@ -107,3 +107,4 @@ int fdt_next_subnode(const void *fdt, int offset);
int fdt_delprop(void *fdt, int nodeoffset, const char *name);
const char *fdt_strerror(int errval);
int fdt_pack(void *fdt);

View File

@ -240,3 +240,19 @@ class Fdt:
return None
return node
def Flush(self):
"""Flush device tree changes back to the file
If the device tree has changed in memory, write it back to the file.
Subclasses can implement this if needed.
"""
pass
def Pack(self):
"""Pack the device tree down to its minimum size
When nodes and properties shrink or are deleted, wasted space can
build up in the device tree binary. Subclasses can implement this
to remove that spare space.
"""
pass

View File

@ -140,6 +140,17 @@ class FdtNormal(Fdt):
"""
return self._fdt
def Flush(self):
"""Flush device tree changes back to the file"""
with open(self._fname, 'wb') as fd:
fd.write(self._fdt)
def Pack(self):
"""Pack the device tree down to its minimum size"""
CheckErr(libfdt.fdt_pack(self._fdt), 'pack')
fdt_len = libfdt.fdt_totalsize(self._fdt)
del self._fdt[fdt_len:]
def GetProps(self, node, path):
"""Get all properties from a node.