Previously, grub-mkimage embeds full-featured grub.cfg inside core.img
during efi image generation phase (target/linux/install).

This causes grub to not passing kernel command line to the kernel, which
causes kernel panic when the generated gpt image is booted on bios mode
because the kernel doesn't find the root partition.

Fixing the problem involves using minimal grub-early.cfg to embed inside
grub's core.img to load the full-featured grub.cfg later.

grub-early.cfg contains one configuration line:

  configfile (hd0,gpt1)/boot/grub/grub.cfg

With this change, the generated gpt image should be bootable on both
bios and UEFI based systems.

Signed-off-by: Alif M. Ahmad <alive4e...@live.com>
---

Notes:
    This patch is based on Jow's staging repository instead of OpenWrt master 
branch.
    
    Hopefully, this would allow UEFI image generation for x86 targets, i.e. to 
get
    changes on Jow's staging repository merged into OpenWrt master branch

 target/linux/x86/image/Makefile | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
index d5786fb2ad..c8dd94dc78 100644
--- a/target/linux/x86/image/Makefile
+++ b/target/linux/x86/image/Makefile
@@ -86,13 +86,17 @@ ifneq ($(CONFIG_GRUB_IMAGES)$(CONFIG_EFI_IMAGES),)
                -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
                -e 's#set root.*#search --file /boot/grub/$(SIGNATURE).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 \
                -O i386-pc \
                -p '(hd0,gpt1)/boot/grub' \
-               -c $(KDIR)/root.grub/boot/grub/grub.cfg \
+               -c $(KDIR)/root.grub/boot/grub/grub-early.cfg \
                $(GRUB2_MODULES_LEGACY)
        $(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/grub2/
 
-- 
2.16.2
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to