[PATCH] cmd: bootm: add ELF file support

Sean Anderson sean.anderson at seco.com
Tue Mar 19 17:15:11 CET 2024


Hi Maxim,

On 3/19/24 12:10, Maxim Moskalets wrote:
> [You don't often get email from maximmosk4 at gmail.com. Learn why this is important at https://cas5-0-urlprotect.trendmicro.com:443/wis/clicktime/v1/query?url=https%3a%2f%2faka.ms%2fLearnAboutSenderIdentification&umid=d3728a4f-0e7b-4ded-94bc-5bd133b6deef&auth=d807158c60b7d2502abde8a2fc01f40662980862-7a67d937c0016d0d3292f79af55f0ce3d78f480b ]
>
> Some operating systems (e.g. seL4) and embedded applications are ELF
> images. It is convenient to use FIT-images to implement trusted boot.
> Added "elf" image type for booting using bootm command.

Why not use objcopy to create a binary?

--Sean

> Signed-off-by: Maxim Moskalets <maximmosk4 at gmail.com>
> ---
>  boot/bootm_os.c  | 21 +++++++++++++++++++++
>  boot/image-fit.c |  3 ++-
>  boot/image.c     |  3 +++
>  include/image.h  |  1 +
>  4 files changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/boot/bootm_os.c b/boot/bootm_os.c
> index ccde72d22c..71bfb34926 100644
> --- a/boot/bootm_os.c
> +++ b/boot/bootm_os.c
> @@ -395,6 +395,24 @@ static int do_bootm_qnxelf(int flag, struct bootm_info *bmi)
>  }
>  #endif
>
> +#if defined(CONFIG_CMD_ELF)
> +static int do_bootm_elf(int flag, struct bootm_info *bmi)
> +{
> +       struct bootm_headers *images = bmi->images;
> +       char *local_args[2] = {NULL};
> +       char str[19] = ""; /* "0x" + 16 digits + "\0" */
> +
> +       sprintf(str, "0x%lx", images->ep); /* write entry-point into string */
> +       str[18] = '\0';
> +       local_args[0] = bmi->argv[0];
> +       local_args[1] = str;    /* and provide it via the arguments */
> +
> +       do_bootelf(NULL, 0, 2, local_args);
> +
> +       return 1;
> +}
> +#endif
> +
>  #ifdef CONFIG_INTEGRITY
>  static int do_bootm_integrity(int flag, struct bootm_info *bmi)
>  {
> @@ -536,6 +554,9 @@ static boot_os_fn *boot_os[] = {
>  #ifdef CONFIG_BOOTM_EFI
>         [IH_OS_EFI] = do_bootm_efi,
>  #endif
> +#if defined(CONFIG_CMD_ELF)
> +       [IH_OS_ELF] = do_bootm_elf,
> +#endif
>  };
>
>  /* Allow for arch specific config before we boot */
> diff --git a/boot/image-fit.c b/boot/image-fit.c
> index 89e377563c..0419bef6d2 100644
> --- a/boot/image-fit.c
> +++ b/boot/image-fit.c
> @@ -2180,7 +2180,8 @@ int fit_image_load(struct bootm_headers *images, ulong addr,
>                 fit_image_check_os(fit, noffset, IH_OS_TEE) ||
>                 fit_image_check_os(fit, noffset, IH_OS_OPENRTOS) ||
>                 fit_image_check_os(fit, noffset, IH_OS_EFI) ||
> -               fit_image_check_os(fit, noffset, IH_OS_VXWORKS);
> +               fit_image_check_os(fit, noffset, IH_OS_VXWORKS) ||
> +               fit_image_check_os(fit, noffset, IH_OS_ELF);
>
>         /*
>          * If either of the checks fail, we should report an error, but
> diff --git a/boot/image.c b/boot/image.c
> index 073931cd7a..5b88d6808c 100644
> --- a/boot/image.c
> +++ b/boot/image.c
> @@ -134,6 +134,9 @@ static const table_entry_t uimage_os[] = {
>  #endif
>         {       IH_OS_OPENSBI,  "opensbi",      "RISC-V OpenSBI",       },
>         {       IH_OS_EFI,      "efi",          "EFI Firmware" },
> +#ifdef CONFIG_CMD_ELF
> +       {       IH_OS_ELF,      "elf",          "ELF Image" },
> +#endif
>
>         {       -1,             "",             "",                     },
>  };
> diff --git a/include/image.h b/include/image.h
> index 21de70f0c9..9a40bca22c 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -100,6 +100,7 @@ enum {
>         IH_OS_TEE,                      /* Trusted Execution Environment */
>         IH_OS_OPENSBI,                  /* RISC-V OpenSBI */
>         IH_OS_EFI,                      /* EFI Firmware (e.g. GRUB2) */
> +       IH_OS_ELF,                      /* ELF Image (e.g. seL4) */
>
>         IH_OS_COUNT,
>  };
> --
> 2.39.2
>


[Embedded World 2024, SECO SpA]<https://www.messe-ticket.de/Nuernberg/embeddedworld2024/Register/ew24517689>


More information about the U-Boot mailing list