Messages in this thread Patch in this message |  | | From | Christian Ruppert <> | Subject | [PATCH 2/2 v2] x86: Add support for uncompressed kernel images | Date | Mon, 18 Nov 2013 14:48:30 +0100 |
| |
There seems to be some interest to enable uncompressed kernels also for x86 in addition to (embedded) ARC platforms.
Add the code to support uncompressed kernels to lib/, select the respective Kconfig options for the x86 architecture and use this code in the x86 kernel self-decompressor.
Signed-off-by: Christian Ruppert <christian.ruppert@abilis.com> --- arch/x86/Kconfig | 1 + arch/x86/boot/compressed/Makefile | 14 ++++++------ arch/x86/boot/compressed/misc.c | 4 +++ lib/decompress_copy.c | 44 +++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 lib/decompress_copy.c
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index e903c71..009349f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -62,6 +62,7 @@ config X86 select USER_STACKTRACE_SUPPORT select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_DMA_API_DEBUG + select HAVE_KERNEL_UNCOMPRESSED select HAVE_KERNEL_GZIP select HAVE_KERNEL_BZIP2 select HAVE_KERNEL_LZMA diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile index dcd90df..f65e444 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile @@ -67,16 +67,16 @@ $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE $(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE $(call if_changed,lz4) -suffix-$(CONFIG_KERNEL_GZIP) := gz -suffix-$(CONFIG_KERNEL_BZIP2) := bz2 -suffix-$(CONFIG_KERNEL_LZMA) := lzma -suffix-$(CONFIG_KERNEL_XZ) := xz -suffix-$(CONFIG_KERNEL_LZO) := lzo -suffix-$(CONFIG_KERNEL_LZ4) := lz4 +suffix-$(CONFIG_KERNEL_GZIP) := .gz +suffix-$(CONFIG_KERNEL_BZIP2) := .bz2 +suffix-$(CONFIG_KERNEL_LZMA) := .lzma +suffix-$(CONFIG_KERNEL_XZ) := .xz +suffix-$(CONFIG_KERNEL_LZO) := .lzo +suffix-$(CONFIG_KERNEL_LZ4) := .lz4 quiet_cmd_mkpiggy = MKPIGGY $@ cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false ) targets += piggy.S -$(obj)/piggy.S: $(obj)/vmlinux.bin.$(suffix-y) $(obj)/mkpiggy FORCE +$(obj)/piggy.S: $(obj)/vmlinux.bin$(suffix-y) $(obj)/mkpiggy FORCE $(call if_changed,mkpiggy) diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 434f077..c210314 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c @@ -149,6 +149,10 @@ static int lines, cols; #include "../../../../lib/decompress_unlz4.c" #endif +#ifdef CONFIG_KERNEL_UNCOMPRESSED +#include "../../../../lib/decompress_copy.c" +#endif + static void scroll(void) { int i; diff --git a/lib/decompress_copy.c b/lib/decompress_copy.c new file mode 100644 index 0000000..109ef22 --- /dev/null +++ b/lib/decompress_copy.c @@ -0,0 +1,44 @@ +#include <linux/decompress/mm.h> + +#define NOZIP_BUFSZ (16 * 1024) +STATIC int INIT nozip(unsigned char *buf, int len, + int(*fill)(void*, unsigned int), + int(*flush)(void*, unsigned int), + unsigned char *outbuf, + int *pos, + void(*error)(char *x)) +{ + char *b; + + if (buf) + b = buf; + else + b = malloc(NOZIP_BUFSZ); + + if (!b) { + error("Out of memory while allocating buffer"); + return -1; + } + + if (flush) { + if (!len) + len = fill(b, NOZIP_BUFSZ); + + len = flush(b, len); + } else { + if (!len) + len = fill(outbuf, NOZIP_BUFSZ); + else + memcpy(outbuf, b, len); + } + + if (pos) + *pos = len; + + if (!buf) + free(b); + + return 0; +} + +#define decompress nozip -- 1.7.1
|  |