123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- ARM: implement "uncompressed zImage"
- Based on RFC patch by Uwe Kleine-König
- http://www.spinics.net/lists/arm-kernel/msg230153.html
- Signed-off-by: Felix Fietkau <nbd@nbd.name>
- ---
- --- a/arch/arm/boot/compressed/Makefile
- +++ b/arch/arm/boot/compressed/Makefile
- @@ -71,6 +71,7 @@ suffix_$(CONFIG_KERNEL_LZO) = lzo
- suffix_$(CONFIG_KERNEL_LZMA) = lzma
- suffix_$(CONFIG_KERNEL_XZ) = xzkern
- suffix_$(CONFIG_KERNEL_LZ4) = lz4
- +suffix_$(CONFIG_KERNEL_CAT) = cat
-
- # Borrowed libfdt files for the ATAG compatibility mode
-
- @@ -95,7 +96,7 @@ targets := vmlinux vmlinux.lds \
- bswapsdi2.S font.o font.c head.o misc.o $(OBJS)
-
- # Make sure files are removed during clean
- -extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 \
- +extra-y += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern piggy.lz4 piggy.cat \
- lib1funcs.S ashldi3.S bswapsdi2.S $(libfdt) $(libfdt_hdrs) \
- hyp-stub.S
-
- --- a/arch/arm/boot/compressed/decompress.c
- +++ b/arch/arm/boot/compressed/decompress.c
- @@ -55,6 +55,10 @@ extern char * strstr(const char * s1, co
- #include "../../../../lib/decompress_unlz4.c"
- #endif
-
- +#ifdef CONFIG_KERNEL_CAT
- +#include "../../../../lib/decompress_uncat.c"
- +#endif
- +
- int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
- {
- return __decompress(input, len, NULL, NULL, output, 0, NULL, error);
- --- /dev/null
- +++ b/arch/arm/boot/compressed/piggy.cat.S
- @@ -0,0 +1,6 @@
- + .section .piggydata,#alloc
- + .globl input_data
- +input_data:
- + .incbin "arch/arm/boot/compressed/piggy.cat"
- + .globl input_data_end
- +input_data_end:
- --- a/init/Kconfig
- +++ b/init/Kconfig
- @@ -115,6 +115,9 @@ config HAVE_KERNEL_LZO
- config HAVE_KERNEL_LZ4
- bool
-
- +config HAVE_KERNEL_CAT
- + bool
- +
- choice
- prompt "Kernel compression mode"
- default KERNEL_GZIP
- @@ -181,9 +184,10 @@ config KERNEL_LZO
- bool "LZO"
- depends on HAVE_KERNEL_LZO
- help
- - Its compression ratio is the poorest among the choices. The kernel
- - size is about 10% bigger than gzip; however its speed
- - (both compression and decompression) is the fastest.
- + Its compression ratio is the poorest among the choices (apart from
- + uncompressed below). The kernel size is about 10% bigger than gzip;
- + however its speed (both compression and decompression) is the
- + fastest.
-
- config KERNEL_LZ4
- bool "LZ4"
- @@ -197,6 +201,12 @@ config KERNEL_LZ4
- is about 8% bigger than LZO. But the decompression speed is
- faster than LZO.
-
- +config KERNEL_CAT
- + bool "uncompressed"
- + depends on HAVE_KERNEL_CAT
- + help
- + Don't use compression at all.
- +
- endchoice
-
- config DEFAULT_HOSTNAME
- --- /dev/null
- +++ b/lib/decompress_uncat.c
- @@ -0,0 +1,17 @@
- +#include <linux/types.h>
- +#include <linux/compiler.h>
- +
- +#ifdef STATIC
- +
- +STATIC int __decompress(unsigned char *buf, long in_len,
- + long (*fill)(void*, unsigned long),
- + long (*flush)(void*, unsigned long),
- + unsigned char *output, long out_len,
- + long *posp,
- + void (*error)(char *x))
- +{
- + memmove(output, buf, in_len);
- + return 0;
- +}
- +
- +#endif
- --- a/scripts/Makefile.lib
- +++ b/scripts/Makefile.lib
- @@ -337,6 +337,13 @@ cmd_lz4 = (cat $(filter-out FORCE,$^) |
- lz4c -l -c1 stdin stdout && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
- (rm -f $@ ; false)
-
- +# uncompressed
- +# ---------------------------------------------------------------------------
- +quiet_cmd_cat = CAT $@
- +cmd_cat = (cat $(filter-out FORCE,$^) \
- + && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
- + (rm -f $@ ; false)
- +
- # U-Boot mkimage
- # ---------------------------------------------------------------------------
-
- --- a/arch/arm/Kconfig
- +++ b/arch/arm/Kconfig
- @@ -59,6 +59,7 @@ config ARM
- select HAVE_KERNEL_LZMA
- select HAVE_KERNEL_LZO
- select HAVE_KERNEL_XZ
- + select HAVE_KERNEL_CAT
- select HAVE_KPROBES if !XIP_KERNEL && !CPU_ENDIAN_BE32 && !CPU_V7M
- select HAVE_KRETPROBES if (HAVE_KPROBES)
- select HAVE_MEMBLOCK
|