[PATCH 2/5] binman: Add basic 'file_size' and 'int32' entry types

Piotr Wojtaszczyk piotr.wojtaszczyk at timesys.com
Fri Jan 26 10:25:29 CET 2024


Entry 'int32' type can inject arbitrary 32bit integer value into a firmware
file. Entry 'file_size' type can inject file size as 32bit integer value into a
firmware file.
Both entries are helpful when a boot ROM requires magic value and/or
firmware length in header.

Signed-off-by: Piotr Wojtaszczyk <piotr.wojtaszczyk at timesys.com>
---

 tools/binman/entries.rst        | 25 +++++++++++++++++++++++++
 tools/binman/etype/file_size.py | 28 ++++++++++++++++++++++++++++
 tools/binman/etype/int32.py     | 24 ++++++++++++++++++++++++
 3 files changed, 77 insertions(+)
 create mode 100644 tools/binman/etype/file_size.py
 create mode 100644 tools/binman/etype/int32.py

diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
index 254afe7607..7696ea7023 100644
--- a/tools/binman/entries.rst
+++ b/tools/binman/entries.rst
@@ -712,6 +712,18 @@ without the fdtmap header, so it can be viewed with `fdtdump`.
 
 
 
+.. _etype_file_size:
+
+Entry: file_size: Size of a file as 32bit integer
+--------------------------------------------------
+
+Properties / Entry arguments:
+    - filename: relative file path
+
+This entry reads file size and places it as 32bit integer.
+
+
+
 .. _etype_files:
 
 Entry: files: A set of files arranged in a section
@@ -1138,6 +1150,19 @@ first/last in the entry list.
 
 
 
+.. _etype_int32:
+
+Entry: int32: Arbitrary 32bit integer
+--------------------------------------------------
+
+Properties / Entry arguments:
+    - value: 32bit integer value
+
+This entry places arbitrary 32bit integer. Useful when a magic value is
+required in a firmware.
+
+
+
 .. _etype_intel_cmc:
 
 Entry: intel-cmc: Intel Chipset Micro Code (CMC) file
diff --git a/tools/binman/etype/file_size.py b/tools/binman/etype/file_size.py
new file mode 100644
index 0000000000..d99ca1c067
--- /dev/null
+++ b/tools/binman/etype/file_size.py
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright 2023 Timesys
+# Written by Piotr Wojtaszczyk <piotr.wojtaszczyk at timesys.com>
+#
+
+from binman.entry import Entry
+from dtoc import fdt_util
+from u_boot_pylib import tools
+import sys
+
+class Entry_file_size(Entry):
+    """An entry which is filled size of a file
+
+    Properties / Entry arguments:
+        - file: path to the file
+
+    Useful where a firmware header needs length of the firmware.
+    """
+    def __init__(self, section, etype, node):
+        super().__init__(section, etype, node)
+        self._filename = fdt_util.GetString(self._node, 'filename', self.etype)
+
+    def ObtainContents(self):
+        self._pathname = tools.get_input_filename(self._filename,
+            self.external and self.section.GetAllowMissing())
+        self._file_size = len(tools.read_file(self._pathname))
+        self.SetContents(self._file_size.to_bytes(4, sys.byteorder))
+        return True
diff --git a/tools/binman/etype/int32.py b/tools/binman/etype/int32.py
new file mode 100644
index 0000000000..463dfe46fd
--- /dev/null
+++ b/tools/binman/etype/int32.py
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright 2023 Timesys
+# Written by Piotr Wojtaszczyk <piotr.wojtaszczyk at timesys.com>
+#
+
+from binman.entry import Entry
+from dtoc import fdt_util
+import sys
+
+class Entry_int32(Entry):
+    """An entry which is filled with arbitrary int32 data
+
+    Properties / Entry arguments:
+        - value: int32 value
+
+    Useful where a magic header is needed.
+    """
+    def __init__(self, section, etype, node):
+        super().__init__(section, etype, node)
+        self._int32_value = fdt_util.GetInt(self._node, 'value', 0)
+
+    def ObtainContents(self):
+        self.SetContents(self._int32_value.to_bytes(4, sys.byteorder))
+        return True
-- 
2.25.1



More information about the U-Boot mailing list