Re: [PATCH] cmd: bootm: add ELF file support

2024-04-11 Thread Quentin Schulz

Hi Maxim,

On 4/10/24 23:21, Maxim Moskalets wrote:

From: Maxim Moskalets 

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.

Signed-off-by: Maxim Moskalets 
---
  boot/bootm_os.c  | 24 
  boot/image-fit.c |  3 ++-
  boot/image.c |  3 +++
  include/image.h  |  1 +
  4 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/boot/bootm_os.c b/boot/bootm_os.c
index ccde72d22c..1c92b8149c 100644
--- a/boot/bootm_os.c
+++ b/boot/bootm_os.c
@@ -395,6 +395,27 @@ 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" */
+
+   if (flag != BOOTM_STATE_OS_GO)
+   return 0;
+
+   sprintf(str, "0x%lx", images->ep); /* write entry-point into string */
+   str[18] = '\0';


This does seem like snprintf would be useful here?

"""
snprintf(str, 19, "0x%lx", images-ep);
"""

safest and also merges the two instructions in one.

Also, have another question, do we want to 0-left-pad the value so that 
it's always a 16 hex-digit number?


e.g. 0x%016lx

Cheers,
Quentin


Re: [PATCH] cmd: bootm: add ELF file support

2024-03-19 Thread Maxim M. Moskalets

Hi Sean

On 19.03.2024 19:15, Sean Anderson wrote:

Hi Maxim,

On 3/19/24 12:10, Maxim Moskalets wrote:

[You don't often get email from maximmo...@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=d3728a4f-0e7b-4ded-94bc-5bd133b6deef=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
When expanding ELF to binary, the size can grow significantly due to the 
layout of the file.
ELF is also more convenient for debugging due to its clear structure and 
ease of getting symbols and other debugging information.


--Maxim

Signed-off-by: Maxim Moskalets 
---
  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]




Re: [PATCH] cmd: bootm: add ELF file support

2024-03-19 Thread Sean Anderson
Hi Maxim,

On 3/19/24 12:10, Maxim Moskalets wrote:
> [You don't often get email from maximmo...@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=d3728a4f-0e7b-4ded-94bc-5bd133b6deef=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 
> ---
>  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]