x86: add support for building grub2 images

SVN-Revision: 33513
lede-17.01
Felix Fietkau 2012-09-22 20:10:42 +00:00
parent cc13232904
commit 52e8ee0666
4 changed files with 56 additions and 3 deletions

View File

@ -17,9 +17,14 @@ config X86_GRUB_IMAGES
bool "Build GRUB images (Linux x86 or x86_64 host only)" bool "Build GRUB images (Linux x86 or x86_64 host only)"
depends TARGET_x86 && !TARGET_x86_olpc depends TARGET_x86 && !TARGET_x86_olpc
depends TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS depends TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
select PACKAGE_grub select PACKAGE_grub if !X86_USE_GRUB2
default y default y
config X86_USE_GRUB2
bool "Use grub2"
depends X86_GRUB_IMAGES
select PACKAGE_grub2
config X86_GRUB_CONSOLE config X86_GRUB_CONSOLE
bool "Use Console Terminal (in addition to Serial)" bool "Use Console Terminal (in addition to Serial)"
depends X86_GRUB_IMAGES depends X86_GRUB_IMAGES

View File

@ -9,6 +9,7 @@ include $(INCLUDE_DIR)/image.mk
export PATH=$(TARGET_PATH):/sbin export PATH=$(TARGET_PATH):/sbin
GRUB2_MODULES = at_keyboard biosdisk boot chain configfile ext2 linux ls part_msdos reboot serial vga
GRUB_TERMINALS = GRUB_TERMINALS =
GRUB_SERIAL_CONFIG = GRUB_SERIAL_CONFIG =
GRUB_TERMINAL_CONFIG = GRUB_TERMINAL_CONFIG =
@ -26,7 +27,11 @@ ifneq ($(CONFIG_X86_GRUB_SERIAL),)
endif endif
ifneq ($(GRUB_TERMINALS),) ifneq ($(GRUB_TERMINALS),)
GRUB_TERMINAL_CONFIG := terminal --timeout=2 $(GRUB_TERMINALS) ifneq ($(CONFIG_X86_USE_GRUB2),)
GRUB_TERMINAL_CONFIG := terminal_input $(GRUB_TERMINALS); terminal_output $(GRUB_TERMINALS)
else
GRUB_TERMINAL_CONFIG := terminal --timeout=2 $(GRUB_TERMINALS)
endif
endif endif
ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME)) ROOTPART:=$(call qstrip,$(CONFIG_TARGET_ROOTFS_PARTNAME))
@ -85,6 +90,35 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),)
$(KDIR)/ $(KDIR)/
endef endef
define Image/Build/grub2
# left here because the image builder doesnt need these
$(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2
$(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz
grub-mkimage \
-o $(KDIR)/grub2/core.img \
-O i386-pc \
-c ./grub-early.cfg \
$(GRUB2_MODULES)
$(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/grub2/
echo '(hd0) $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img' > $(KDIR)/grub2/device.map
sed \
-e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
-e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \
-e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \
-e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
PADDING="$(CONFIG_TARGET_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_generic.sh \
$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
$(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \
$(CONFIG_TARGET_ROOTFS_PARTSIZE) $(KDIR)/root.$(1) \
256
grub-bios-setup \
--device-map="$(KDIR)/grub2/device.map" \
-d "$(KDIR)/grub2" \
-r "hd0,msdos1" \
"$(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img"
$(call Image/Build/grub/$(1))
endef
endif endif
ROOTDELAY=10 ROOTDELAY=10
@ -210,7 +244,7 @@ define Image/Build
$(call Image/Build/$(1)) $(call Image/Build/$(1))
$(call Image/Build/bootscript,$(1)) $(call Image/Build/bootscript,$(1))
ifneq ($(1),iso) ifneq ($(1),iso)
$(call Image/Build/grub,$(1)) $(call Image/Build/$(if $(CONFIG_X86_USE_GRUB2),grub2,grub),$(1))
$(call Image/Build/vdi,$(1)) $(call Image/Build/vdi,$(1))
$(call Image/Build/vmdk,$(1)) $(call Image/Build/vmdk,$(1))
endif endif

View File

@ -0,0 +1 @@
configfile (hd0,msdos1)/boot/grub/grub.cfg

View File

@ -0,0 +1,13 @@
@SERIAL_CONFIG@
@TERMINAL_CONFIG@
set default="0"
set timeout="@TIMEOUT@"
set root='(hd0,msdos1)'
menuentry "OpenWrt" {
linux /boot/vmlinuz @CMDLINE@ noinitrd reboot=bios
}
menuentry "OpenWrt (failsafe)" {
linux /boot/vmlinuz failsafe=true @CMDLINE@ noinitrd reboot=bios
}