94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 2d303b4683145f7dbc918bd14d04e1396581b2ce Mon Sep 17 00:00:00 2001
 | |
| From: Imre Kaloz <kaloz@openwrt.org>
 | |
| Date: Thu, 7 Jul 2011 12:05:21 +0200
 | |
| Subject: [PATCH] ARM: support XZ compressed kernels
 | |
| 
 | |
| Wire up support for the XZ decompressor
 | |
| 
 | |
| Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 | |
| ---
 | |
|  arch/arm/Kconfig                        |    1 +
 | |
|  arch/arm/boot/compressed/Makefile       |   11 +++++++++--
 | |
|  arch/arm/boot/compressed/decompress.c   |    4 ++++
 | |
|  arch/arm/boot/compressed/piggy.xzkern.S |    6 ++++++
 | |
|  lib/xz/xz_dec_stream.c                  |    1 +
 | |
|  5 files changed, 21 insertions(+), 2 deletions(-)
 | |
|  create mode 100644 arch/arm/boot/compressed/piggy.xzkern.S
 | |
| 
 | |
| --- a/arch/arm/Kconfig
 | |
| +++ b/arch/arm/Kconfig
 | |
| @@ -20,6 +20,7 @@ config ARM
 | |
|  	select HAVE_KERNEL_GZIP
 | |
|  	select HAVE_KERNEL_LZO
 | |
|  	select HAVE_KERNEL_LZMA
 | |
| +	select HAVE_KERNEL_XZ
 | |
|  	select HAVE_IRQ_WORK
 | |
|  	select HAVE_PERF_EVENTS
 | |
|  	select PERF_USE_VMALLOC
 | |
| --- a/arch/arm/boot/compressed/Makefile
 | |
| +++ b/arch/arm/boot/compressed/Makefile
 | |
| @@ -88,13 +88,14 @@ SEDFLAGS	= s/TEXT_START/$(ZTEXTADDR)/;s/
 | |
|  suffix_$(CONFIG_KERNEL_GZIP) = gzip
 | |
|  suffix_$(CONFIG_KERNEL_LZO)  = lzo
 | |
|  suffix_$(CONFIG_KERNEL_LZMA) = lzma
 | |
| +suffix_$(CONFIG_KERNEL_XZ)   = xzkern
 | |
|  
 | |
|  targets       := vmlinux vmlinux.lds \
 | |
|  		 piggy.$(suffix_y) piggy.$(suffix_y).o \
 | |
|  		 font.o font.c head.o misc.o $(OBJS)
 | |
|  
 | |
|  # Make sure files are removed during clean
 | |
| -extra-y       += piggy.gzip piggy.lzo piggy.lzma lib1funcs.S
 | |
| +extra-y       += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern lib1funcs.S ashldi3.S
 | |
|  
 | |
|  ifeq ($(CONFIG_FUNCTION_TRACER),y)
 | |
|  ORIG_CFLAGS := $(KBUILD_CFLAGS)
 | |
| @@ -139,8 +140,14 @@ bad_syms=$$($(CROSS_COMPILE)nm $@ | sed
 | |
|    ( echo "following symbols must have non local/private scope:" >&2; \
 | |
|      echo "$$bad_syms" >&2; rm -f $@; false )
 | |
|  
 | |
| +# For __aeabi_llsl
 | |
| +ashldi3 = $(obj)/ashldi3.o
 | |
| +
 | |
| +$(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S FORCE
 | |
| +	$(call cmd,shipped)
 | |
| +
 | |
|  $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
 | |
| -	 	$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
 | |
| +	 	$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) FORCE
 | |
|  	$(call if_changed,ld)
 | |
|  	@$(check_for_bad_syms)
 | |
|  
 | |
| --- a/arch/arm/boot/compressed/decompress.c
 | |
| +++ b/arch/arm/boot/compressed/decompress.c
 | |
| @@ -44,6 +44,10 @@ extern void error(char *);
 | |
|  #include "../../../../lib/decompress_unlzma.c"
 | |
|  #endif
 | |
|  
 | |
| +#ifdef CONFIG_KERNEL_XZ
 | |
| +#include "../../../../lib/decompress_unxz.c"
 | |
| +#endif
 | |
| +
 | |
|  int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
 | |
|  {
 | |
|  	return decompress(input, len, NULL, NULL, output, NULL, error);
 | |
| --- /dev/null
 | |
| +++ b/arch/arm/boot/compressed/piggy.xzkern.S
 | |
| @@ -0,0 +1,6 @@
 | |
| +	.section .piggydata,#alloc
 | |
| +	.globl	input_data
 | |
| +input_data:
 | |
| +	.incbin	"arch/arm/boot/compressed/piggy.xzkern"
 | |
| +	.globl	input_data_end
 | |
| +input_data_end:
 | |
| --- a/lib/xz/xz_dec_stream.c
 | |
| +++ b/lib/xz/xz_dec_stream.c
 | |
| @@ -9,6 +9,7 @@
 | |
|  
 | |
|  #include "xz_private.h"
 | |
|  #include "xz_stream.h"
 | |
| +#include <linux/kernel.h>
 | |
|  
 | |
|  /* Hash used to validate the Index field */
 | |
|  struct xz_dec_hash {
 |