summaryrefslogtreecommitdiff
path: root/tools/binman
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2019-08-24 16:22:44 +0300
committerSimon Glass <sjg@chromium.org>2019-10-15 17:40:02 +0300
commit8dbb7444ebaa499b753269c88cdd76f12f0fa875 (patch)
treea0686156cbdc102690cc019b5c7c5b3057a3a4cb /tools/binman
parentb986b3bb192f772a7c81c69aafe59094df7d4b81 (diff)
downloadu-boot-8dbb7444ebaa499b753269c88cdd76f12f0fa875.tar.xz
binman: Allow use of help and entry-docs without libfdt
At present if libfdt is not available binman can't do anything much. Improve the situation a little. Ideally there should be a test to cover this, but I'm not quite sure how to fake this. Signed-off-by: Simon Glass <sjg@chromium.org> (fixed up missing ReadChildData() enty test)
Diffstat (limited to 'tools/binman')
-rw-r--r--tools/binman/control.py12
-rw-r--r--tools/binman/entry.py5
-rw-r--r--tools/binman/entry_test.py5
-rw-r--r--tools/binman/etype/blob.py1
-rw-r--r--tools/binman/etype/blob_dtb.py6
-rw-r--r--tools/binman/etype/cbfs.py5
-rw-r--r--tools/binman/etype/fdtmap.py13
-rw-r--r--tools/binman/etype/files.py5
-rw-r--r--tools/binman/etype/u_boot_dtb_with_ucode.py5
9 files changed, 44 insertions, 13 deletions
diff --git a/tools/binman/control.py b/tools/binman/control.py
index cb51bc2dd4..8268eda37e 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -15,8 +15,6 @@ import tools
import cbfs_util
import command
import elf
-from image import Image
-import state
import tout
# List of images we plan to create
@@ -113,6 +111,9 @@ def ReadEntry(image_fname, entry_path, decomp=True):
Returns:
data extracted from the entry
"""
+ global Image
+ from image import Image
+
image = Image.FromFile(image_fname)
entry = image.FindEntryPath(entry_path)
return entry.ReadData(decomp)
@@ -459,6 +460,9 @@ def Binman(args):
Args:
args: Command line arguments Namespace object
"""
+ global Image
+ global state
+
if args.full_help:
pager = os.getenv('PAGER')
if not pager:
@@ -468,6 +472,10 @@ def Binman(args):
command.Run(pager, fname)
return 0
+ # Put these here so that we can import this module without libfdt
+ from image import Image
+ import state
+
if args.cmd in ['ls', 'extract', 'replace']:
try:
tout.Init(args.verbosity)
diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index fe8e1dd8a5..409c0dca93 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -21,7 +21,6 @@ import os
import sys
import fdt_util
-import state
import tools
from tools import ToHex, ToHexSize
import tout
@@ -71,6 +70,10 @@ class Entry(object):
orig_size: Original size value read from node
"""
def __init__(self, section, etype, node, name_prefix=''):
+ # Put this here to allow entry-docs and help to work without libfdt
+ global state
+ import state
+
self.section = section
self.etype = etype
self._node = node
diff --git a/tools/binman/entry_test.py b/tools/binman/entry_test.py
index cc1fb795da..13f5864516 100644
--- a/tools/binman/entry_test.py
+++ b/tools/binman/entry_test.py
@@ -97,6 +97,11 @@ class TestEntry(unittest.TestCase):
base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
self.assertTrue(base.WriteChildData(base))
+ def testReadChildData(self):
+ """Test the ReadChildData() method of the base class"""
+ base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
+ self.assertIsNone(base.ReadChildData(base))
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/etype/blob.py b/tools/binman/etype/blob.py
index d15d0789e5..d34c7b51bf 100644
--- a/tools/binman/etype/blob.py
+++ b/tools/binman/etype/blob.py
@@ -7,7 +7,6 @@
from entry import Entry
import fdt_util
-import state
import tools
import tout
diff --git a/tools/binman/etype/blob_dtb.py b/tools/binman/etype/blob_dtb.py
index 5b559967d7..b2afa064c1 100644
--- a/tools/binman/etype/blob_dtb.py
+++ b/tools/binman/etype/blob_dtb.py
@@ -5,8 +5,6 @@
# Entry-type module for U-Boot device tree files
#
-import state
-
from entry import Entry
from blob import Entry_blob
@@ -18,6 +16,10 @@ class Entry_blob_dtb(Entry_blob):
'state' module.
"""
def __init__(self, section, etype, node):
+ # Put this here to allow entry-docs and help to work without libfdt
+ global state
+ import state
+
Entry_blob.__init__(self, section, etype, node)
def ObtainContents(self):
diff --git a/tools/binman/etype/cbfs.py b/tools/binman/etype/cbfs.py
index 28a9c81a8a..35b78370b2 100644
--- a/tools/binman/etype/cbfs.py
+++ b/tools/binman/etype/cbfs.py
@@ -11,7 +11,6 @@ import cbfs_util
from cbfs_util import CbfsWriter
from entry import Entry
import fdt_util
-import state
class Entry_cbfs(Entry):
"""Entry containing a Coreboot Filesystem (CBFS)
@@ -164,6 +163,10 @@ class Entry_cbfs(Entry):
both of size 1MB.
"""
def __init__(self, section, etype, node):
+ # Put this here to allow entry-docs and help to work without libfdt
+ global state
+ import state
+
Entry.__init__(self, section, etype, node)
self._cbfs_arg = fdt_util.GetString(node, 'cbfs-arch', 'x86')
self._cbfs_entries = OrderedDict()
diff --git a/tools/binman/etype/fdtmap.py b/tools/binman/etype/fdtmap.py
index b1810b9ddb..5dc08b8289 100644
--- a/tools/binman/etype/fdtmap.py
+++ b/tools/binman/etype/fdtmap.py
@@ -8,11 +8,7 @@ This handles putting an FDT into the image with just the information about the
image.
"""
-import libfdt
-
from entry import Entry
-from fdt import Fdt
-import state
import tools
import tout
@@ -80,6 +76,15 @@ class Entry_fdtmap(Entry):
added as necessary. See the binman README.
"""
def __init__(self, section, etype, node):
+ # Put these here to allow entry-docs and help to work without libfdt
+ global libfdt
+ global state
+ global Fdt
+
+ import libfdt
+ import state
+ from fdt import Fdt
+
Entry.__init__(self, section, etype, node)
def _GetFdtmap(self):
diff --git a/tools/binman/etype/files.py b/tools/binman/etype/files.py
index 0068b305f7..3473a2b1ef 100644
--- a/tools/binman/etype/files.py
+++ b/tools/binman/etype/files.py
@@ -11,7 +11,6 @@ import os
from section import Entry_section
import fdt_util
-import state
import tools
@@ -29,6 +28,10 @@ class Entry_files(Entry_section):
at run-time so you can obtain the file positions.
"""
def __init__(self, section, etype, node):
+ # Put this here to allow entry-docs and help to work without libfdt
+ global state
+ import state
+
Entry_section.__init__(self, section, etype, node)
self._pattern = fdt_util.GetString(self._node, 'pattern')
if not self._pattern:
diff --git a/tools/binman/etype/u_boot_dtb_with_ucode.py b/tools/binman/etype/u_boot_dtb_with_ucode.py
index cb6c3730d7..6efd24a9b3 100644
--- a/tools/binman/etype/u_boot_dtb_with_ucode.py
+++ b/tools/binman/etype/u_boot_dtb_with_ucode.py
@@ -7,7 +7,6 @@
from entry import Entry
from blob_dtb import Entry_blob_dtb
-import state
import tools
class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
@@ -25,6 +24,10 @@ class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
it available to u_boot_ucode.
"""
def __init__(self, section, etype, node):
+ # Put this here to allow entry-docs and help to work without libfdt
+ global state
+ import state
+
Entry_blob_dtb.__init__(self, section, etype, node)
self.ucode_data = b''
self.collate = False