[Buildroot] [PATCH 1/8] boot/grub2: add support to build multiple Grub2 configurations in the same build

Yann E. MORIN yann.morin.1998 at free.fr
Fri Sep 17 21:24:29 UTC 2021


Köry, All,

On 2021-09-14 11:34 +0200, Kory Maincent spake thusly:
> When Grub2 is build it is configured only for one boot set-up, BIOS Legacy,
> EFI 32 bit or EFI 64 bit. It can not deal with several boot set-up on the
> same image.
> 
> This patch allows to build Grub2 for different configurations simultaneously.
> We use a GRUB2_TUPLES list to describe all the configurations selected.
> For each boot case described in the GRUB2_TUPLES list, it configures and
> builds Grub2 in a separate folder named build-$(tuple).
> We use a foreach loop to make actions on each tuple selected.

What you forgot to state in bold fat characters here, is that we can no
longer use autotools-package as a consequence of this multi-build, and
that we have to resort to generic-pacakge and a partial duplication of
the autotools-infra.

This is not very nice... :-(

IIRC, we had a similar problem with barbox, where we had to build two
images for it, so we ended up duplicating the package, where the
top-most boot/barebox/barebox.mk defines a minimalist barebox-package
infra, and the barebox and barebox-aux are two barebox-package:

    boot/barebox/
    ├── barebox/
    │   ├── barebox.hash -> ../barebox.hash
    │   ├── barebox.mk
    │   └── Config.in
    ├── barebox-aux/
    │   ├── barebox-aux.hash -> ../barebox.hash
    │   ├── barebox-aux.mk
    │   └── Config.in
    ├── barebox.hash
    ├── barebox.mk
    └── Config.in

If I understand correctly, we are in a similar situation with grub2, and
there are only ever at most two "platforms" we can build, and it does
not look like it will ever change:

    i386:
        BR2_TARGET_GRUB2_I386_PC
        BR2_TARGET_GRUB2_I386_EFI

    x86_64:
        BR2_TARGET_GRUB2_I386_EFI
        BR2_TARGET_GRUB2_X86_64_EFI

    arm:
        BR2_TARGET_GRUB2_ARM_UBOOT
        BR2_TARGET_GRUB2_ARM_EFI

    aarch64:
        BR2_TARGET_GRUB2_ARM64_EFI

So, can't we do the same "duplication" of grub2?

Note that, in menuconfig, we can keep things as-is, so tht it looks
nicer to the user, and then we have a bit of logic to decide if we need
grub2-aux (or whatever it's named):

    config BR2_PACKAGE_GRUB2_NEEDS_AUX
        bool
        select BR2_PACKAGE_GRUB2_AUX
        default y if BR2_TARGET_GRUB2_I386_PC && BR2_TARGET_GRUB2_I386_EFI
        default y if BR2_TARGET_GRUB2_I386_EFI && BR2_TARGET_GRUB2_X86_64_EFI
        default y if BR2_TARGET_GRUB2_ARM_UBOOT && BR2_TARGET_GRUB2_ARM_EFI

And this means the user is not even aware (in menuconfig) that there is
a secondary grub2-aux package.

Anyway, see some review below...

> We have to separate the BR2_TARGET_GRUB2_BUILTIN_MODULES and the
> BR2_TARGET_GRUB2_BUILTIN_CONFIG for each BIOS or EFI boot cases.
> 
> Signed-off-by: Kory Maincent <kory.maincent at bootlin.com>
> ---
>  Config.in.legacy                         |  16 +++
>  boot/grub2/Config.in                     |  40 ++++--
>  boot/grub2/grub2.mk                      | 165 +++++++++++++----------
>  support/testing/tests/fs/test_iso9660.py |   9 +-
>  4 files changed, 146 insertions(+), 84 deletions(-)
> 
> diff --git a/Config.in.legacy b/Config.in.legacy
> index a0c1a6898f..519cb830b6 100644
> --- a/Config.in.legacy
> +++ b/Config.in.legacy
> @@ -144,6 +144,22 @@ endif
>  
>  ###############################################################################
>  
> +config BR2_TARGET_GRUB2_BUILTIN_MODULES
> +	bool "the grub2 builtin modules has been renamed"

BR2_TARGET_GRUB2_BUILTIN_MODULES was a string, so it can't be a boolean
in legacy.

> +	select BR2_LEGACY
> +	help
> +	  This option has been split to separate the builtin modules
> +	  between BR2_TARGET_GRUB2_BUILTIN_MODULES_PC and
> +	  BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI.
> +
> +config BR2_TARGET_GRUB2_BUILTIN_CONFIG
> +	bool "the grub2 builtin configuration has been renamed"

Ditto: a string migrates to a legacy string not a legacy bool.

> +	select BR2_LEGACY
> +	help
> +	  This option has been split to separate the builtin configuration
> +	  between BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC and
> +	  BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI.
> +
>  comment "Legacy options removed in 2021.05"
>  
>  config BR2_PACKAGE_UDISKS_LVM2
> diff --git a/boot/grub2/Config.in b/boot/grub2/Config.in
> index e45133999e..79046b9c7f 100644
> --- a/boot/grub2/Config.in
> +++ b/boot/grub2/Config.in
> @@ -27,9 +27,6 @@ config BR2_TARGET_GRUB2
>  
>  if BR2_TARGET_GRUB2
>  
> -choice
> -	prompt "Platform"

Before, this was a choice, whichj would guarantee that exactly one
platform would be enabled.

Now, with your patch, there is nothing that ensures that there is at
least one platform enabled.

When there are more than two options, like is the case here, what we
usually do is:

    config BR2_TARGET_GRUB2
        bool "grub2"
        select BR2_TARGET_GRUB2_I386_PC if !BR2_TARGET_GRUB2_HAS_PTF

    config BR2_TARGET_GRUB2_HAS_PTF
        bool

    config BR2_TARGET_GRUB2_I386_PC
        bool "i386-pc"

    config BR2_TARGET_GRUB2_I386_EFI
        bool "i386-efi"
        select BR2_TARGET_GRUB2_HAS_PTF

    config BR2_TARGET_GRUB2_X86_64_EFI
        bool "x86-64-efi"
        select BR2_TARGET_GRUB2_HAS_PTF

    # and so on...

This ensures that at least one platform is enabled.

>  config BR2_TARGET_GRUB2_I386_PC
>  	bool "i386-pc"
>  	depends on BR2_i386 || BR2_x86_64
> @@ -76,10 +73,10 @@ config BR2_TARGET_GRUB2_ARM64_EFI
>  	  Aarch64 platform and you want to boot Grub 2 as an EFI
>  	  application.
>  
> -endchoice
> -
>  if BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_GRUB2_ARM_UBOOT
>  
> +comment "Options for the x86 legacy BIOS or ARM U-Boot support"
> +
>  config BR2_TARGET_GRUB2_BOOT_PARTITION
>  	string "boot partition"
>  	default "hd0,msdos1"
> @@ -89,24 +86,43 @@ config BR2_TARGET_GRUB2_BOOT_PARTITION
>  	  first disk if using a legacy partition table, or 'hd0,gpt1'
>  	  if using GPT partition table.
>  
> -endif # BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_GRUB2_ARM_UBOOT
> -
> -config BR2_TARGET_GRUB2_BUILTIN_MODULES
> +config BR2_TARGET_GRUB2_BUILTIN_MODULES_PC
>  	string "builtin modules"
>  	default "boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC
> -	default "boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop" \
> -		if BR2_TARGET_GRUB2_I386_EFI || BR2_TARGET_GRUB2_X86_64_EFI || \
> -		   BR2_TARGET_GRUB2_ARM_EFI  || BR2_TARGET_GRUB2_ARM64_EFI
>  	default "linux ext2 fat part_msdos normal" if BR2_TARGET_GRUB2_ARM_UBOOT
> +	default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != "" # legacy

Kconfig uses the first default in order, which condition is valid, and
we want the legacy default to take precedence over the per-platform
default. So we want the legacy default to come first in the list:

    default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != "" # legacy
    default "boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC
    default "linux ext2 fat part_msdos normal" if BR2_TARGET_GRUB2_ARM_UBOOT

> +config BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC
> +	string "builtin config"
> +	default BR2_TARGET_GRUB2_BUILTIN_CONFIG if BR2_TARGET_GRUB2_BUILTIN_CONFIG != "" # legacy
> +	help
> +	  Path to a Grub 2 configuration file that will be embedded
> +	  into the Grub image itself. This allows to set the root
> +	  device and other configuration parameters, but however menu
> +	  entries cannot be described in this embedded configuration.
> +
> +endif # BR2_TARGET_GRUB2_I386_PC || BR2_TARGET_GRUB2_ARM_UBOOT
> +
> +if BR2_TARGET_GRUB2_I386_EFI || BR2_TARGET_GRUB2_X86_64_EFI || \
> +	BR2_TARGET_GRUB2_ARM_EFI  || BR2_TARGET_GRUB2_ARM64_EFI
> +
> +comment "Options for the EFI BIOS or ARM EFI support"
> +
> +config BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI
> +	string "builtin modules"
> +	default "boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop"
> +	default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != "" # legacy

Ditto: legacy default comes first.

> -config BR2_TARGET_GRUB2_BUILTIN_CONFIG
> +config BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI
>  	string "builtin config"
> +	default BR2_TARGET_GRUB2_BUILTIN_CONFIG if BR2_TARGET_GRUB2_BUILTIN_CONFIG != "" # legacy
>  	help
>  	  Path to a Grub 2 configuration file that will be embedded
>  	  into the Grub image itself. This allows to set the root
>  	  device and other configuration parameters, but however menu
>  	  entries cannot be described in this embedded configuration.
>  
> +endif
>  config BR2_TARGET_GRUB2_INSTALL_TOOLS
>  	bool "install tools"
>  	help
> diff --git a/boot/grub2/grub2.mk b/boot/grub2/grub2.mk
> index 52e9199ae9..04eadd5dc3 100644
> --- a/boot/grub2/grub2.mk
> +++ b/boot/grub2/grub2.mk
> @@ -57,52 +57,65 @@ GRUB2_INSTALL_TARGET = NO
>  endif
>  GRUB2_CPE_ID_VENDOR = gnu
>  
> -GRUB2_BUILTIN_MODULES = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES))
> -GRUB2_BUILTIN_CONFIG = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_CONFIG))
> +GRUB2_BUILTIN_MODULES_PC = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_PC))
> +GRUB2_BUILTIN_MODULES_EFI = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI))
> +GRUB2_BUILTIN_CONFIG_PC = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC))
> +GRUB2_BUILTIN_CONFIG_EFI = $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI))
>  GRUB2_BOOT_PARTITION = $(call qstrip,$(BR2_TARGET_GRUB2_BOOT_PARTITION))

