public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: isar-users <isar-users@googlegroups.com>
Cc: Henning Schild <henning.schild@siemens.com>
Subject: [PATCH 8/9] wic/bootimg-efi: Add support for loading devicetree files
Date: Fri,  5 Aug 2022 20:51:43 +0200	[thread overview]
Message-ID: <42c7286a2db556a136551963ba7ce6f2d8c48f4f.1659725504.git.jan.kiszka@siemens.com> (raw)
In-Reply-To: <cover.1659725504.git.jan.kiszka@siemens.com>

From: Jan Kiszka <jan.kiszka@siemens.com>

For device tree using systems, add support to set a custom devices tree
during UEFI boot. This requires to copy the DTB file to the boot
partition and to add the respective loader entries to the configuration
files.

Both grub and systemd-boot support only loading a specific device tree.
Therefore refuse to work if the 'dtb' parameter contains more than one
entry.

Out of scope for now are overlays (only supported by systemd-boot).

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
[Luca: rebased on commit 98e9d435b278 ("wic/bootimg-efi: use cross objcopy when building unified kernel image")]
---
 scripts/lib/wic/plugins/source/bootimg-efi.py | 38 +++++++++++++++----
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index 57e79f45..634a808d 100644
--- a/scripts/lib/wic/plugins/source/bootimg-efi.py
+++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
@@ -35,12 +35,12 @@ class BootimgEFIPlugin(SourcePlugin):
     name = 'bootimg-efi'
 
     @classmethod
-    def _copy_additional_files(cls, hdddir, initrd):
-        if initrd:
-            bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
-            if not bootimg_dir:
-                raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
+    def _copy_additional_files(cls, hdddir, initrd, dtb):
+        bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE")
+        if not bootimg_dir:
+            raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting")
 
+        if initrd:
             initrds = initrd.split(';')
             for rd in initrds:
                 cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir)
@@ -48,6 +48,12 @@ class BootimgEFIPlugin(SourcePlugin):
         else:
             logger.debug("Ignoring missing initrd")
 
+        if dtb:
+            if ';' in dtb:
+                raise WicError("Only one DTB supported, exiting")
+            cp_cmd = "cp %s/%s %s" % (bootimg_dir, dtb, hdddir)
+            exec_cmd(cp_cmd, True)
+
     @classmethod
     def do_configure_grubefi(cls, hdddir, creator, cr_workdir, source_params):
         """
@@ -67,8 +73,9 @@ class BootimgEFIPlugin(SourcePlugin):
                                "get it from %s." % configfile)
 
         initrd = source_params.get('initrd')
+        dtb = source_params.get('dtb')
 
-        cls._copy_additional_files(hdddir, initrd)
+        cls._copy_additional_files(hdddir, initrd, dtb)
 
         if not custom_cfg:
             # Create grub configuration using parameters from wks file
@@ -102,6 +109,9 @@ class BootimgEFIPlugin(SourcePlugin):
                     grubefi_conf += " /%s" % rd
                 grubefi_conf += "\n"
 
+            if dtb:
+                grubefi_conf += "devicetree /%s\n" % dtb
+
             grubefi_conf += "}\n"
 
         logger.debug("Writing grubefi config %s/hdd/boot/EFI/BOOT/grub.cfg",
@@ -131,9 +141,10 @@ class BootimgEFIPlugin(SourcePlugin):
         loader_conf += "timeout %d\n" % bootloader.timeout
 
         initrd = source_params.get('initrd')
+        dtb = source_params.get('dtb')
 
         if not unified_image:
-            cls._copy_additional_files(hdddir, initrd)
+            cls._copy_additional_files(hdddir, initrd, dtb)
 
         logger.debug("Writing systemd-boot config "
                      "%s/hdd/boot/loader/loader.conf", cr_workdir)
@@ -181,6 +192,9 @@ class BootimgEFIPlugin(SourcePlugin):
                 for rd in initrds:
                     boot_conf += "initrd /%s\n" % rd
 
+            if dtb:
+                boot_conf += "devicetree /%s\n" % dtb
+
         if not unified_image:
             logger.debug("Writing systemd-boot config "
                          "%s/hdd/boot/loader/entries/boot.conf", cr_workdir)
@@ -316,6 +330,15 @@ class BootimgEFIPlugin(SourcePlugin):
                         shutil.copyfileobj(in_file, initrd)
                 initrd.close()
 
+                dtb = source_params.get('dtb')
+                if dtb:
+                    if ';' in dtb:
+                        raise WicError("Only one DTB supported, exiting")
+                    dtb_params = '--add-section .dtb=%s/%s --change-section-vma .dtb=0x40000' % \
+                        (deploy_dir, dtb)
+                else:
+                    dtb_params = ''
+
                 # Searched by systemd-boot:
                 # https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images
                 install_cmd = "install -d %s/EFI/Linux" % hdddir
@@ -330,6 +353,7 @@ class BootimgEFIPlugin(SourcePlugin):
                 objcopy_cmd += " --change-section-vma .osrel=0x20000"
                 objcopy_cmd += " --add-section .cmdline=%s" % cmdline.name
                 objcopy_cmd += " --change-section-vma .cmdline=0x30000"
+                objcopy_cmd += dtb_params
                 objcopy_cmd += " --add-section .linux=%s/%s" % (staging_kernel_dir, kernel)
                 objcopy_cmd += " --change-section-vma .linux=0x2000000"
                 objcopy_cmd += " --add-section .initrd=%s" % initrd.name
-- 
2.35.3


  parent reply	other threads:[~2022-08-05 18:51 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-05 18:51 [PATCH 0/9] Update wic Jan Kiszka
2022-08-05 18:51 ` [PATCH 1/9] wic: added fspassno parameter to partition Jan Kiszka
2022-08-05 18:51 ` [PATCH 2/9] wic/plugins/images/direct: Allow changes in fstab on rootfs Jan Kiszka
2022-08-05 18:51 ` [PATCH 3/9] wic: fix WicError message Jan Kiszka
2022-08-05 18:51 ` [PATCH 4/9] wic/plugins/rootfs: Fix NameError for 'orig_path' Jan Kiszka
2022-08-05 18:51 ` [PATCH 5/9] wic: add target tools to PATH when executing native commands Jan Kiszka
2022-08-05 18:51 ` [PATCH 6/9] wic/bootimg-efi: use cross objcopy when building unified kernel image Jan Kiszka
2022-08-05 18:51 ` [PATCH 7/9] wic/bootimg-efi: Factor out some common bits Jan Kiszka
2022-08-05 18:51 ` Jan Kiszka [this message]
2022-08-05 18:51 ` [PATCH 9/9] wic: bootimg-efi-isar: Sync with latest upstream changes Jan Kiszka
2022-08-15  8:23 ` [PATCH 0/9] Update wic Anton Mikanovich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42c7286a2db556a136551963ba7ce6f2d8c48f4f.1659725504.git.jan.kiszka@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=henning.schild@siemens.com \
    --cc=isar-users@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox