[PATCH 10/12] binman: btool: Add Xilinx Bootgen btool

lukas.funke-oss at weidmueller.com lukas.funke-oss at weidmueller.com
Thu Jun 29 16:59:23 CEST 2023


From: Lukas Funke <lukas.funke at weidmueller.com>

Add the Xilinx Bootgen as bintool. Xilinx Bootgen is used to create
bootable SPL (FSBL in Xilinx terms) images for Zynq/ZynqMP devices. The
btool creates a signed version of the SPL.

Signed-off-by: Lukas Funke <lukas.funke at weidmueller.com>
---

 tools/binman/btool/bootgen.py | 82 +++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 tools/binman/btool/bootgen.py

diff --git a/tools/binman/btool/bootgen.py b/tools/binman/btool/bootgen.py
new file mode 100644
index 0000000000..8bc727a54f
--- /dev/null
+++ b/tools/binman/btool/bootgen.py
@@ -0,0 +1,82 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2023 Weidmüller Interface GmbH & Co. KG
+# Lukas Funke <lukas.funke at weidmueller.com>
+#
+"""Bintool implementation for bootgen
+
+bootgen allows creating bootable SPL for Zynq(MP)
+
+Documentation is available via::
+https://www.xilinx.com/support/documents/sw_manuals/xilinx2022_1/ug1283-bootgen-user-guide.pdf
+
+Source code is available at:
+
+https://github.com/Xilinx/bootgen
+
+"""
+import tempfile
+
+from binman import bintool
+from u_boot_pylib import tools
+
+# pylint: disable=C0103
+class Bintoolbootgen(bintool.Bintool):
+    """Generate bootable fsbl image for zynq/zynqmp
+
+    This bintools supports running Xilinx "bootgen" in order
+    to generate a bootable, authenticated image form an SPL.
+
+    """
+    def __init__(self, name):
+        super().__init__(name, 'Xilinx Bootgen',
+                         version_regex=r'^\*\*\*\*\*\* Xilinx Bootgen',
+                         version_args='')
+
+    # pylint: disable=R0913
+    def sign(self, arch, spl_elf_fname, pmufw_elf_fname,
+             psk_fname, ssk_fname, fsbl_config, auth_params, output_fname):
+        """ Sign FSBL(SPL) elf file and bundle it with pmu firmware
+            to a bootable image
+
+        Args:
+            arch (str): Xilinx SoC architecture
+            spl_elf_fname (str): Filename of FSBL ELF file
+            pmufw_elf_fname (str): Filename pmu firmware
+            psk_fname (str): Filename of the primary secret key
+            ssk_fname (str): Filename of the secondary secret key
+            fsbl_config (str): FSBL config options
+            auth_params (str): Authentication parameter
+            output_fname (str): Filename where bootgen should write the result
+        """
+
+        _fsbl_config = f"[fsbl_config] {fsbl_config}" if fsbl_config else ""
+        _auth_params = f"[auth_params] {auth_params}" if auth_params else ""
+
+        bif_template = f"""u_boot_spl_aes_rsa: {{
+            [pskfile] {psk_fname}
+            [sskfile] {ssk_fname}
+            {_fsbl_config}
+            {_auth_params}
+            [ bootloader,
+              authentication = rsa,
+              destination_cpu=a53-0] {spl_elf_fname}
+            [pmufw_image] {pmufw_elf_fname}
+        }}"""
+        args = ["-arch", arch]
+
+        with tempfile.NamedTemporaryFile(suffix=".bif",
+                                         dir=tools.get_output_dir()) as bif:
+            tools.write_file(bif.name, bif_template, binary=False)
+            args += ["-image", bif.name, '-w', '-o', output_fname]
+            self.run_cmd(*args)
+
+    def fetch(self, method):
+        """Fetch bootgen from git"""
+        if method != bintool.FETCH_BUILD:
+            return None
+
+        result = self.build_from_git(
+            'https://github.com/Xilinx/bootgen',
+            'all',
+            'build/bootgen/bootgen')
+        return result
-- 
2.30.2



More information about the U-Boot mailing list