Ah, wee're getting into the ugly part... ;-]

>  ifeq ($(BR2_TARGET_GRUB2_I386_PC),y)
[--SNIP removals--]
> +GRUB2_I386_PC_IMAGE = $(BINARIES_DIR)/grub.img
> +GRUB2_I386_PC_CFG = $(TARGET_DIR)/boot/grub/grub.cfg
> +GRUB2_I386_PC_PREFIX = ($(GRUB2_BOOT_PARTITION))/boot/grub
> +GRUB2_I386_PC_TARGET = i386
> +GRUB2_I386_PC_PLATFORM = pc
> +GRUB2_I386_PC_BUILTIN = PC
> +GRUB2_TUPLES += i386-pc
> +endif
> +ifeq ($(BR2_TARGET_GRUB2_I386_EFI),y)
> +GRUB2_I386_EFI_IMAGE = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootia32.efi
> +GRUB2_I386_EFI_CFG = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg
> +GRUB2_I386_EFI_PREFIX = /EFI/BOOT
> +GRUB2_I386_EFI_TARGET = i386
> +GRUB2_I386_EFI_PLATFORM = efi
> +GRUB2_I386_EFI_BUILTIN = EFI
> +GRUB2_TUPLES += i386-efi
> +endif
[--SNIP--]

