[meta-intel] [PATCH 1/2] systemd-boot: use RMC database in EFI stub

Jianxun Zhang jianxun.zhang at linux.intel.com
Mon Feb 6 10:09:21 PST 2017


Reviewed + 1, beside from what in discussion of KBOOTPARAM refactoring.

> On Jan 27, 2017, at 5:36 AM, Mikko Ylinen <mikko.ylinen at intel.com> wrote:
> 
> systemd-boot's EFI stub can be built in an EFI executable
> with the kernel, cmdline, and initrd.
> 
> This commit enables the EFI stub code to use the RMC database
> and appends the board specific cmdline (KBOOTPARAM) to the
> built-in cmdline.
> 
> Signed-off-by: Mikko Ylinen <mikko.ylinen at intel.com>
> ---
> ...Link-RMC-library-into-bootloader-and-stub.patch | 39 +++++++++++
> ...-sd-boot-Link-RMC-library-into-bootloader.patch | 31 ---------
> ...-kernel-command-line-fragment-in-EFI-stub.patch | 81 ++++++++++++++++++++++
> .../systemd-boot/systemd-boot_%.bbappend           |  3 +-
> 4 files changed, 122 insertions(+), 32 deletions(-)
> create mode 100644 common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader-and-stub.patch
> delete mode 100644 common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader.patch
> create mode 100644 common/recipes-bsp/systemd-boot/systemd-boot/0004-sd-boot-Support-global-kernel-command-line-fragment-in-EFI-stub.patch
> 
> diff --git a/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader-and-stub.patch b/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader-and-stub.patch
> new file mode 100644
> index 0000000..2f248e2
> --- /dev/null
> +++ b/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader-and-stub.patch
> @@ -0,0 +1,39 @@
> +From fe1c2fdfe81f2ac2b41fe8543ba07f1911770d26 Mon Sep 17 00:00:00 2001
> +From: Jianxun Zhang <jianxun.zhang at linux.intel.com>
> +Date: Sat, 21 May 2016 18:52:07 -0700
> +Subject: [PATCH] sd-boot: Link RMC library into bootloader and stub
> +
> +Add RMC library into bootloader binary and stub.
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Jianxun Zhang <jianxun.zhang at linux.intel.com>
> +---
> + Makefile.am | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/Makefile.am b/Makefile.am
> +index 305099ab6..9fb6f9b7b 100644
> +--- a/Makefile.am
> ++++ b/Makefile.am
> +@@ -2802,7 +2802,7 @@ $(top_builddir)/src/boot/efi/%.o: $(top_srcdir)/src/boot/efi/%.c $(addprefix $(t
> + 
> + $(systemd_boot_solib): $(systemd_boot_objects)
> + 	$(AM_V_CCLD)$(LD) $(efi_ldflags) $(systemd_boot_objects) \
> +-		-o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
> ++		-o $@ -lefi -lgnuefi -lrmcefi $(shell $(CC) -print-libgcc-file-name); \
> + 	nm -D -u $@ | grep ' U ' && exit 1 || :
> + 
> + $(systemd_boot): $(systemd_boot_solib)
> +@@ -2852,7 +2852,7 @@ $(top_builddir)/src/boot/efi/%.o: $(top_srcdir)/src/boot/efi/%.c $(addprefix $(t
> + 
> + $(stub_solib): $(stub_objects)
> + 	$(AM_V_CCLD)$(LD) $(efi_ldflags) $(stub_objects) \
> +-		-o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
> ++		-o $@ -lefi -lgnuefi -lrmcefi $(shell $(CC) -print-libgcc-file-name); \
> + 	nm -D -u $@ | grep ' U ' && exit 1 || :
> + 
> + $(stub): $(stub_solib)
> +-- 
> +2.11.0
> +
> diff --git a/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader.patch b/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader.patch
> deleted file mode 100644
> index 626efce..0000000
> --- a/common/recipes-bsp/systemd-boot/systemd-boot/0001-sd-boot-Link-RMC-library-into-bootloader.patch
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -From 1ccd031ce97501f8ee63f39e8794437d568115dc Mon Sep 17 00:00:00 2001
> -From: Jianxun Zhang <jianxun.zhang at linux.intel.com>
> -Date: Sat, 21 May 2016 18:52:07 -0700
> -Subject: [PATCH 1/3] sd-boot: Link RMC library into bootloader
> -
> -Add RMC library into bootloader binary. EFI stub is not changed
> -until we really need rmc in stub.
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Jianxun Zhang <jianxun.zhang at linux.intel.com>
> ----
> - Makefile.am | 2 +-
> - 1 file changed, 1 insertion(+), 1 deletion(-)
> -
> -diff --git a/Makefile.am b/Makefile.am
> -index 305099a..df176a5 100644
> ---- a/Makefile.am
> -+++ b/Makefile.am
> -@@ -2802,7 +2802,7 @@ $(top_builddir)/src/boot/efi/%.o: $(top_srcdir)/src/boot/efi/%.c $(addprefix $(t
> - 
> - $(systemd_boot_solib): $(systemd_boot_objects)
> - 	$(AM_V_CCLD)$(LD) $(efi_ldflags) $(systemd_boot_objects) \
> --		-o $@ -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name); \
> -+		-o $@ -lefi -lgnuefi -lrmcefi $(shell $(CC) -print-libgcc-file-name); \
> - 	nm -D -u $@ | grep ' U ' && exit 1 || :
> - 
> - $(systemd_boot): $(systemd_boot_solib)
> --- 
> -2.7.4
> -
> diff --git a/common/recipes-bsp/systemd-boot/systemd-boot/0004-sd-boot-Support-global-kernel-command-line-fragment-in-EFI-stub.patch b/common/recipes-bsp/systemd-boot/systemd-boot/0004-sd-boot-Support-global-kernel-command-line-fragment-in-EFI-stub.patch
> new file mode 100644
> index 0000000..7508269
> --- /dev/null
> +++ b/common/recipes-bsp/systemd-boot/systemd-boot/0004-sd-boot-Support-global-kernel-command-line-fragment-in-EFI-stub.patch
> @@ -0,0 +1,81 @@
> +From 4cb9c65ea9c0eba3ba04d036dccd4a5ab3d2547b Mon Sep 17 00:00:00 2001
> +From: Mikko Ylinen <mikko.ylinen at intel.com>
> +Date: Fri, 27 Jan 2017 13:31:45 +0200
> +Subject: [PATCH] sd-boot: support global kernel command line in EFI stub
> +
> +This change integrates rmc into EFI stub and supports a
> +global fragment (RMC KBOOTPARAM) that is appended to the
> +cmdline at boot.
> +
> +The fragment is board-specific and read from the database.
> +
> +Implements [YOCTO #10924].
> +
> +Upstream-status: Pending
> +
> +Signed-off-by: Mikko Ylinen <mikko.ylinen at intel.com>
> +---
> + src/boot/efi/stub.c | 33 +++++++++++++++++++++++++++++++++
> + 1 file changed, 33 insertions(+)
> +
> +diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
> +index 1e250f34f..f3865199f 100644
> +--- a/src/boot/efi/stub.c
> ++++ b/src/boot/efi/stub.c
> +@@ -13,6 +13,7 @@
> + 
> + #include <efi.h>
> + #include <efilib.h>
> ++#include <rmc_api.h>
> + 
> + #include "disk.h"
> + #include "graphics.h"
> +@@ -48,6 +49,9 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
> +         UINTN cmdline_len;
> +         CHAR16 uuid[37];
> +         EFI_STATUS err;
> ++        INTN len;
> ++        CHAR8 *rmc_db = NULL;
> ++        rmc_file_t rmc_file;
> + 
> +         InitializeLib(image, sys_table);
> + 
> +@@ -112,6 +116,35 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
> + #endif
> +         }
> + 
> ++        len = file_read(root_dir, L"\\rmc.db", 0, 0, &rmc_db);
> ++        if (len <= 0)
> ++                rmc_db = NULL;
> ++
> ++        /* If the board has a fragment in rmc database, append it to the cmdline */
> ++        if (rmc_db && !rmc_gimme_file(sys_table, rmc_db, "KBOOTPARAM", &rmc_file)) {
> ++                CHAR8 *line;
> ++                UINTN i = 0;
> ++                UINTN j;
> ++
> ++                line = AllocatePool(rmc_file.blob_len + cmdline_len + 2);
> ++
> ++                while (i < cmdline_len && cmdline[i] != '\0') {
> ++                        line[i] = cmdline[i];
> ++                        i++;
> ++                }
> ++
> ++                line[i++] = ' ';
> ++
> ++                for (j=0; j < rmc_file.blob_len; j++)
> ++                        line[i+j] = rmc_file.blob[j];
> ++                line[i+j] = '\0';
> ++
> ++                cmdline = line;
> ++                cmdline_len = i + j;
> ++
> ++                FreePool(rmc_db);
> ++        }
> ++
> +         /* export the device path this image is started from */
> +         if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
> +                 efivar_set(L"LoaderDevicePartUUID", uuid, FALSE);
> +-- 
> +2.11.0
> +
> diff --git a/common/recipes-bsp/systemd-boot/systemd-boot_%.bbappend b/common/recipes-bsp/systemd-boot/systemd-boot_%.bbappend
> index 12c1e5a..0db67b1 100644
> --- a/common/recipes-bsp/systemd-boot/systemd-boot_%.bbappend
> +++ b/common/recipes-bsp/systemd-boot/systemd-boot_%.bbappend
> @@ -15,9 +15,10 @@ EXTRA_OEMAKE_append_intel-x86-common = ' EFI_LDFLAGS="-L${STAGING_DIR_HOST}/usr/
> SRCREV_intel-x86-common = "a1e2ef7ec912902d8142e7cb5830cbfb47dba86c"
> 
> SRC_URI_append_intel-x86-common = " \
> -            file://0001-sd-boot-Link-RMC-library-into-bootloader.patch \
> +            file://0001-sd-boot-Link-RMC-library-into-bootloader-and-stub.patch \
>             file://0002-sd-boot-Load-board-specific-boot-entries-from-RMC-da.patch \
>             file://0003-sd-boot-Support-global-kernel-command-line-fragment.patch \
> +            file://0004-sd-boot-Support-global-kernel-command-line-fragment-in-EFI-stub.patch \
>             file://0001-efi-boot.c-workaround-for-Joule-BIOS-hang.patch \
>             "
> 
> -- 
> 2.11.0
> 
> ---------------------------------------------------------------------
> Intel Finland Oy
> Registered Address: PL 281, 00181 Helsinki 
> Business Identity Code: 0357606 - 4 
> Domiciled in Helsinki 
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> 
> -- 
> _______________________________________________
> meta-intel mailing list
> meta-intel at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-intel



More information about the meta-intel mailing list