
On 21.06.24 13:42, Maxim Moskalets wrote:
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 maximmosk4@gmail.com
I guess a test could be added to test/py/tests/test_zynqmp_rpu.py which already uses the bootelf command?
Best regards
Heinrich
v5: used func from lib/elf.c to avoid dependency form CLI
boot/bootm_os.c | 18 ++++++++++++++++++ boot/image-fit.c | 3 ++- boot/image.c | 5 ++++- cmd/Kconfig | 7 +++++++ include/image.h | 1 + 5 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/boot/bootm_os.c b/boot/bootm_os.c index 15297ddb53..6a6621706f 100644 --- a/boot/bootm_os.c +++ b/boot/bootm_os.c @@ -8,6 +8,7 @@ #include <bootstage.h> #include <cpu_func.h> #include <efi_loader.h> +#include <elf.h> #include <env.h> #include <fdt_support.h> #include <image.h> @@ -394,6 +395,20 @@ static int do_bootm_qnxelf(int flag, struct bootm_info *bmi) } #endif
+#if defined(CONFIG_BOOTM_ELF) +static int do_bootm_elf(int flag, struct bootm_info *bmi) +{
- Bootelf_flags flags = { .autostart = 1 };
- if (flag != BOOTM_STATE_OS_GO)
return 0;
- bootelf(bmi->images->ep, flags, 0, NULL);
- return 1;
+} +#endif
- #ifdef CONFIG_INTEGRITY static int do_bootm_integrity(int flag, struct bootm_info *bmi) {
@@ -535,6 +550,9 @@ static boot_os_fn *boot_os[] = { #ifdef CONFIG_BOOTM_EFI [IH_OS_EFI] = do_bootm_efi, #endif +#if defined(CONFIG_BOOTM_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 f6464bcf62..9253f81fff 100644 --- a/boot/image-fit.c +++ b/boot/image-fit.c @@ -2175,7 +2175,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 fc774d605d..abac254e02 100644 --- a/boot/image.c +++ b/boot/image.c @@ -130,7 +130,10 @@ static const table_entry_t uimage_os[] = { { IH_OS_OPENRTOS, "openrtos", "OpenRTOS", }, #endif { IH_OS_OPENSBI, "opensbi", "RISC-V OpenSBI", },
- { IH_OS_EFI, "efi", "EFI Firmware" },
- { IH_OS_EFI, "efi", "EFI Firmware" },
+#ifdef CONFIG_BOOTM_ELF
- { IH_OS_ELF, "elf", "ELF Image" },
+#endif
{ -1, "", "", }, }; diff --git a/cmd/Kconfig b/cmd/Kconfig index a2dee34689..613baa106e 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -321,6 +321,13 @@ config BOOTM_EFI help Support booting UEFI FIT images via the bootm command.
+config BOOTM_ELF
- bool "Support booting ELF images"
- depends on CMD_BOOTM && LIB_ELF
- default n
- help
Support booting ELF images via the bootm command.
- config CMD_BOOTZ bool "bootz" help
diff --git a/include/image.h b/include/image.h index c5b288f62b..9daaee15cd 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, };