[OE-core] [PATCHv2] wic: add UEFI kernel as UEFI stub

Maxim Uvarov maxim.uvarov at linaro.org
Fri Jan 17 09:49:40 UTC 2020


ping.

On Mon, 13 Jan 2020 at 23:14, Maxim Uvarov <maxim.uvarov at linaro.org> 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=uefi-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>
> ---
>  v2: - use loader=uefi-kernel.
>      - remove missed from debug WicError().
>      - correct error message.
>
>  scripts/lib/wic/plugins/source/bootimg-efi.py | 25 +++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
> index 2cfdc10ecd..8d47ea55eb 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'] == 'uefi-kernel':
> +                return
>              else:
>                  raise WicError("unrecognized bootimg-efi loader: %s" % source_params['loader'])
>          except KeyError:
> @@ -252,6 +255,28 @@ 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'] == 'uefi-kernel':
> +                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("UEFI stub kernel is incompatible with target %s" % target)
> +
> +                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)
> +                    exec_cmd(cp_cmd, True)
>              else:
>                  raise WicError("unrecognized bootimg-efi loader: %s" %
>                                 source_params['loader'])
> --
> 2.17.1
>


More information about the Openembedded-core mailing list