Discussion:
[PATCH 2/2] x86: simplify efi image generation process
(too old to reply)
Alif M. Ahmad
2018-03-04 01:41:28 UTC
Permalink
Currently, efi image generation involves a hacky approach to find the
grub root partition, i.e. using $(SIGNATURE).cfg as additional
configuration file.

This commit simplify efi image generation by removing $(SIGNATURE).cfg
file and use single /boot/grub/grub.cfg for grub external configuration.

This commit also removes unnecessary grub-bios-setup during efi image
generation and only perform grub-bios-setup after the disk image has
been converted into gpt.

Signed-off-by: Alif M. Ahmad <***@live.com>
---
target/linux/x86/image/Makefile | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)

diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
index c8dd94dc78..2efb9dbbf9 100644
--- a/target/linux/x86/image/Makefile
+++ b/target/linux/x86/image/Makefile
@@ -84,13 +84,12 @@ ifneq ($(CONFIG_GRUB_IMAGES)$(CONFIG_EFI_IMAGES),)
-e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
-e 's#@CMDLINE@#$(strip $(call Image/cmdline/efi,$(1),$(EFI_SIGNATURE)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \
-e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
- -e 's#set root.*#search --file /boot/grub/$(SIGNATURE).cfg --set=root#g' \
+ -e 's#set root.*#search --file /boot/grub/grub.cfg --set=root#g' \
./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
sed \
-e 's/(hd0,msdos1)/(hd0,gpt1)/' ./grub-early.cfg > \
$(KDIR)/root.grub/boot/grub/grub-early.cfg

- $(CP) $(KDIR)/root.grub/boot/grub/grub.cfg $(KDIR)/root.grub/boot/grub/$(SIGNATURE).cfg
grub-mkimage \
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
-o $(KDIR)/grub2/core.img \
@@ -104,20 +103,19 @@ ifneq ($(CONFIG_GRUB_IMAGES)$(CONFIG_EFI_IMAGES),)
rm -rf $(KDIR)/grub2.efi/ || true
$(INSTALL_DIR) $(KDIR)/grub2.efi/efi/boot/

- # Generate the grub search root config (grub will search for the $(SIGNATURE).cfg file placed on the boot partition as grub does not support search of GPT UUID yet)
- echo "search --file /boot/grub/$(SIGNATURE).cfg --set=root" > $(KDIR)/grub2.efi/efi/boot/grub.cfg
- echo "configfile /boot/grub/grub.cfg" >> $(KDIR)/grub2.efi/efi/boot/grub.cfg
-
# Create the EFI grub binary
grub-mkimage-efi \
-d $(STAGING_DIR_HOST)/lib/grub/x86_64-efi \
-o $(KDIR)/grub2.efi/efi/boot/bootx64.efi \
-O x86_64-efi \
-p /efi/boot \
- -c $(KDIR)/grub2.efi/efi/boot/grub.cfg \
+ -c $(KDIR)/root.grub/boot/grub/grub-early.cfg \
$(GRUB2_MODULES_EFI)

- # Generate the EFI VFAT bootfs
+ # remove grub-early.cfg, since it has been embedded inside grub's core.img
+ rm -f $(KDIR)/root.grub/boot/grub/grub-early.cfg
+
+ # Generate EFI boot partition
rm $(KDIR)/kernel.efi || true
mkfs.fat -C $(KDIR)/kernel.efi -S 512 1024
mcopy -s -i "$(KDIR)/kernel.efi" $(KDIR)/grub2.efi/* ::/
@@ -130,13 +128,6 @@ ifneq ($(CONFIG_GRUB_IMAGES)$(CONFIG_EFI_IMAGES),)
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \
256

- # Setup legacy bios for hybrid MBR (optional)
- grub-bios-setup \
- --device-map="$(KDIR)/grub2/device.map" \
- -d "$(KDIR)/grub2" \
- -r "hd0,msdos1" \
- "$(BIN_DIR)/$(IMG_PREFIX)-uefi-gpt-$(1).img"
-
# Convert the MBR partition to GPT and set EFI ROOTFS signature
dd if=/dev/zero of="$(BIN_DIR)/$(IMG_PREFIX)-uefi-gpt-$(1).img" bs=512 count=33 conv=notrunc oflag=append
sgdisk -g "$(BIN_DIR)/$(IMG_PREFIX)-uefi-gpt-$(1).img"
@@ -145,7 +136,7 @@ ifneq ($(CONFIG_GRUB_IMAGES)$(CONFIG_EFI_IMAGES),)
sgdisk -u 4:$(EFI_SIGNATURE) "$(BIN_DIR)/$(IMG_PREFIX)-uefi-gpt-$(1).img"
sgdisk -h "$(BIN_DIR)/$(IMG_PREFIX)-uefi-gpt-$(1).img"

- # Setup EFI grub
+ # Setup legacy bios boot support
grub-bios-setup-efi \
--device-map="$(KDIR)/grub2/device.map" \
-d "$(KDIR)/grub2" \
--
2.16.2
Alif M. Ahmad
2018-03-26 06:13:21 UTC
Permalink
Hi Jo,

Could you apply this patch on top of uefi related changes as well so
grub bootloader will have the same configuration for both uefi and bios
boot on the resulting gpt image.
Post by Alif M. Ahmad
Currently, efi image generation involves a hacky approach to find the
grub root partition, i.e. using $(SIGNATURE).cfg as additional
configuration file.
This commit simplify efi image generation by removing $(SIGNATURE).cfg
file and use single /boot/grub/grub.cfg for grub external configuration.
This commit also removes unnecessary grub-bios-setup during efi image
generation and only perform grub-bios-setup after the disk image has
been converted into gpt.
---
target/linux/x86/image/Makefile | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
Loading...