diff options
Diffstat (limited to 'scripts/lib/wic/plugins/source/bootimg-efi.py')
| -rw-r--r-- | scripts/lib/wic/plugins/source/bootimg-efi.py | 38 |
1 files 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 57e79f4516..634a808d78 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): | |||
| 35 | name = 'bootimg-efi' | 35 | name = 'bootimg-efi' |
| 36 | 36 | ||
| 37 | @classmethod | 37 | @classmethod |
| 38 | def _copy_additional_files(cls, hdddir, initrd): | 38 | def _copy_additional_files(cls, hdddir, initrd, dtb): |
| 39 | if initrd: | 39 | bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE") |
| 40 | bootimg_dir = get_bitbake_var("DEPLOY_DIR_IMAGE") | 40 | if not bootimg_dir: |
| 41 | if not bootimg_dir: | 41 | raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting") |
| 42 | raise WicError("Couldn't find DEPLOY_DIR_IMAGE, exiting") | ||
| 43 | 42 | ||
| 43 | if initrd: | ||
| 44 | initrds = initrd.split(';') | 44 | initrds = initrd.split(';') |
| 45 | for rd in initrds: | 45 | for rd in initrds: |
| 46 | cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir) | 46 | cp_cmd = "cp %s/%s %s" % (bootimg_dir, rd, hdddir) |
| @@ -48,6 +48,12 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 48 | else: | 48 | else: |
| 49 | logger.debug("Ignoring missing initrd") | 49 | logger.debug("Ignoring missing initrd") |
| 50 | 50 | ||
| 51 | if dtb: | ||
| 52 | if ';' in dtb: | ||
| 53 | raise WicError("Only one DTB supported, exiting") | ||
| 54 | cp_cmd = "cp %s/%s %s" % (bootimg_dir, dtb, hdddir) | ||
| 55 | exec_cmd(cp_cmd, True) | ||
| 56 | |||
| 51 | @classmethod | 57 | @classmethod |
| 52 | def do_configure_grubefi(cls, hdddir, creator, cr_workdir, source_params): | 58 | def do_configure_grubefi(cls, hdddir, creator, cr_workdir, source_params): |
| 53 | """ | 59 | """ |
| @@ -67,8 +73,9 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 67 | "get it from %s." % configfile) | 73 | "get it from %s." % configfile) |
| 68 | 74 | ||
| 69 | initrd = source_params.get('initrd') | 75 | initrd = source_params.get('initrd') |
| 76 | dtb = source_params.get('dtb') | ||
| 70 | 77 | ||
| 71 | cls._copy_additional_files(hdddir, initrd) | 78 | cls._copy_additional_files(hdddir, initrd, dtb) |
| 72 | 79 | ||
| 73 | if not custom_cfg: | 80 | if not custom_cfg: |
| 74 | # Create grub configuration using parameters from wks file | 81 | # Create grub configuration using parameters from wks file |
| @@ -102,6 +109,9 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 102 | grubefi_conf += " /%s" % rd | 109 | grubefi_conf += " /%s" % rd |
| 103 | grubefi_conf += "\n" | 110 | grubefi_conf += "\n" |
| 104 | 111 | ||
| 112 | if dtb: | ||
| 113 | grubefi_conf += "devicetree /%s\n" % dtb | ||
| 114 | |||
| 105 | grubefi_conf += "}\n" | 115 | grubefi_conf += "}\n" |
| 106 | 116 | ||
| 107 | logger.debug("Writing grubefi config %s/hdd/boot/EFI/BOOT/grub.cfg", | 117 | logger.debug("Writing grubefi config %s/hdd/boot/EFI/BOOT/grub.cfg", |
| @@ -131,9 +141,10 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 131 | loader_conf += "timeout %d\n" % bootloader.timeout | 141 | loader_conf += "timeout %d\n" % bootloader.timeout |
| 132 | 142 | ||
| 133 | initrd = source_params.get('initrd') | 143 | initrd = source_params.get('initrd') |
| 144 | dtb = source_params.get('dtb') | ||
| 134 | 145 | ||
| 135 | if not unified_image: | 146 | if not unified_image: |
| 136 | cls._copy_additional_files(hdddir, initrd) | 147 | cls._copy_additional_files(hdddir, initrd, dtb) |
| 137 | 148 | ||
| 138 | logger.debug("Writing systemd-boot config " | 149 | logger.debug("Writing systemd-boot config " |
| 139 | "%s/hdd/boot/loader/loader.conf", cr_workdir) | 150 | "%s/hdd/boot/loader/loader.conf", cr_workdir) |
| @@ -181,6 +192,9 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 181 | for rd in initrds: | 192 | for rd in initrds: |
| 182 | boot_conf += "initrd /%s\n" % rd | 193 | boot_conf += "initrd /%s\n" % rd |
| 183 | 194 | ||
| 195 | if dtb: | ||
| 196 | boot_conf += "devicetree /%s\n" % dtb | ||
| 197 | |||
| 184 | if not unified_image: | 198 | if not unified_image: |
| 185 | logger.debug("Writing systemd-boot config " | 199 | logger.debug("Writing systemd-boot config " |
| 186 | "%s/hdd/boot/loader/entries/boot.conf", cr_workdir) | 200 | "%s/hdd/boot/loader/entries/boot.conf", cr_workdir) |
| @@ -316,6 +330,15 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 316 | shutil.copyfileobj(in_file, initrd) | 330 | shutil.copyfileobj(in_file, initrd) |
| 317 | initrd.close() | 331 | initrd.close() |
| 318 | 332 | ||
| 333 | dtb = source_params.get('dtb') | ||
| 334 | if dtb: | ||
| 335 | if ';' in dtb: | ||
| 336 | raise WicError("Only one DTB supported, exiting") | ||
| 337 | dtb_params = '--add-section .dtb=%s/%s --change-section-vma .dtb=0x40000' % \ | ||
| 338 | (deploy_dir, dtb) | ||
| 339 | else: | ||
| 340 | dtb_params = '' | ||
| 341 | |||
| 319 | # Searched by systemd-boot: | 342 | # Searched by systemd-boot: |
| 320 | # https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images | 343 | # https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images |
| 321 | install_cmd = "install -d %s/EFI/Linux" % hdddir | 344 | install_cmd = "install -d %s/EFI/Linux" % hdddir |
| @@ -330,6 +353,7 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 330 | objcopy_cmd += " --change-section-vma .osrel=0x20000" | 353 | objcopy_cmd += " --change-section-vma .osrel=0x20000" |
| 331 | objcopy_cmd += " --add-section .cmdline=%s" % cmdline.name | 354 | objcopy_cmd += " --add-section .cmdline=%s" % cmdline.name |
| 332 | objcopy_cmd += " --change-section-vma .cmdline=0x30000" | 355 | objcopy_cmd += " --change-section-vma .cmdline=0x30000" |
| 356 | objcopy_cmd += dtb_params | ||
| 333 | objcopy_cmd += " --add-section .linux=%s/%s" % (staging_kernel_dir, kernel) | 357 | objcopy_cmd += " --add-section .linux=%s/%s" % (staging_kernel_dir, kernel) |
| 334 | objcopy_cmd += " --change-section-vma .linux=0x2000000" | 358 | objcopy_cmd += " --change-section-vma .linux=0x2000000" |
| 335 | objcopy_cmd += " --add-section .initrd=%s" % initrd.name | 359 | objcopy_cmd += " --add-section .initrd=%s" % initrd.name |