I think it is more digestible if written as:

    GRUB2_IMAGE_i386-pc = $(BINARIES_DIR)/grub.img
    GRUB2_CFG_i386-pc = $(TARGET_DIR)/boot/grub/grub.cfg
    GRUB2_PREFIX_i386-pc = ($(GRUB2_BOOT_PARTITION))/boot/grub
    GRUB2_TARGET_i386-pc = i386
    GRUB2_PLATFORM_i386-pc = pc
    GRUB2_BUILTIN_i386-pc = PC
    GRUB2_TUPLES_$(BR2_TARGET_GRUB2_I386_PC) += i386-pc

    GRUB2_IMAGE_i386-efi = $(BINARIES_DIR)/efi-part/EFI/BOOT/bootia32.efi
    GRUB2_CFG_i386-efi = $(BINARIES_DIR)/efi-part/EFI/BOOT/grub.cfg
    GRUB2_PREFIX_i386-efi = /EFI/BOOT
    GRUB2_TARGET_i386-efi = i386
    GRUB2_PLATFORM_i386-efi = efi
    GRUB2_BUILTIN_i386-efi = EFI
    GRUB2_TUPLES_$(BR2_TARGET_GRUB2_I386_EFI) += i386-efi

    [...]

    $(foreach tuple, $(GRUB2_TUPLES_y), blablabla...)

