[PATCH 4/6] scripts: Create a common settings file for QEMU scripts

Simon Glass sjg at chromium.org
Sun May 11 16:18:19 CEST 2025


Move the settings into a common file so they can be used by all tools.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 scripts/build-efi       | 53 ++++-----------------------------
 scripts/build_helper.py | 65 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 47 deletions(-)

diff --git a/scripts/build-efi b/scripts/build-efi
index a2b5540ad29..2f4b916c49b 100755
--- a/scripts/build-efi
+++ b/scripts/build-efi
@@ -16,7 +16,6 @@ Use ~/.build-efi to configure the various paths used by this script.
 """
 
 from argparse import ArgumentParser
-import configparser
 import os
 import shutil
 
@@ -63,55 +62,15 @@ def parse_args():
     return args
 
 
-def get_settings():
-    """Get settings from the settings file
-
-    Return:
-        ConfigParser containing settings
-    """
-    settings = configparser.ConfigParser()
-    fname = f'{os.getenv("HOME")}/.build-efi'
-    if not os.path.exists(fname):
-        print('No config file found ~/.build-efi\nCreating one...\n')
-        tools.write_file(fname, '''[build-efi]
-# Mount path for the temporary image
-mount_point = /mnt/test-efi
-
-# Image-output filename
-image_file = try.img
-
-# Set ubdir to the build directory where you build U-Boot out-of-tree
-# We avoid in-tree build because it gets confusing trying different builds
-build_dir = /tmp/b
-
-# Build the kernel with: make O=/tmp/kernel
-bzimage = /tmp/kernel/arch/x86/boot/bzImage
-
-# Place where OVMF-pure-efi.i386.fd etc. are kept
-efi_dir = .
-''', binary=False)
-    settings.read(fname)
-    return settings
-
-
 class BuildEfi:
     """Class to collect together the various bits of state while running"""
-    def __init__(self, settings, args):
+    def __init__(self, args):
         self.helper = Helper()
-        self.settings = settings
-        self.img = self.get_setting('image_file', 'try.img')
-        self.build_dir = self.get_setting("build_dir", '/tmp')
+        self.helper.read_settings()
+        self.img = self.helper.get_setting('efi_image_file', 'efi.img')
+        self.build_dir = self.helper.get_setting("build_dir", '/tmp')
         self.args = args
 
-    def get_setting(self, name, fallback=None):
-        """Get a setting by name
-
-        Args:
-            name (str): Name of setting to retrieve
-            fallback (str or None): Value to return if the setting is missing
-        """
-        return self.settings.get('build-efi', name, fallback=fallback)
-
     def run_qemu(self, bitness, serial_only):
         """Run QEMU
 
@@ -120,7 +79,7 @@ class BuildEfi:
             serial_only (bool): True to run without a display
         """
         extra = []
-        efi_dir = self.get_setting("efi_dir")
+        efi_dir = self.helper.get_setting('efi_dir')
         if self.args.arm:
             qemu_arch = 'aarch64'
             extra += ['--machine', 'virt', '-cpu', 'max']
@@ -210,5 +169,5 @@ class BuildEfi:
 
 
 if __name__ == "__main__":
-    efi = BuildEfi(get_settings(), parse_args())
+    efi = BuildEfi(parse_args())
     efi.start()
diff --git a/scripts/build_helper.py b/scripts/build_helper.py
index 15177a48e80..923270c95c7 100644
--- a/scripts/build_helper.py
+++ b/scripts/build_helper.py
@@ -4,6 +4,7 @@
 
 """
 
+import configparser
 import contextlib
 import os
 import shutil
@@ -28,6 +29,70 @@ class Helper:
     def __init__(self):
         self.settings = None
 
+    def read_settings(self):
+        """Get settings from the settings file"""
+        self.settings = configparser.ConfigParser()
+        fname = f'{os.getenv("HOME")}/.u_boot_qemu'
+        if not os.path.exists(fname):
+            print('No config file found: {fname}\nCreating one...\n')
+            tools.write_file(fname, '''# U-Boot QEMU-scripts config
+
+[DEFAULT]
+# Image-output filename
+image_file = try.img
+
+# Image directory (for prebuilt UEFI-images)
+image_dir = ~/dev/uefi
+
+# Set ubdir to the build directory where you build U-Boot out-of-tree
+# We avoid in-tree build because it gets confusing trying different builds
+build_dir = /tmp/b
+
+# Build the kernel with: make O=/tmp/kernel
+bzimage = /tmp/kernel/arch/x86/boot/bzImage
+
+# Directory where OVMF-pure-efi.i386.fd etc. are kept
+efi_dir = ~/dev/efi
+
+# Directory where SCT image (sct.img) is kept
+sct_dir = ~/dev/efi/sct
+
+# Directory where the SCT image is temporarily mounted for modification
+sct_mnt = /mnt/sct
+
+# Directory containing Tianocore builds (e.g. OVMF-pure-efi.x64.fd)
+tianocore_dir = ~/dev/efi/tianocore
+
+''', binary=False)
+        self.settings.read(fname)
+
+    def get_setting(self, name, fallback=None):
+        """Get a setting by name
+
+        Args:
+            name (str): Name of setting to retrieve
+            fallback (str or None): Value to return if the setting is missing
+        """
+        raw = self.settings.get('DEFAULT', name, fallback=fallback)
+        return os.path.expandvars(os.path.expanduser(raw))
+
+    def stage(self, name):
+        """Context manager to count requests across a range of patchwork calls
+
+        Args:
+            name (str): Stage name
+
+        Return:
+            _Stage: contect object
+
+        Usage:
+            with self.stage('name'):
+                ...do things
+
+            Note that the output only appears if the -N flag is used
+        """
+        return self._Stage(name)
+
     @contextlib.contextmanager
     def make_disk(self, fname, size_mb=20, fs_type='ext4', use_part=False):
         """Create a raw disk image with files on it
-- 
2.43.0



More information about the U-Boot mailing list