diff options
| author | Khasim Mohammed <khasim.mohammed@arm.com> | 2020-07-23 15:21:50 +0530 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-07-25 15:11:05 +0100 |
| commit | 801f07fc00d43d107cb6ae671dbbb57ee91cc6be (patch) | |
| tree | 5df8e2218530d1e1940d499fb14903f4d97716c1 /scripts/lib | |
| parent | 3439ad86168937edfb90120f1e9c86886f03bd71 (diff) | |
| download | poky-801f07fc00d43d107cb6ae671dbbb57ee91cc6be.tar.gz | |
wic/bootimg-efi: Add support for IMAGE_BOOT_FILES
List of files defined using IMAGE_BOOT_FILES are installed into
the boot partition when preparing an image using the wic tool with
the bootimg-efi source plugin.
The code snippet introduced is taken as is from bootimg-partition.py
Change-Id: I8dbb6b4e7c24870f587a6f31e6ae4a87d7033782
Issue-Id: PLATFORMS-3134
(From OE-Core rev: a44ab3a4ee5b3c57812909c6194456f299d6ba7f)
Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib')
| -rw-r--r-- | scripts/lib/wic/plugins/source/bootimg-efi.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py index 2cfdc10ecd..14c1723577 100644 --- a/scripts/lib/wic/plugins/source/bootimg-efi.py +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py | |||
| @@ -13,6 +13,9 @@ | |||
| 13 | import logging | 13 | import logging |
| 14 | import os | 14 | import os |
| 15 | import shutil | 15 | import shutil |
| 16 | import re | ||
| 17 | |||
| 18 | from glob import glob | ||
| 16 | 19 | ||
| 17 | from wic import WicError | 20 | from wic import WicError |
| 18 | from wic.engine import get_custom_config | 21 | from wic.engine import get_custom_config |
| @@ -209,6 +212,57 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 209 | except KeyError: | 212 | except KeyError: |
| 210 | raise WicError("bootimg-efi requires a loader, none specified") | 213 | raise WicError("bootimg-efi requires a loader, none specified") |
| 211 | 214 | ||
| 215 | if get_bitbake_var("IMAGE_BOOT_FILES") is None: | ||
| 216 | logger.debug('No boot files defined in IMAGE_BOOT_FILES') | ||
| 217 | else: | ||
| 218 | boot_files = None | ||
| 219 | for (fmt, id) in (("_uuid-%s", part.uuid), ("_label-%s", part.label), (None, None)): | ||
| 220 | if fmt: | ||
| 221 | var = fmt % id | ||
| 222 | else: | ||
| 223 | var = "" | ||
| 224 | |||
| 225 | boot_files = get_bitbake_var("IMAGE_BOOT_FILES" + var) | ||
| 226 | if boot_files: | ||
| 227 | break | ||
| 228 | |||
| 229 | logger.debug('Boot files: %s', boot_files) | ||
| 230 | |||
| 231 | # list of tuples (src_name, dst_name) | ||
| 232 | deploy_files = [] | ||
| 233 | for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files): | ||
| 234 | if ';' in src_entry: | ||
| 235 | dst_entry = tuple(src_entry.split(';')) | ||
| 236 | if not dst_entry[0] or not dst_entry[1]: | ||
| 237 | raise WicError('Malformed boot file entry: %s' % src_entry) | ||
| 238 | else: | ||
| 239 | dst_entry = (src_entry, src_entry) | ||
| 240 | |||
| 241 | logger.debug('Destination entry: %r', dst_entry) | ||
| 242 | deploy_files.append(dst_entry) | ||
| 243 | |||
| 244 | cls.install_task = []; | ||
| 245 | for deploy_entry in deploy_files: | ||
| 246 | src, dst = deploy_entry | ||
| 247 | if '*' in src: | ||
| 248 | # by default install files under their basename | ||
| 249 | entry_name_fn = os.path.basename | ||
| 250 | if dst != src: | ||
| 251 | # unless a target name was given, then treat name | ||
| 252 | # as a directory and append a basename | ||
| 253 | entry_name_fn = lambda name: \ | ||
| 254 | os.path.join(dst, | ||
| 255 | os.path.basename(name)) | ||
| 256 | |||
| 257 | srcs = glob(os.path.join(kernel_dir, src)) | ||
| 258 | |||
| 259 | logger.debug('Globbed sources: %s', ', '.join(srcs)) | ||
| 260 | for entry in srcs: | ||
| 261 | src = os.path.relpath(entry, kernel_dir) | ||
| 262 | entry_dst_name = entry_name_fn(entry) | ||
| 263 | cls.install_task.append((src, entry_dst_name)) | ||
| 264 | else: | ||
| 265 | cls.install_task.append((src, dst)) | ||
| 212 | 266 | ||
| 213 | @classmethod | 267 | @classmethod |
| 214 | def do_prepare_partition(cls, part, source_params, creator, cr_workdir, | 268 | def do_prepare_partition(cls, part, source_params, creator, cr_workdir, |
| @@ -238,6 +292,12 @@ class BootimgEFIPlugin(SourcePlugin): | |||
| 238 | (staging_kernel_dir, kernel, hdddir, kernel) | 292 | (staging_kernel_dir, kernel, hdddir, kernel) |
| 239 | exec_cmd(install_cmd) | 293 | exec_cmd(install_cmd) |
| 240 | 294 | ||
| 295 | if get_bitbake_var("IMAGE_BOOT_FILES"): | ||
| 296 | for src_path, dst_path in cls.install_task: | ||
| 297 | install_cmd = "install -m 0644 -D %s %s" \ | ||
| 298 | % (os.path.join(kernel_dir, src_path), | ||
| 299 | os.path.join(hdddir, dst_path)) | ||
| 300 | exec_cmd(install_cmd) | ||
| 241 | 301 | ||
| 242 | try: | 302 | try: |
| 243 | if source_params['loader'] == 'grub-efi': | 303 | if source_params['loader'] == 'grub-efi': |