That way you don;t have to play tricks with $(call UPPERCASE,$(tuple)),
and the conditional blocks are gone away which makes for a more legible
code (IMHO).

>  # Grub2 is kind of special: it considers CC, LD and so on to be the
> @@ -128,8 +141,10 @@ GRUB2_CONF_ENV = \
>  	TARGET_STRIP="$(TARGET_CROSS)strip"
>  
>  GRUB2_CONF_OPTS = \
> -	--target=$(GRUB2_TARGET) \
> -	--with-platform=$(GRUB2_PLATFORM) \
> +	--host=$(GNU_TARGET_NAME) \
> +	--build=$(GNU_HOST_NAME) \
> +	--target=$(GRUB2_$(call UPPERCASE,$(tuple))_TARGET) \
> +	--with-platform=$(GRUB2_$(call UPPERCASE,$(tuple))_PLATFORM) \

    --target=$(GRUB2_TARGET_$(tuple))
    --with-platform=$(GRUB2_PLATFORM_$(tuple)) \

However, I don't like macros that are implicitly parameterised. We've
gone in quite some changes in the past to fix similar cases (e.g. in the
download infra).

So, I'd write a real parameterised marco:

    # $(1): tuple blablabla...
    GRUB2_CONF_OPTS = \
        --host=$(GNU_TARGET_NAME) \
        --target=$(GRUB2_TARGET_$(1)) \
        --with-platform=$(GRUB2_PLATFORM_$(1)) \
        [...]

    $(foreach tuple, $(GRUB2_TUPLES_y), \
        [...] \
        ../configure $(call GRUB2_CONF_OPTS,$(tuple))
    )

    # And ditto for the _BUILD_CMDS...

>  	--prefix=/ \
>  	--exec-prefix=/ \
>  	--disable-grub-mkfont \
> @@ -147,34 +162,46 @@ HOST_GRUB2_CONF_OPTS = \
>  	--enable-libzfs=no \
>  	--disable-werror
>  
> -ifeq ($(BR2_TARGET_GRUB2_I386_PC),y)
> -define GRUB2_IMAGE_INSTALL_ELTORITO
> -	cat $(HOST_DIR)/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \
> -		$(BINARIES_DIR)/grub-eltorito.img
> +define GRUB2_CONFIGURE_CMDS
> +	$(foreach tuple, $(GRUB2_TUPLES), \
> +		mkdir -p $(@D)/build-$(tuple) ; \
> +		cd $(@D)/build-$(tuple) ; \
> +		$(TARGET_CONFIGURE_OPTS) \
> +		$(TARGET_CONFIGURE_ARGS) \
> +		$(GRUB2_CONF_ENV) \
> +		../configure \
> +			$(GRUB2_CONF_OPTS)
> +	)
>  endef
> -endif
>  
> -define GRUB2_INSTALL_IMAGES_CMDS
> -	mkdir -p $(dir $(GRUB2_IMAGE))
> -	$(HOST_DIR)/usr/bin/grub-mkimage \
> -		-d $(@D)/grub-core/ \
> -		-O $(GRUB2_TUPLE) \
> -		-o $(GRUB2_IMAGE) \
> -		-p "$(GRUB2_PREFIX)" \
> -		$(if $(GRUB2_BUILTIN_CONFIG),-c $(GRUB2_BUILTIN_CONFIG)) \
> -		$(GRUB2_BUILTIN_MODULES)
> -	mkdir -p $(dir $(GRUB2_CFG))
> -	$(INSTALL) -D -m 0644 boot/grub2/grub.cfg $(GRUB2_CFG)
> -	$(GRUB2_IMAGE_INSTALL_ELTORITO)
> +define GRUB2_BUILD_CMDS
> +	$(foreach tuple, $(GRUB2_TUPLES), \
> +		$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/build-$(tuple)
> +	)
>  endef
>  
> -ifeq ($(GRUB2_PLATFORM),efi)
> -define GRUB2_EFI_STARTUP_NSH
> -	echo $(notdir $(GRUB2_IMAGE)) > \
> -		$(BINARIES_DIR)/efi-part/startup.nsh
> +define GRUB2_INSTALL_IMAGES_CMDS
> +	$(foreach tuple, $(GRUB2_TUPLES), \
> +		mkdir -p $(dir $(GRUB2_$(call UPPERCASE,$(tuple))_IMAGE)) ; \
> +		$(HOST_DIR)/usr/bin/grub-mkimage \
> +			-d $(@D)/build-$(tuple)/grub-core/ \
> +			-O $(tuple) \
> +			-o $(GRUB2_$(call UPPERCASE,$(tuple))_IMAGE) \
> +			-p "$(GRUB2_$(call UPPERCASE,$(tuple))_PREFIX)" \
> +			$(if $(GRUB2_BUILTIN_CONFIG_$(GRUB2_$(call UPPERCASE,$(tuple))_BUILTIN)), \
> +				-c $(GRUB2_BUILTIN_CONFIG_$(GRUB2_$(call UPPERCASE,$(tuple))_BUILTIN))) \
> +			$(GRUB2_BUILTIN_MODULES_$(GRUB2_$(call UPPERCASE,$(tuple))_BUILTIN)) ; \
> +		$(INSTALL) -D -m 0644 boot/grub2/grub.cfg $(GRUB2_$(call UPPERCASE,$(tuple))_CFG) ; \
> +		$(if $(findstring $(GRUB2_$(call UPPERCASE,$(tuple))_PLATFORM), pc), \
> +			cat $(HOST_DIR)/lib/grub/$(tuple)/cdboot.img $(GRUB2_$(call UPPERCASE,$(tuple))_IMAGE) > \
> +				$(BINARIES_DIR)/grub-eltorito.img, \

Spurious trailing comma. You're lucky, this is interpreted as a
separator between the two 'if' clauses, providing an empty 'else'
clause. Still, please drop it.

> +		) \
> +		$(if $(findstring $(GRUB2_$(call UPPERCASE,$(tuple))_PLATFORM), efi), \
> +			echo $(notdir $(GRUB2_$(call UPPERCASE,$(tuple))_IMAGE)) > \
> +				$(BINARIES_DIR)/efi-part/startup.nsh \

For x86_64, you can now have two platforms providing the EFI stuff:
both BR2_TARGET_GRUB2_I386_EFI and BR2_TARGET_GRUB2_X86_64_EFI can now
be enabled at the same time, so the latter will replcae the former in
that startup.nsh file. This is probably not good...

> +		)
> +	)
>  endef
> -GRUB2_POST_INSTALL_IMAGES_HOOKS += GRUB2_EFI_STARTUP_NSH
> -endif
>  
> -$(eval $(autotools-package))
> +$(eval $(generic-package))

