decompressors: add boot-time XZ support
This implements the API defined in <linux/decompress/generic.h> which is used for kernel, initramfs, and initrd decompression. This patch together with the first patch is enough for XZ-compressed initramfs and initrd; XZ-compressed kernel will need arch-specific changes. The buffering requirements described in decompress_unxz.c are stricter than with gzip, so the relevant changes should be done to the arch-specific code when adding support for XZ-compressed kernel. Similarly, the heap size in arch-specific pre-boot code may need to be increased (30 KiB is enough). The XZ decompressor needs memmove(), memeq() (memcmp() == 0), and memzero() (memset(ptr, 0, size)), which aren't available in all arch-specific pre-boot environments. I'm including simple versions in decompress_unxz.c, but a cleaner solution would naturally be nicer. Signed-off-by: Lasse Collin <lasse.collin@tukaani.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Alain Knaff <alain@knaff.lu> Cc: Albin Tonnerre <albin.tonnerre@free-electrons.com> Cc: Phillip Lougher <phillip@lougher.demon.co.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
24fa0402a9
commit
3ebe12439b
20
init/Kconfig
20
init/Kconfig
@@ -130,13 +130,16 @@ config HAVE_KERNEL_BZIP2
|
||||
config HAVE_KERNEL_LZMA
|
||||
bool
|
||||
|
||||
config HAVE_KERNEL_XZ
|
||||
bool
|
||||
|
||||
config HAVE_KERNEL_LZO
|
||||
bool
|
||||
|
||||
choice
|
||||
prompt "Kernel compression mode"
|
||||
default KERNEL_GZIP
|
||||
depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_LZO
|
||||
depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO
|
||||
help
|
||||
The linux kernel is a kind of self-extracting executable.
|
||||
Several compression algorithms are available, which differ
|
||||
@@ -181,6 +184,21 @@ config KERNEL_LZMA
|
||||
two. Compression is slowest. The kernel size is about 33%
|
||||
smaller with LZMA in comparison to gzip.
|
||||
|
||||
config KERNEL_XZ
|
||||
bool "XZ"
|
||||
depends on HAVE_KERNEL_XZ
|
||||
help
|
||||
XZ uses the LZMA2 algorithm and instruction set specific
|
||||
BCJ filters which can improve compression ratio of executable
|
||||
code. The size of the kernel is about 30% smaller with XZ in
|
||||
comparison to gzip. On architectures for which there is a BCJ
|
||||
filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ
|
||||
will create a few percent smaller kernel than plain LZMA.
|
||||
|
||||
The speed is about the same as with LZMA: The decompression
|
||||
speed of XZ is better than that of bzip2 but worse than gzip
|
||||
and LZO. Compression is slow.
|
||||
|
||||
config KERNEL_LZO
|
||||
bool "LZO"
|
||||
depends on HAVE_KERNEL_LZO
|
||||
|
Reference in New Issue
Block a user