[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] add upstream GRUB to the Xen build system
Clone and build upstream GRUB to generate x86_64 and i386 pvgrub2 binaries. See Ian's blog post for more information: https://blog.xenproject.org/2015/01/07/using-grub-2-as-a-bootloader-for-xen-pv-guests/ Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> --- Config.mk | 3 ++ tools/Makefile | 1 + tools/pvgrub2/Makefile | 68 ++++++++++++++++++++++++++++++++++++++ tools/pvgrub2/grub-bootstrap.cfg | 1 + tools/pvgrub2/grub.cfg | 21 ++++++++++++ 5 files changed, 94 insertions(+) create mode 100644 tools/pvgrub2/Makefile create mode 100644 tools/pvgrub2/grub-bootstrap.cfg create mode 100644 tools/pvgrub2/grub.cfg diff --git a/Config.mk b/Config.mk index b243fac..907d79e 100644 --- a/Config.mk +++ b/Config.mk @@ -246,16 +246,19 @@ QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-upstream-unstable.git QEMU_TRADITIONAL_URL ?= http://xenbits.xen.org/git-http/qemu-xen-unstable.git SEABIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/seabios.git MINIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/mini-os.git +GRUB_UPSTREAM_URL ?= http://git.savannah.gnu.org/r/grub.git else OVMF_UPSTREAM_URL ?= git://xenbits.xen.org/ovmf.git QEMU_UPSTREAM_URL ?= git://xenbits.xen.org/qemu-upstream-unstable.git QEMU_TRADITIONAL_URL ?= git://xenbits.xen.org/qemu-xen-unstable.git SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git MINIOS_UPSTREAM_URL ?= git://xenbits.xen.org/mini-os.git +GRUB_UPSTREAM_URL ?= git://git.savannah.gnu.org/grub.git endif OVMF_UPSTREAM_REVISION ?= a065efc7c7ce8bb3e5cb3e463099d023d4a92927 QEMU_UPSTREAM_REVISION ?= master MINIOS_UPSTREAM_REVISION ?= edfd5aae6ec5ba7d0a8834a3e9dfe5e69424150a +GRUB_UPSTREAM_REVISION ?= master # Thu Mar 12 19:08:05 2015 +0100 # Fix accidentally removed brace causing a build error. diff --git a/tools/Makefile b/tools/Makefile index 5d7a75f..f58da71 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -32,6 +32,7 @@ SUBDIRS-y += libxl SUBDIRS-$(CONFIG_X86) += xenpaging SUBDIRS-$(CONFIG_X86) += debugger/gdbsx SUBDIRS-$(CONFIG_X86) += debugger/kdd +SUBDIRS-$(CONFIG_X86) += pvgrub2 SUBDIRS-$(CONFIG_TESTS) += tests # These don't cross-compile diff --git a/tools/pvgrub2/Makefile b/tools/pvgrub2/Makefile new file mode 100644 index 0000000..79860e3 --- /dev/null +++ b/tools/pvgrub2/Makefile @@ -0,0 +1,68 @@ +XEN_ROOT = $(CURDIR)/../.. +include $(XEN_ROOT)/tools/Rules.mk + +TARGET64 := grub-x86_64-xen +TARGET32 := grub-i386-xen +INST_DIR := $(DESTDIR)$(XENFIRMWAREDIR) + +grub-dir: + GIT=$(GIT) $(XEN_ROOT)/scripts/git-checkout.sh $(GRUB_UPSTREAM_URL) $(GRUB_UPSTREAM_REVISION) grub-dir + cd grub-dir && ./autogen.sh + +.PHONY: build +build: grub-build32 grub-build64 + +memdisk.tar: + tar cf memdisk.tar grub.cfg + +grub-build32: grub-dir memdisk.tar + test -d grub-build32 || mkdir grub-build32 + cd grub-build32 && \ + ../grub-dir/configure --target=i386 --with-platform=xen + $(MAKE) -C grub-build32 + cd grub-build32 && \ + ./grub-mkimage -d grub-core -O i386-xen -c ../grub-bootstrap.cfg \ + -m ../memdisk.tar -o $(TARGET32) grub-core/*mod + +grub-build64: grub-dir memdisk.tar + test -d grub-build64 || mkdir grub-build64 + cd grub-build64 && ../grub-dir/configure --target=amd64 --with-platform=xen + $(MAKE) -C grub-build64 + cd grub-build64 && \ + ./grub-mkimage -d grub-core -O x86_64-xen -c ../grub-bootstrap.cfg \ + -m ../memdisk.tar -o $(TARGET64) grub-core/*mod + +.PHONY: install +install: build + test -d $(INST_DIR) || mkdir -p $(INST_DIR) + cp grub-build32/$(TARGET32) $(INST_DIR) + cp grub-build64/$(TARGET64) $(INST_DIR) + +.PHONY: distclean +distclean: subdir-distclean-grub-dir + +.PHONY: clean +clean: subdir-clean-grub-dir + +subdir-distclean-grub-dir: subdir-clean-grub-dir + rm -rf grub-dir + +subdir-clean-grub-dir: + rm -rf memdisk.tar + rm -rf grub-build32 + rm -rf grub-build64 + +.PHONY: grub-dir-force-update +grub-dir-force-update: grub-dir + set -ex; \ + if [ "$(GRUB_UPSTREAM_REVISION)" ]; then \ + cd grub-dir-dir; \ + $(GIT) fetch origin; \ + $(GIT) reset --hard $(GRUB_UPSTREAM_REVISION); \ + fi + +subtree-force-update: + $(MAKE) grub-dir-force-update + +subtree-force-update-all: + $(MAKE) grub-dir-force-update diff --git a/tools/pvgrub2/grub-bootstrap.cfg b/tools/pvgrub2/grub-bootstrap.cfg new file mode 100644 index 0000000..e988314 --- /dev/null +++ b/tools/pvgrub2/grub-bootstrap.cfg @@ -0,0 +1 @@ +normal (memdisk)/grub.cfg diff --git a/tools/pvgrub2/grub.cfg b/tools/pvgrub2/grub.cfg new file mode 100644 index 0000000..1600b1e --- /dev/null +++ b/tools/pvgrub2/grub.cfg @@ -0,0 +1,21 @@ +if search -s -f /boot/xen/pvboot-x86_64.elf ; then + echo "Chainloading (${root})/boot/xen/pvboot-x86_64.elf" + multiboot "/boot/xen/pvboot-x86_64.elf" + boot +fi + +if search -s -f /xen/pvboot-x86_64.elf ; then + echo "Chainloading (${root})/xen/pvboot-x86_64.elf" + multiboot "/xen/pvboot-x86_64.elf" + boot +fi + +if search -s -f /boot/grub/grub.cfg ; then + echo "Reading (${root})/boot/grub/grub.cfg" + configfile /boot/grub/grub.cfg +fi + +if search -s -f /grub/grub.cfg ; then + echo "Reading (${root})/grub/grub.cfg" + configfile /grub/grub.cfg +fi -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |