wok-tiny annotate kernel-modular/stuff/003-squashfs-x86-support-xz-compressed-kernel.patch @ rev 1

Add kernel
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 01 09:37:33 2011 +0100 (2011-02-01)
parents
children
rev   line source
pascal@1 1 From: Lasse Collin <lasse.collin@tukaani.org>
pascal@1 2 Date: Thu, 2 Dec 2010 19:14:57 +0000 (+0200)
pascal@1 3 Subject: x86: Support XZ-compressed kernel
pascal@1 4 X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fpkl%2Fsquashfs-xz.git;a=commitdiff_plain;h=d4ad78414e5312126127b1f88cdaf8584af3eef1
pascal@1 5
pascal@1 6 x86: Support XZ-compressed kernel
pascal@1 7
pascal@1 8 This integrates the XZ decompression code to the x86
pascal@1 9 pre-boot code.
pascal@1 10
pascal@1 11 mkpiggy.c is updated to reserve about 32 KiB more buffer safety
pascal@1 12 margin for kernel decompression. It is done unconditionally for
pascal@1 13 all decompressors to keep the code simpler.
pascal@1 14
pascal@1 15 The XZ decompressor needs around 30 KiB of heap, so the heap size
pascal@1 16 is increased to 32 KiB on both x86-32 and x86-64.
pascal@1 17
pascal@1 18 Documentation/x86/boot.txt is updated to list the XZ magic number.
pascal@1 19
pascal@1 20 With the x86 BCJ filter in XZ, XZ-compressed x86 kernel tends to be
pascal@1 21 a few percent smaller than the equivalent LZMA-compressed kernel.
pascal@1 22
pascal@1 23 Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
pascal@1 24 ---
pascal@1 25
pascal@1 26 diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt
pascal@1 27 index 30b43e1..3988cde 100644
pascal@1 28 --- a/Documentation/x86/boot.txt
pascal@1 29 +++ b/Documentation/x86/boot.txt
pascal@1 30 @@ -621,9 +621,9 @@ Protocol: 2.08+
pascal@1 31 The payload may be compressed. The format of both the compressed and
pascal@1 32 uncompressed data should be determined using the standard magic
pascal@1 33 numbers. The currently supported compression formats are gzip
pascal@1 34 - (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA
pascal@1 35 - (magic number 5D 00). The uncompressed payload is currently always ELF
pascal@1 36 - (magic number 7F 45 4C 46).
pascal@1 37 + (magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A), LZMA
pascal@1 38 + (magic number 5D 00), and XZ (magic number FD 37). The uncompressed
pascal@1 39 + payload is currently always ELF (magic number 7F 45 4C 46).
pascal@1 40
pascal@1 41 Field name: payload_length
pascal@1 42 Type: read
pascal@1 43 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
pascal@1 44 index cea0cd9..f3db0d7 100644
pascal@1 45 --- a/arch/x86/Kconfig
pascal@1 46 +++ b/arch/x86/Kconfig
pascal@1 47 @@ -51,6 +51,7 @@ config X86
pascal@1 48 select HAVE_KERNEL_GZIP
pascal@1 49 select HAVE_KERNEL_BZIP2
pascal@1 50 select HAVE_KERNEL_LZMA
pascal@1 51 + select HAVE_KERNEL_XZ
pascal@1 52 select HAVE_KERNEL_LZO
pascal@1 53 select HAVE_HW_BREAKPOINT
pascal@1 54 select HAVE_MIXED_BREAKPOINTS_REGS
pascal@1 55 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
pascal@1 56 index 0c22955..09664ef 100644
pascal@1 57 --- a/arch/x86/boot/compressed/Makefile
pascal@1 58 +++ b/arch/x86/boot/compressed/Makefile
pascal@1 59 @@ -4,7 +4,7 @@
pascal@1 60 # create a compressed vmlinux image from the original vmlinux
pascal@1 61 #
pascal@1 62
pascal@1 63 -targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o
pascal@1 64 +targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o
pascal@1 65
pascal@1 66 KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
pascal@1 67 KBUILD_CFLAGS += -fno-strict-aliasing -fPIC
pascal@1 68 @@ -49,12 +49,15 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
pascal@1 69 $(call if_changed,bzip2)
pascal@1 70 $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
pascal@1 71 $(call if_changed,lzma)
pascal@1 72 +$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
pascal@1 73 + $(call if_changed,xzkern)
pascal@1 74 $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
pascal@1 75 $(call if_changed,lzo)
pascal@1 76
pascal@1 77 suffix-$(CONFIG_KERNEL_GZIP) := gz
pascal@1 78 suffix-$(CONFIG_KERNEL_BZIP2) := bz2
pascal@1 79 suffix-$(CONFIG_KERNEL_LZMA) := lzma
pascal@1 80 +suffix-$(CONFIG_KERNEL_XZ) := xz
pascal@1 81 suffix-$(CONFIG_KERNEL_LZO) := lzo
pascal@1 82
pascal@1 83 quiet_cmd_mkpiggy = MKPIGGY $@
pascal@1 84 diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
pascal@1 85 index 8f7bef8..6d4cab7 100644
pascal@1 86 --- a/arch/x86/boot/compressed/misc.c
pascal@1 87 +++ b/arch/x86/boot/compressed/misc.c
pascal@1 88 @@ -139,6 +139,10 @@ static int lines, cols;
pascal@1 89 #include "../../../../lib/decompress_unlzma.c"
pascal@1 90 #endif
pascal@1 91
pascal@1 92 +#ifdef CONFIG_KERNEL_XZ
pascal@1 93 +#include "../../../../lib/decompress_unxz.c"
pascal@1 94 +#endif
pascal@1 95 +
pascal@1 96 #ifdef CONFIG_KERNEL_LZO
pascal@1 97 #include "../../../../lib/decompress_unlzo.c"
pascal@1 98 #endif
pascal@1 99 diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c
pascal@1 100 index 5c22812..646aa78 100644
pascal@1 101 --- a/arch/x86/boot/compressed/mkpiggy.c
pascal@1 102 +++ b/arch/x86/boot/compressed/mkpiggy.c
pascal@1 103 @@ -74,7 +74,7 @@ int main(int argc, char *argv[])
pascal@1 104
pascal@1 105 offs = (olen > ilen) ? olen - ilen : 0;
pascal@1 106 offs += olen >> 12; /* Add 8 bytes for each 32K block */
pascal@1 107 - offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */
pascal@1 108 + offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */
pascal@1 109 offs = (offs+4095) & ~4095; /* Round to a 4K boundary */
pascal@1 110
pascal@1 111 printf(".section \".rodata..compressed\",\"a\",@progbits\n");
pascal@1 112 diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
pascal@1 113 index 3b62ab5..5e1a2ee 100644
pascal@1 114 --- a/arch/x86/include/asm/boot.h
pascal@1 115 +++ b/arch/x86/include/asm/boot.h
pascal@1 116 @@ -32,11 +32,7 @@
pascal@1 117 #define BOOT_HEAP_SIZE 0x400000
pascal@1 118 #else /* !CONFIG_KERNEL_BZIP2 */
pascal@1 119
pascal@1 120 -#ifdef CONFIG_X86_64
pascal@1 121 -#define BOOT_HEAP_SIZE 0x7000
pascal@1 122 -#else
pascal@1 123 -#define BOOT_HEAP_SIZE 0x4000
pascal@1 124 -#endif
pascal@1 125 +#define BOOT_HEAP_SIZE 0x8000
pascal@1 126
pascal@1 127 #endif /* !CONFIG_KERNEL_BZIP2 */
pascal@1 128