This is my main problem: we're mostly duplicating bits and pieces of the
autotolls-package infra, which means we *will* fall behind very quickly
when we have to update said infra, and those changes will not percolate
to this grub2 package.

>  $(eval $(host-autotools-package))
> diff --git a/support/testing/tests/fs/test_iso9660.py b/support/testing/tests/fs/test_iso9660.py
> index 68f4840852..fffa49caf3 100644
> --- a/support/testing/tests/fs/test_iso9660.py
> +++ b/support/testing/tests/fs/test_iso9660.py
> @@ -54,7 +54,8 @@ class TestIso9660Grub2External(infra.basetest.BRTest):
>          # BR2_TARGET_ROOTFS_ISO9660_INITRD is not set
>          BR2_TARGET_GRUB2=y
>          BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
> -        BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC=""

No need to provide an empty string here: the default *is* an empty
string.

>          BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
>          """.format(infra.filepath("conf/grub2.cfg"))
>  
> @@ -75,7 +76,8 @@ class TestIso9660Grub2ExternalCompress(infra.basetest.BRTest):
>          BR2_TARGET_ROOTFS_ISO9660_TRANSPARENT_COMPRESSION=y
>          BR2_TARGET_GRUB2=y
>          BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
> -        BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC=""

Ditto.

>          BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
>          """.format(infra.filepath("conf/grub2.cfg"))
>  
> @@ -95,7 +97,8 @@ class TestIso9660Grub2Internal(infra.basetest.BRTest):
>          BR2_TARGET_ROOTFS_ISO9660_INITRD=y
>          BR2_TARGET_GRUB2=y
>          BR2_TARGET_GRUB2_BOOT_PARTITION="cd"
> -        BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_MODULES_PC="boot linux ext2 fat part_msdos part_gpt normal biosdisk iso9660"
> +        BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC=""

Ditto.

Given the above, and given that the rest of the series )(except patches
2-3 already applied) depend on this first patch, I've marked the series
as Changes Requested in Patchwork.

Regards,
Yann E. MORIN.

>          BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="{}"
>          """.format(infra.filepath("conf/grub2.cfg"))
>  
> -- 
> 2.25.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at lists.buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the buildroot mailing list