From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [PATCH] pv-grub: Support bzip2, xz and lzo compressed kernels Date: Fri, 4 Jan 2013 11:56:33 +0000 Message-ID: <1357300593-28685-1-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: waldi@debian.org, Ian Campbell List-Id: xen-devel@lists.xenproject.org xz compressed kernels seem to be what we are starting to see in the wild, but we may as well support everything that libxc does in pv-grub. Also update the zlib library to the latest version Signed-off-by: Ian Campbell Cc: waldi@debian.org --- This is only build tested as I don't have a convenient pv-grub setup at the moment. As well as committing the committer should fetch the following URLs to xenbits.xen.org:/var/xenbits-www/html/xen-extfiles - http://www.zlib.net/zlib-1.2.7.tar.gz - http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz md5sum 00b516f4704d4a7cb50a1d97e6e8e15b - http://tukaani.org/xz/xz-5.0.4.tar.bz2 http://tukaani.org/xz/xz-5.0.4.tar.bz2.sig - http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz --- .gitignore | 3 ++ .hgignore | 3 ++ extras/mini-os/Makefile | 3 ++ stubdom/Makefile | 84 +++++++++++++++++++++++++++++++++++++++++++++-- stubdom/bzip2.patch | 11 ++++++ stubdom/grub/kexec.c | 6 +++ 6 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 stubdom/bzip2.patch diff --git a/.gitignore b/.gitignore index f71cff8..a95183a 100644 --- a/.gitignore +++ b/.gitignore @@ -107,6 +107,9 @@ stubdom/newlib-1.* stubdom/newlib-x86* stubdom/pciutils-* stubdom/zlib-* +stubdom/bzip2-* +stubdom/xz-* +stubdom/lzo-* stubdom/grub-* stubdom/ocaml-* stubdom/lwip/ diff --git a/.hgignore b/.hgignore index 344792a..044a88a 100644 --- a/.hgignore +++ b/.hgignore @@ -102,6 +102,9 @@ ^stubdom/newlib-.*$ ^stubdom/pciutils-.*$ ^stubdom/zlib-.*$ +^stubdom/bzip2-.*$ +^stubdom/xz-.*$ +^stubdom/lzo-.*$ ^stubdom/grub-.*$ ^stubdom/ocaml-.*$ ^stubdom/lwip/ diff --git a/extras/mini-os/Makefile b/extras/mini-os/Makefile index 2302a23..717b209 100644 --- a/extras/mini-os/Makefile +++ b/extras/mini-os/Makefile @@ -159,6 +159,9 @@ APP_LDLIBS += -L$(XEN_ROOT)/stubdom/libxc-$(XEN_TARGET_ARCH) -whole-archive -lxe endif APP_LDLIBS += -lpci APP_LDLIBS += -lz +APP_LDLIBS += -lbz2 +APP_LDLIBS += -llzma +APP_LDLIBS += -llzo2 APP_LDLIBS += -lm LDLIBS += -lc endif diff --git a/stubdom/Makefile b/stubdom/Makefile index 50ba360..897ad2c 100644 --- a/stubdom/Makefile +++ b/stubdom/Makefile @@ -9,7 +9,19 @@ include $(XEN_ROOT)/Config.mk #ZLIB_URL?=http://www.zlib.net ZLIB_URL=$(XEN_EXTFILES_URL) -ZLIB_VERSION=1.2.3 +ZLIB_VERSION=1.2.7 + +#BZIP2_URL?=http://www.bzip.org/$(BZIP2_VERSION) +BZIP2_URL=$(XEN_EXTFILES_URL) +BZIP2_VERSION=1.0.6 + +#XZ_URL?=http://tukaani.org/xz +XZ_URL=$(XEN_EXTFILES_URL) +XZ_VERSION=5.0.4 + +#LZO_URL?=http://www.oberhumer.com/opensource/lzo/download +LZO_URL=$(XEN_EXTFILES_URL) +LZO_VERSION=2.06 #LIBPCI_URL?=http://www.kernel.org/pub/software/utils/pciutils LIBPCI_URL?=$(XEN_EXTFILES_URL) @@ -134,6 +146,69 @@ $(ZLIB_STAMPFILE): zlib-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) $(MAKE) DESTDIR= libz.a && \ $(MAKE) DESTDIR= install ) +############ +# Cross-bzip2 +############ + +bzip2-$(BZIP2_VERSION).tar.gz: + $(WGET) $(BZIP2_URL)/$@ + +bzip2-$(XEN_TARGET_ARCH): bzip2-$(BZIP2_VERSION).tar.gz + tar xzf $< + mv bzip2-$(BZIP2_VERSION) $@ + patch -d $@ -p1 < bzip2.patch + +BZIP2_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libbz2.a +.PHONY: cross-bzip2 +cross-bzip2: $(BZIP2_STAMPFILE) +$(BZIP2_STAMPFILE): bzip2-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) + ( cd $< && \ + $(MAKE) DESTDIR= libbz2.a && \ + $(INSTALL_DATA) libbz2.a $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ && \ + $(INSTALL_DATA) bzlib.h $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/ \ + ) + +############## +# Cross-xz +############## + +xz-$(XZ_VERSION).tar.bz2: + $(WGET) $(XZ_URL)/$@ + +xz-$(XEN_TARGET_ARCH): xz-$(XZ_VERSION).tar.bz2 + tar xjf $< + mv xz-$(XZ_VERSION) $@ + +XZ_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/liblzma.a +.PHONY: cross-xz +cross-xz: $(XZ_STAMPFILE) +$(XZ_STAMPFILE): xz-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) + ( cd $< && \ + CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \ + cd src/liblzma && \ + $(MAKE) DESTDIR= liblzma.la && \ + $(MAKE) DESTDIR= install ) + +############## +# Cross-lzo +############## + +lzo-$(LZO_VERSION).tar.gz: + $(WGET) $(LZO_URL)/$@ + +lzo-$(XEN_TARGET_ARCH): lzo-$(LZO_VERSION).tar.gz + tar xzf $< + mv lzo-$(LZO_VERSION) $@ + +LZO_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/liblzo2.a +.PHONY: cross-lzo +cross-lzo: $(LZO_STAMPFILE) +$(LZO_STAMPFILE): lzo-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) + ( cd $< && \ + CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \ + $(MAKE) DESTDIR= src/liblzo2.la && \ + $(MAKE) DESTDIR= install-libLTLIBRARIES install-pkgincludeHEADERS ) + ############## # Cross-libpci ############## @@ -281,10 +356,13 @@ $(TARGETS_MINIOS): mini-os-%: .PHONY: libxc libxc: libxc-$(XEN_TARGET_ARCH)/libxenctrl.a libxc-$(XEN_TARGET_ARCH)/libxenguest.a -libxc-$(XEN_TARGET_ARCH)/libxenctrl.a: cross-zlib +libxc-$(XEN_TARGET_ARCH)/libxenctrl.a: TARGET_CFLAGS += -DHAVE_BZLIB +libxc-$(XEN_TARGET_ARCH)/libxenctrl.a: TARGET_CFLAGS += -DHAVE_LZMA +libxc-$(XEN_TARGET_ARCH)/libxenctrl.a: TARGET_CFLAGS += -DHAVE_LZO1X +libxc-$(XEN_TARGET_ARCH)/libxenctrl.a: cross-zlib cross-bzip2 cross-xz cross-lzo CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C libxc-$(XEN_TARGET_ARCH) - libxc-$(XEN_TARGET_ARCH)/libxenguest.a: libxc-$(XEN_TARGET_ARCH)/libxenctrl.a +libxc-$(XEN_TARGET_ARCH)/libxenguest.a: libxc-$(XEN_TARGET_ARCH)/libxenctrl.a ####### # ioemu diff --git a/stubdom/bzip2.patch b/stubdom/bzip2.patch new file mode 100644 index 0000000..ee0df30 --- /dev/null +++ b/stubdom/bzip2.patch @@ -0,0 +1,11 @@ +--- bzip2-x86_64.orig/Makefile 2013-01-04 10:56:57.000000000 +0000 ++++ bzip2-x86_64/Makefile 2013-01-04 10:57:06.000000000 +0000 +@@ -21,7 +21,7 @@ + LDFLAGS= + + BIGFILES=-D_FILE_OFFSET_BITS=64 +-CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) ++CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -DBZ_NO_STDIO + + # Where you want it installed when you do 'make install' + PREFIX=/usr/local diff --git a/stubdom/grub/kexec.c b/stubdom/grub/kexec.c index b21c91a..9d10d32 100644 --- a/stubdom/grub/kexec.c +++ b/stubdom/grub/kexec.c @@ -54,6 +54,12 @@ static unsigned long allocated; int pin_table(xc_interface *xc_handle, unsigned int type, unsigned long mfn, domid_t dom); +/* Required by libbz2 */ +void bz_internal_error(int errcode) +{ + printk("BZIP2: Internal Error %d", __FUNCTION__); +} + /* We need mfn to appear as target_pfn, so exchange with the MFN there */ static void do_exchange(struct xc_dom_image *dom, xen_pfn_t target_pfn, xen_pfn_t source_mfn) { -- 1.7.2.5