summaryrefslogtreecommitdiffstats
path: root/scripts/lib
diff options
context:
space:
mode:
authorKhasim Mohammed <khasim.mohammed@arm.com>2020-07-23 15:21:50 +0530
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-07-25 15:11:05 +0100
commit801f07fc00d43d107cb6ae671dbbb57ee91cc6be (patch)
tree5df8e2218530d1e1940d499fb14903f4d97716c1 /scripts/lib
parent3439ad86168937edfb90120f1e9c86886f03bd71 (diff)
downloadpoky-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.py60
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 @@
13import logging 13import logging
14import os 14import os
15import shutil 15import shutil
16import re
17
18from glob import glob
16 19
17from wic import WicError 20from wic import WicError
18from wic.engine import get_custom_config 21from 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':