[OE-core] [PATCH] wic: add UEFI kernel as UEFI stub
Paul Barker
paul at betafive.co.uk
Mon Jan 13 13:56:41 UTC 2020
On Sat, 4 Jan 2020, at 20:07, Maxim Uvarov wrote:
> Linux kernel can be compiled as UEFI stub and loaded directly
> with UEFI firmware without grub or other UEFI shell.
>
> Tested with wic file:
> bootloader --ptable gpt --timeout=0 --append="rootwait"
> part /boot --source bootimg-efi --sourceparams="loader=kernel" \
> --ondisk sda --fstype=vfat --label bootfs \
> --active --align 1024 --use-uuid
> part / --source rootfs --fstype=ext4 --label rootfs \
> --align 1024 --exclude-path boot/ --use-label
> The same wic file for armv7, armv8 and x86_64.
>
> Signed-off-by: Maxim Uvarov <maxim.uvarov at linaro.org>
> ---
> scripts/lib/wic/plugins/source/bootimg-efi.py | 27 +++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py
> b/scripts/lib/wic/plugins/source/bootimg-efi.py
> index 2cfdc10ecd..a39d852f6a 100644
> --- a/scripts/lib/wic/plugins/source/bootimg-efi.py
> +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
> @@ -13,6 +13,7 @@
> import logging
> import os
> import shutil
> +import re
>
> from wic import WicError
> from wic.engine import get_custom_config
> @@ -204,6 +205,8 @@ class BootimgEFIPlugin(SourcePlugin):
> cls.do_configure_grubefi(hdddir, creator, cr_workdir,
> source_params)
> elif source_params['loader'] == 'systemd-boot':
> cls.do_configure_systemdboot(hdddir, creator,
> cr_workdir, source_params)
> + elif source_params['loader'] == 'kernel':
> + return
> else:
> raise WicError("unrecognized bootimg-efi loader: %s" %
> source_params['loader'])
> except KeyError:
> @@ -243,6 +246,7 @@ class BootimgEFIPlugin(SourcePlugin):
> if source_params['loader'] == 'grub-efi':
> shutil.copyfile("%s/hdd/boot/EFI/BOOT/grub.cfg" %
> cr_workdir,
> "%s/grub.cfg" % cr_workdir)
> +
> for mod in [x for x in os.listdir(kernel_dir) if
> x.startswith("grub-efi-")]:
> cp_cmd = "cp %s/%s %s/EFI/BOOT/%s" % (kernel_dir,
> mod, hdddir, mod[9:])
> exec_cmd(cp_cmd, True)
> @@ -252,6 +256,29 @@ class BootimgEFIPlugin(SourcePlugin):
> for mod in [x for x in os.listdir(kernel_dir) if
> x.startswith("systemd-")]:
> cp_cmd = "cp %s/%s %s/EFI/BOOT/%s" % (kernel_dir,
> mod, hdddir, mod[8:])
> exec_cmd(cp_cmd, True)
> + elif source_params['loader'] == 'kernel':
How about "uefi-stub" instead of just "kernel" here so it's more explicit?
> + kernel = get_bitbake_var("KERNEL_IMAGETYPE")
> + if not kernel:
> + raise WicError("Empty KERNEL_IMAGETYPE %s\n" %
> target)
> + target = get_bitbake_var("TARGET_SYS")
> + if not target:
> + raise WicError("Unknown arch (TARGET_SYS) %s\n" %
> target)
> +
> + if re.match("x86_64", target):
> + kernel_efi_image = "bootx64.efi"
> + elif re.match('i.86', target):
> + kernel_efi_image = "bootia32.efi"
> + elif re.match('aarch64', target):
> + kernel_efi_image = "bootaa64.efi"
> + elif re.match('arm', target):
> + kernel_efi_image = "bootarm.efi"
> + else:
> + raise WicError("kernel efi is incompatible with
> target %s" % target)
Perhaps call this "UEFI stub kernel" instead of just "kernel efi" to make things clearer.
> +
> + for mod in [x for x in os.listdir(kernel_dir) if
> x.startswith(kernel)]:
> + cp_cmd = "cp %s/%s %s/EFI/BOOT/%s" % (kernel_dir,
> mod, hdddir, kernel_efi_image)
> + WicError("cp_cmd = %s" % cp_cmd);
What's this WicError created here for?
> + exec_cmd(cp_cmd, True)
Wouldn't this result in the destination file being overwritten each time through this loop? I guess you're just copying from the grub-efi implementation above though.
> else:
> raise WicError("unrecognized bootimg-efi loader: %s" %
> source_params['loader'])
> --
> 2.17.1
--
Paul Barker
More information about the Openembedded-core
mailing list