Skip to contentSkip to conversation

Build El Torito for i386 PC

PATCH New Kinsella 2 participants 3 messages Jul 29, 2015 – Jul 31, 2015

lore
Share & tools
lore

Kinsella

#0 lore raw

PATCH v2 1/1 Build El Torito for i386 PC

Building Grub2 El Torito for i386 EFI errors complaining it cannot find cdboot.img

cdboot.img: No such file or directory

This commit builds El Torito for i386 PC only

---
 boot/grub2/grub2.mk | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
boot/grub2/grub2.mk +8 -2
index 280b4d6..7e0f31f 100644
@@ -67,6 +67,14 @@ GRUB2_CONF_OPTS = \
 
 GRUB2_INSTALL_TARGET_OPTS = DESTDIR=$(HOST_DIR) install
 
+ifeq ($(BR2_TARGET_GRUB2_I386_PC),y)
+define GRUB2_IMAGE_INSTALL_ELTORITO
+	cat $(HOST_DIR)/usr/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \
+		$(BINARIES_DIR)/grub-eltorito.img
+endef
+GRUB2_POST_INSTALL_TARGET_HOOKS += GRUB2_IMAGE_INSTALL_ELTORITO
+endif
+
 define GRUB2_IMAGE_INSTALLATION
 	mkdir -p $(dir $(GRUB2_IMAGE))
 	$(HOST_DIR)/usr/bin/grub-mkimage \
@@ -76,8 +84,6 @@ define GRUB2_IMAGE_INSTALLATION
 		-p "$(GRUB2_PREFIX)" \
 		$(if $(GRUB2_BUILTIN_CONFIG),-c $(GRUB2_BUILTIN_CONFIG)) \
 		$(GRUB2_BUILTIN_MODULES)
-	cat $(HOST_DIR)/usr/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \
-		$(BINARIES_DIR)/grub-eltorito.img
 	mkdir -p $(dir $(GRUB2_CFG))
 	$(INSTALL) -D -m 0644 boot/grub2/grub.cfg $(GRUB2_CFG)
 endef
Signature · 1 line
2.1.0
#1 lore raw

PATCH v2 1/1 Build El Torito for i386 PC

Dear Kinsella, Ray,

Quoted 7 lines · Ray

Building Grub2 El Torito for i386 EFI errors complaining it cannot find cdboot.img

cdboot.img: No such file or directory

This commit builds El Torito for i386 PC only

The title of the patch should have been:

grub2: build El Torito image only for i386 PC

We want all commit titles to be prefixed by the name of the package the commit is touching.

Quoted 12 lines
boot/grub2/grub2.mk +8 -0
+ifeq ($(BR2_TARGET_GRUB2_I386_PC),y)
+define GRUB2_IMAGE_INSTALL_ELTORITO
+	cat $(HOST_DIR)/usr/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \
+		$(BINARIES_DIR)/grub-eltorito.img
+endef
+GRUB2_POST_INSTALL_TARGET_HOOKS += GRUB2_IMAGE_INSTALL_ELTORITO
+endif
+
 define GRUB2_IMAGE_INSTALLATION
 	mkdir -p $(dir $(GRUB2_IMAGE))
 	$(HOST_DIR)/usr/bin/grub-mkimage \

boot/grub2/grub2.mk define GRUB2_IMAGE_INSTALLATION · line 89

Quoted 8 lines
boot/grub2/grub2.mk +0 -2
@@ -76,8 +84,6 @@ define GRUB2_IMAGE_INSTALLATION
 		-p "$(GRUB2_PREFIX)" \
 		$(if $(GRUB2_BUILTIN_CONFIG),-c $(GRUB2_BUILTIN_CONFIG)) \
 		$(GRUB2_BUILTIN_MODULES)
-	cat $(HOST_DIR)/usr/lib/grub/$(GRUB2_TUPLE)/cdboot.img $(GRUB2_IMAGE) > \
-		$(BINARIES_DIR)/grub-eltorito.img
 	mkdir -p $(dir $(GRUB2_CFG))
 	$(INSTALL) -D -m 0644 boot/grub2/grub.cfg $(GRUB2_CFG)
 endef

And I tested your patch, and it fails to build. So it seems like you did not test it properly. The reason is that the $(GRUB2_IMAGE) used by your new post-install hook is not generated until the next post-install hook (the existing GRUB2_IMAGE_INSTALLATION function) gets executed. But this hook is afterwards.

So I changed the implementation to simply make the GRUB2_IMAGE_INSTALLATION function call GRUB2_IMAGE_INSTALL_ELTORITO.

I applied your patch with those changes, see:

http://git.buildroot.net/buildroot/commit/?id=8f609ed603220e0ac0ef9a45b0214eb87ab85d1e

Thanks for this contribution!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH v2 1/1 Build El Torito for i386 PC

Hi Thomas,

Quoted 2 lines

And I tested your patch, and it fails to build. So it seems like you did not test it properly.

humble apologies, I thought it was fine - clearly I made a mistake somewhere.

Quoted 4 lines

The reason is that the $(GRUB2_IMAGE) used by
your new post-install hook is not generated until the next post-install hook (the existing GRUB2_IMAGE_INSTALLATION function) gets executed. But this hook is afterwards.

Moving ELTORITO to after GRUB2_IMAGE_INSTALLATION would have fixed it also
then. I originally had my code exactly like this yours then didn't want to
pollute GRUB2_IMAGE_INSTALLATION with the GRUB2_IMAGE_INSTALL_ELTORITO which
may be empty.

Quoted 3 lines

So I changed the implementation to simply make the GRUB2_IMAGE_INSTALLATION function call GRUB2_IMAGE_INSTALL_ELTORITO.

np, small change.

Thanks,

Ray K