Vladimir Serbinenko (phcoder@gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4058
-gerrit
commit a0e144b9cc31129e2194b66ad6b30bd54706ec10 Author: Vladimir Serbinenko phcoder@gmail.com Date: Thu Nov 14 12:10:08 2013 +0100
Add GRUB2 payload to build system
Tested with qemu
Change-Id: Ie75d5a2cb230390cd5a063d5f6a5d5e3fab6b354 Signed-off-by: Vladimir Serbinenko phcoder@gmail.com --- .gitignore | 1 + payloads/external/GRUB2/Makefile.inc | 43 ++++++++++++++++++++++++++++++++++++ src/Kconfig | 24 ++++++++++++++++++++ src/arch/x86/Makefile.inc | 18 +++++++++++++++ 4 files changed, 86 insertions(+)
diff --git a/.gitignore b/.gitignore index 1cdabfc..da87fa2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ coreboot-builds/ payloads/external/FILO/filo/ +payloads/external/GRUB2/grub2/ payloads/external/SeaBIOS/seabios/ util/crossgcc/acpica-unix-*/ util/crossgcc/binutils-*/ diff --git a/payloads/external/GRUB2/Makefile.inc b/payloads/external/GRUB2/Makefile.inc new file mode 100644 index 0000000..888151d --- /dev/null +++ b/payloads/external/GRUB2/Makefile.inc @@ -0,0 +1,43 @@ +TAG-$(CONFIG_GRUB2_MASTER)= +NAME-$(CONFIG_GRUB2_MASTER)=HEAD + +unexport KCONFIG_AUTOCONFIG + +all: grub2 + +checkout: + echo " GIT GRUB2 $(NAME-y)" + test -d grub2 || \ + git clone git://git.sv.gnu.org/grub.git grub2 + cd grub2 && \ + git checkout master && \ + git pull; \ + test -n "$(TAG-y)" && \ + git branch -f $(NAME-y) $(TAG-y) && \ + git checkout $(NAME-y) || true + +config: checkout + echo " CONFIG GRUB2 $(NAME-y)" + rm -rf grub2/build + mkdir grub2/build + cd grub2 && ./autogen.sh + cd grub2/build && ../configure BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \ + TARGET_CC="$(CC)" \ + TARGET_OBJCOPY="$(OBJCOPY)" TARGET_STRIP="$(STRIP)" CFLAGS=-O2 TARGET_CFLAGS=-Os --with-platform=coreboot + +grub2: config + echo " MAKE GRUB2 $(NAME-y)" + $(MAKE) -C grub2/build BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \ + TARGET_CC="$(CC)" TARGET_OBJCOPY="$(OBJCOPY)" \ + TARGET_STRIP="$(STRIP)" CFLAGS=-O2 TARGET_CFLAGS=-Os \ + && $(MAKE) -C grub2/build BUILD_CC="$(HOSTCC)" CC="$(HOSTCC)" \ + TARGET_CC="$(CC)" TARGET_OBJCOPY="$(OBJCOPY)" TARGET_STRIP="$(STRIP)" \ + CFLAGS=-O2 TARGET_CFLAGS=-Os default_payload.elf + +clean: + test -d grub2 && $(MAKE) -C grub2 clean || exit 0 + +distclean: + rm -rf grub2 + +.PHONY: checkout config grub2 clean distclean diff --git a/src/Kconfig b/src/Kconfig index 10f8c18..fac0eeb 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -569,6 +569,15 @@ config PAYLOAD_FILO
See http://coreboot.org/Payloads for more information.
+config PAYLOAD_GRUB2 + bool "GRUB2" + help + Select this option if you want to build a coreboot image + with a GRUB2 payload. If you don't know what this is + about, just leave it enabled. + + See http://coreboot.org/Payloads for more information. + config PAYLOAD_TIANOCORE bool "Tiano Core" help @@ -606,6 +615,17 @@ config SEABIOS_PS2_TIMEOUT keyboard controller to become ready before giving up.
choice + prompt "GRUB2 version" + default GRUB2_MASTER + depends on PAYLOAD_GRUB2 + +config GRUB2_MASTER + bool "HEAD" + help + Newest GRUB2 version +endchoice + +choice prompt "FILO version" default FILO_STABLE depends on PAYLOAD_FILO @@ -643,6 +663,10 @@ config PAYLOAD_FILE default "payloads/external/FILO/filo/build/filo.elf"
config PAYLOAD_FILE + depends on PAYLOAD_GRUB2 + default "payloads/external/GRUB2/grub2/build/default_payload.elf" + +config PAYLOAD_FILE string "Tianocore firmware volume" depends on PAYLOAD_TIANOCORE default "COREBOOT.fd" diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index dee56c5..be53c1b 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -48,6 +48,9 @@ endif ifeq ($(CONFIG_PAYLOAD_FILO),y) COREBOOT_ROM_DEPENDENCIES+=filo endif +ifeq ($(CONFIG_PAYLOAD_GRUB2),y) +COREBOOT_ROM_DEPENDENCIES+=grub2 +endif
extract_nth=$(word $(1), $(subst |, ,$(2)))
@@ -113,6 +116,12 @@ ifeq ($(CONFIG_PAYLOAD_FILO),y) @printf " PAYLOAD FILO (internal, compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n" $(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG) endif + +ifeq ($(CONFIG_PAYLOAD_GRUB2),y) + @printf " PAYLOAD GRUB2 (internal, compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n" + $(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG) +endif + ifeq ($(CONFIG_PAYLOAD_TIANOCORE),y) @printf " PAYLOAD Tiano Core (compression: $(CBFS_PAYLOAD_COMPRESS_FLAG))\n" $(CBFSTOOL) $@.tmp add-payload -f $(CONFIG_PAYLOAD_FILE) -n $(CONFIG_CBFS_PREFIX)/payload -c $(CBFS_PAYLOAD_COMPRESS_FLAG) @@ -440,3 +449,12 @@ filo: CONFIG_FILO_MASTER=$(CONFIG_FILO_MASTER) \ CONFIG_FILO_STABLE=$(CONFIG_FILO_STABLE)
+ +grub2: + $(MAKE) -C payloads/external/GRUB2 -f Makefile.inc \ + HOSTCC="$(HOSTCC)" \ + CC="$(CC)" LD="$(LD)" OBJDUMP="$(OBJDUMP)" \ + OBJCOPY="$(OBJCOPY)" STRIP="$(STRIP)" \ + CONFIG_GRUB2_MASTER=$(CONFIG_GRUB2_MASTER) \ + CONFIG_GRUB2_STABLE=$(CONFIG_GRUB2_STABLE) +