Message ID | 20210923155726.87851-7-kory.maincent@bootlin.com |
---|---|
State | Accepted |
Headers | show |
Series | Add support for ISO9660 image compatible with Legacy and EFI BIOS | expand |
Köry, All, On 2021-09-23 17:57 +0200, Kory Maincent spake thusly: > Add support the build the firmware for QEMU i386 pc machine > > Signed-off-by: Kory Maincent <kory.maincent@bootlin.com> > --- > boot/edk2/Config.in | 12 +++++++++++- > boot/edk2/edk2.mk | 12 ++++++++++-- > 2 files changed, 21 insertions(+), 3 deletions(-) > > diff --git a/boot/edk2/Config.in b/boot/edk2/Config.in > index 150806899f..9f8988bcca 100644 > --- a/boot/edk2/Config.in > +++ b/boot/edk2/Config.in > @@ -1,6 +1,6 @@ > config BR2_TARGET_EDK2 > bool "EDK2" > - depends on BR2_x86_64 || BR2_aarch64 > + depends on BR2_x86_64 || BR2_aarch64 || BR2_i386 With three archicteures, it is now nicer to introduce a symbol dedicated to list the arch support: config BR2_TARGET_EDK2_ARCH_SUPPORTS bool default y if BR2_aarch64 default y if BR2_i386 default y if BR2_x86_64 config BR2_TARGET_EDK2 bool "edk2" depends on BR2_TARGET_EDK2_ARCH_SUPPORTS [...] > depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 > select BR2_PACKAGE_EDK2_PLATFORMS > help > @@ -13,9 +13,18 @@ if BR2_TARGET_EDK2 > > choice > prompt "Platform" > + default BR2_TARGET_EDK2_PLATFORM_OVMF_I386 if BR2_i386 > default BR2_TARGET_EDK2_PLATFORM_OVMF_X64 if BR2_x86_64 > default BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU if BR2_aarch64 > > +config BR2_TARGET_EDK2_PLATFORM_OVMF_I386 > + bool "i386" > + depends on BR2_i386 || BR2_x86_64 So, I was wondering on the above could work [...] > + help > + Platform configuration for a generic i386 target. > + This platform will boot from flash address 0x0. > + It should therefore be used as the first bootloader. > + > config BR2_TARGET_EDK2_PLATFORM_OVMF_X64 > bool "x86-64" > depends on BR2_x86_64 > @@ -94,6 +103,7 @@ endchoice > > config BR2_TARGET_EDK2_FD_NAME > string > + default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_I386 > default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_X64 > default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU > default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL > diff --git a/boot/edk2/edk2.mk b/boot/edk2/edk2.mk > index fabd0c5b45..ab3cdad464 100644 > --- a/boot/edk2/edk2.mk > +++ b/boot/edk2/edk2.mk > @@ -14,7 +14,9 @@ EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux > EDK2_INSTALL_TARGET = NO > EDK2_INSTALL_IMAGES = YES > > -ifeq ($(BR2_x86_64),y) > +ifeq ($(BR2_i386),y) > +EDK2_ARCH = IA32 > +else ifeq ($(BR2_x86_64),y) [...] with these settings when the target is actually an x86_64. So I came up with this minimal defconfig: BR2_x86_64=y BR2_x86_corei7=y BR2_TOOLCHAIN_EXTERNAL=y BR2_TARGET_EDK2=y BR2_TARGET_EDK2_PLATFORM_OVMF_I386=y And indeed, it does not work: $ make edk2 [...] >>> edk2 edk2-stable202102 Building [...] Ran 285 tests in 1.458s OK Build environment: Linux-5.4.0-84-generic-x86_64-with-glibc2.31 Build start time: 21:35:13, Sep.30 2021 WORKSPACE = /home/ymorin/dev/buildroot/O/build/edk2-edk2-stable202102 PACKAGES_PATH = /home/ymorin/dev/buildroot/O/build/edk2-edk2-stable202102:/home/ymorin/dev/buildroot/O> EDK_TOOLS_PATH = /home/ymorin/dev/buildroot/O/build/edk2-edk2-stable202102/BaseTools CONF_PATH = /home/ymorin/dev/buildroot/O/build/edk2-edk2-stable202102/Conf PYTHON_COMMAND = /home/ymorin/dev/buildroot/O/host/bin/python3 build.py... : error 2000: Invalid parameter Invalid ARCH specified. [Valid ARCH: IA32] - Failed - Build end time: 21:35:13, Sep.30 2021 Build total time: 00:00:00 make[1]: *** [package/pkg-generic.mk:294: /home/ymorin/dev/buildroot/O/build/edk2-edk2-stable202102/.stamp_built] Error 1 make: *** [Makefile:23: _all] Error 2 Setting EDK2_ARCH to IA32 fixes the build, but I have no way to know if the build is "correct"... So, in this case, I think the EDK2_ARCH should depend on one of the BR2_TARGET_EDK2_PLATFORM_OVMF_xxx, not the target architecture. Alternatively, we could maybe restrict BR2_TARGET_EDK2_PLATFORM_OVMF_I386 to just i386? Regards, Yann E. MORIN. > EDK2_ARCH = X64 > else ifeq ($(BR2_aarch64),y) > EDK2_ARCH = AARCH64 > @@ -55,7 +57,13 @@ EDK2_GIT_SUBMODULES = YES > EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot > EDK2_PACKAGES_PATH = $(@D):$(EDK2_BUILD_PACKAGES):$(STAGING_DIR)/usr/share/edk2-platforms > > -ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) > +ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y) > +EDK2_DEPENDENCIES += host-nasm > +EDK2_PACKAGE_NAME = OvmfPkg > +EDK2_PLATFORM_NAME = OvmfPkgIa32 > +EDK2_BUILD_DIR = OvmfIa32 > + > +else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) > EDK2_DEPENDENCIES += host-nasm > EDK2_PACKAGE_NAME = OvmfPkg > EDK2_PLATFORM_NAME = OvmfPkgX64 > -- > 2.25.1 > > _______________________________________________ > buildroot mailing list > buildroot@lists.buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot
Köry, All, On 2021-09-23 17:57 +0200, Kory Maincent spake thusly: > Add support the build the firmware for QEMU i386 pc machine > > Signed-off-by: Kory Maincent <kory.maincent@bootlin.com> > --- > boot/edk2/Config.in | 12 +++++++++++- > boot/edk2/edk2.mk | 12 ++++++++++-- > 2 files changed, 21 insertions(+), 3 deletions(-) > > diff --git a/boot/edk2/Config.in b/boot/edk2/Config.in > index 150806899f..9f8988bcca 100644 > --- a/boot/edk2/Config.in > +++ b/boot/edk2/Config.in > @@ -1,6 +1,6 @@ > config BR2_TARGET_EDK2 > bool "EDK2" > - depends on BR2_x86_64 || BR2_aarch64 > + depends on BR2_x86_64 || BR2_aarch64 || BR2_i386 > depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 > select BR2_PACKAGE_EDK2_PLATFORMS > help > @@ -13,9 +13,18 @@ if BR2_TARGET_EDK2 > > choice > prompt "Platform" > + default BR2_TARGET_EDK2_PLATFORM_OVMF_I386 if BR2_i386 > default BR2_TARGET_EDK2_PLATFORM_OVMF_X64 if BR2_x86_64 > default BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU if BR2_aarch64 > > +config BR2_TARGET_EDK2_PLATFORM_OVMF_I386 > + bool "i386" > + depends on BR2_i386 || BR2_x86_64 As there was a build failure with BR2_x86_64=y, I've just dropped that possibility: BR2_TARGET_EDK2_PLATFORM_OVMF_I386 is only available for BR2_i386. If you have the opportunity/need to look into that, a further patch is most welcome! Applied to master, thanks. Regards, Yann E. MORIN. > + help > + Platform configuration for a generic i386 target. > + This platform will boot from flash address 0x0. > + It should therefore be used as the first bootloader. > + > config BR2_TARGET_EDK2_PLATFORM_OVMF_X64 > bool "x86-64" > depends on BR2_x86_64 > @@ -94,6 +103,7 @@ endchoice > > config BR2_TARGET_EDK2_FD_NAME > string > + default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_I386 > default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_X64 > default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU > default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL > diff --git a/boot/edk2/edk2.mk b/boot/edk2/edk2.mk > index fabd0c5b45..ab3cdad464 100644 > --- a/boot/edk2/edk2.mk > +++ b/boot/edk2/edk2.mk > @@ -14,7 +14,9 @@ EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux > EDK2_INSTALL_TARGET = NO > EDK2_INSTALL_IMAGES = YES > > -ifeq ($(BR2_x86_64),y) > +ifeq ($(BR2_i386),y) > +EDK2_ARCH = IA32 > +else ifeq ($(BR2_x86_64),y) > EDK2_ARCH = X64 > else ifeq ($(BR2_aarch64),y) > EDK2_ARCH = AARCH64 > @@ -55,7 +57,13 @@ EDK2_GIT_SUBMODULES = YES > EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot > EDK2_PACKAGES_PATH = $(@D):$(EDK2_BUILD_PACKAGES):$(STAGING_DIR)/usr/share/edk2-platforms > > -ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) > +ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y) > +EDK2_DEPENDENCIES += host-nasm > +EDK2_PACKAGE_NAME = OvmfPkg > +EDK2_PLATFORM_NAME = OvmfPkgIa32 > +EDK2_BUILD_DIR = OvmfIa32 > + > +else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) > EDK2_DEPENDENCIES += host-nasm > EDK2_PACKAGE_NAME = OvmfPkg > EDK2_PLATFORM_NAME = OvmfPkgX64 > -- > 2.25.1 > > _______________________________________________ > buildroot mailing list > buildroot@lists.buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot
Yann, On Sun, 3 Oct 2021 14:49:00 +0200 "Yann E. MORIN" <yann.morin.1998@free.fr> wrote: > > +config BR2_TARGET_EDK2_PLATFORM_OVMF_I386 > > + bool "i386" > > + depends on BR2_i386 || BR2_x86_64 > > As there was a build failure with BR2_x86_64=y, I've just dropped that > possibility: BR2_TARGET_EDK2_PLATFORM_OVMF_I386 is only available for > BR2_i386. > > If you have the opportunity/need to look into that, a further patch is > most welcome! Found! The issue is that EDK2_ARCH is configured for X64 even when we select the BR2_TARGET_EDK2_PLATFORM_OVMF_I386 configuration. > > else ifeq ($(BR2_x86_64),y) > > EDK2_ARCH = X64 I will send a patch to fix this. Regards, Köry
diff --git a/boot/edk2/Config.in b/boot/edk2/Config.in index 150806899f..9f8988bcca 100644 --- a/boot/edk2/Config.in +++ b/boot/edk2/Config.in @@ -1,6 +1,6 @@ config BR2_TARGET_EDK2 bool "EDK2" - depends on BR2_x86_64 || BR2_aarch64 + depends on BR2_x86_64 || BR2_aarch64 || BR2_i386 depends on BR2_TOOLCHAIN_GCC_AT_LEAST_5 select BR2_PACKAGE_EDK2_PLATFORMS help @@ -13,9 +13,18 @@ if BR2_TARGET_EDK2 choice prompt "Platform" + default BR2_TARGET_EDK2_PLATFORM_OVMF_I386 if BR2_i386 default BR2_TARGET_EDK2_PLATFORM_OVMF_X64 if BR2_x86_64 default BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU if BR2_aarch64 +config BR2_TARGET_EDK2_PLATFORM_OVMF_I386 + bool "i386" + depends on BR2_i386 || BR2_x86_64 + help + Platform configuration for a generic i386 target. + This platform will boot from flash address 0x0. + It should therefore be used as the first bootloader. + config BR2_TARGET_EDK2_PLATFORM_OVMF_X64 bool "x86-64" depends on BR2_x86_64 @@ -94,6 +103,7 @@ endchoice config BR2_TARGET_EDK2_FD_NAME string + default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_I386 default "OVMF" if BR2_TARGET_EDK2_PLATFORM_OVMF_X64 default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU default "QEMU_EFI" if BR2_TARGET_EDK2_PLATFORM_ARM_VIRT_QEMU_KERNEL diff --git a/boot/edk2/edk2.mk b/boot/edk2/edk2.mk index fabd0c5b45..ab3cdad464 100644 --- a/boot/edk2/edk2.mk +++ b/boot/edk2/edk2.mk @@ -14,7 +14,9 @@ EDK2_DEPENDENCIES = edk2-platforms host-python3 host-acpica host-util-linux EDK2_INSTALL_TARGET = NO EDK2_INSTALL_IMAGES = YES -ifeq ($(BR2_x86_64),y) +ifeq ($(BR2_i386),y) +EDK2_ARCH = IA32 +else ifeq ($(BR2_x86_64),y) EDK2_ARCH = X64 else ifeq ($(BR2_aarch64),y) EDK2_ARCH = AARCH64 @@ -55,7 +57,13 @@ EDK2_GIT_SUBMODULES = YES EDK2_BUILD_PACKAGES = $(@D)/Build/Buildroot EDK2_PACKAGES_PATH = $(@D):$(EDK2_BUILD_PACKAGES):$(STAGING_DIR)/usr/share/edk2-platforms -ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) +ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_I386),y) +EDK2_DEPENDENCIES += host-nasm +EDK2_PACKAGE_NAME = OvmfPkg +EDK2_PLATFORM_NAME = OvmfPkgIa32 +EDK2_BUILD_DIR = OvmfIa32 + +else ifeq ($(BR2_TARGET_EDK2_PLATFORM_OVMF_X64),y) EDK2_DEPENDENCIES += host-nasm EDK2_PACKAGE_NAME = OvmfPkg EDK2_PLATFORM_NAME = OvmfPkgX64
Add support the build the firmware for QEMU i386 pc machine Signed-off-by: Kory Maincent <kory.maincent@bootlin.com> --- boot/edk2/Config.in | 12 +++++++++++- boot/edk2/edk2.mk | 12 ++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-)