* [PATCH 2/7] decompress_unlzo: define decompress_unlzo as decompress
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 3/7] compressed image: factorise compressor type Jean-Christophe PLAGNIOL-VILLARD
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
so we can use decompress in the decompressor
this will simplify multi decompress support
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
lib/decompress_unlzo.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
index 0e6a7ad..56abfc6 100644
--- a/lib/decompress_unlzo.c
+++ b/lib/decompress_unlzo.c
@@ -289,3 +289,4 @@ exit_1:
exit:
return ret;
}
+#define decompress decompress_unlzo
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/7] compressed image: factorise compressor type
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 2/7] decompress_unlzo: define decompress_unlzo as decompress Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 4/7] decompressor: import malloc/free implementation for linux 3.4 Jean-Christophe PLAGNIOL-VILLARD
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
This will simplify to support of multi compressor support such as gzip, lzma,
xz.
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
Makefile | 12 +++++++-----
arch/arm/cpu/start.c | 9 ++++++---
arch/arm/lib/Makefile | 2 +-
arch/arm/lib/barebox.lds.S | 2 +-
common/Kconfig | 17 ++++++++++++++---
5 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/Makefile b/Makefile
index e0a3c07..0b3da03 100644
--- a/Makefile
+++ b/Makefile
@@ -715,20 +715,22 @@ barebox-uncompressed: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsym
barebox-uncompressed.bin: barebox-uncompressed
$(call if_changed,objcopy)
+suffix_$(CONFIG_IMAGE_COMPRESSION_LZO) = lzo
+
barebox-uncompressed.bin.lzo: barebox-uncompressed.bin
@echo " LZO " $@
$(Q)lzop -f -9 -o $@ barebox-uncompressed.bin
-piggy.lzo.o: barebox-uncompressed.bin.lzo $(src)/piggy.lzo.S
+piggy.$(suffix_y).o: barebox-uncompressed.bin.$(suffix_y) $(src)/piggy.$(suffix_y).S
@echo " CC " $@
- $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c $(src)/piggy.lzo.S -o $@
+ $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c $(src)/piggy.$(suffix_y).S -o $@
-ifdef CONFIG_IMAGE_COMPRESSION_LZO
-barebox: piggy.lzo.o
+ifdef CONFIG_IMAGE_COMPRESSION
+barebox: piggy.$(suffix_y).o
@echo " LD " $@
$(Q)$(LD) $(LDFLAGS) $(LDFLAGS_barebox) -o $@ \
-T $(barebox-compressed-lds) \
- --start-group $(barebox-common) piggy.lzo.o --end-group
+ --start-group $(barebox-common) piggy.$(suffix_y).o --end-group
else
barebox: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsyms.o) FORCE
$(call barebox-modpost)
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index 6743804..18c5c83 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -28,7 +28,7 @@
#include <asm-generic/memory_layout.h>
#include <asm/sections.h>
-#ifdef CONFIG_IMAGE_COMPRESSION_LZO
+#ifdef CONFIG_IMAGE_COMPRESSION
void __naked __section(.text_head_entry) compressed_start(void)
{
barebox_arm_head();
@@ -101,7 +101,10 @@ extern void *input_data;
extern void *input_data_end;
#define STATIC static
+
+#ifdef CONFIG_IMAGE_COMPRESSION_LZO
#include "../../../lib/decompress_unlzo.c"
+#endif
void barebox_uncompress(void *compressed_start, unsigned int len)
{
@@ -112,7 +115,7 @@ void barebox_uncompress(void *compressed_start, unsigned int len)
else
barebox = (void *)TEXT_BASE;
- decompress_unlzo((void *)compressed_start,
+ decompress((void *)compressed_start,
len,
NULL, NULL,
(void *)TEXT_BASE, NULL, NULL);
@@ -158,7 +161,7 @@ void __naked __section(.text_ll_return) board_init_lowlevel_return(void)
/* flush I-cache before jumping to the copied binary */
__asm__ __volatile__("mcr p15, 0, %0, c7, c5, 0" : : "r" (0));
- if (IS_ENABLED(CONFIG_IMAGE_COMPRESSION_LZO)) {
+ if (IS_ENABLED(CONFIG_IMAGE_COMPRESSION)) {
compressed_start = (uint32_t)&input_data - offset;
compressed_end = (uint32_t)&input_data_end - offset;
len = compressed_end - compressed_start;
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 044d3e6..1b6f7f4 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -21,4 +21,4 @@ obj-$(CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS) += memset.o
obj-$(CONFIG_ARM_UNWIND) += unwind.o
obj-$(CONFIG_MODULES) += module.o
extra-y += barebox.lds
-extra-$(CONFIG_IMAGE_COMPRESSION_LZO) += barebox-compressed.lds
+extra-$(CONFIG_IMAGE_COMPRESSION) += barebox-compressed.lds
diff --git a/arch/arm/lib/barebox.lds.S b/arch/arm/lib/barebox.lds.S
index b415830..b22cf98 100644
--- a/arch/arm/lib/barebox.lds.S
+++ b/arch/arm/lib/barebox.lds.S
@@ -31,7 +31,7 @@ SECTIONS
{
. = TEXT_BASE;
-#ifndef CONFIG_IMAGE_COMPRESSION_LZO
+#ifndef CONFIG_IMAGE_COMPRESSION
PRE_IMAGE
#endif
. = ALIGN(4);
diff --git a/common/Kconfig b/common/Kconfig
index c6f1afa..8437e1c 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -99,9 +99,20 @@ menu "memory layout "
config HAVE_IMAGE_COMPRESSION
bool
+config IMAGE_COMPRESSION
+ bool "Compressed image"
+
+if IMAGE_COMPRESSION
+
+choice
+ prompt "Compression"
+
config IMAGE_COMPRESSION_LZO
- depends on HAVE_IMAGE_COMPRESSION
- bool "lzo compressed image"
+ bool "lzo"
+
+endchoice
+
+endif
config MMU
bool "Enable MMU"
@@ -185,7 +196,7 @@ config MALLOC_SIZE
prompt "malloc area size"
config HEAD_TEXT_BASE
- depends on MEMORY_LAYOUT_FIXED && IMAGE_COMPRESSION_LZO
+ depends on MEMORY_LAYOUT_FIXED && IMAGE_COMPRESSION
hex
prompt "HEAD_TEXT_BASE"
endmenu
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/7] decompressor: import malloc/free implementation for linux 3.4
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 2/7] decompress_unlzo: define decompress_unlzo as decompress Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 3/7] compressed image: factorise compressor type Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 5/7] ARM: add early malloc support needed by the decompressor Jean-Christophe PLAGNIOL-VILLARD
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
This is need for gunzip support
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
include/linux/decompress/mm.h | 68 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
create mode 100644 include/linux/decompress/mm.h
diff --git a/include/linux/decompress/mm.h b/include/linux/decompress/mm.h
new file mode 100644
index 0000000..0c35411
--- /dev/null
+++ b/include/linux/decompress/mm.h
@@ -0,0 +1,68 @@
+/*
+ * linux/compr_mm.h
+ *
+ * Memory management for pre-boot and ramdisk uncompressors
+ *
+ * Authors: Alain Knaff <alain@knaff.lu>
+ *
+ */
+
+#ifndef DECOMPR_MM_H
+#define DECOMPR_MM_H
+
+#ifdef STATIC
+
+/* Code active when included from pre-boot environment: */
+
+/*
+ * Some architectures want to ensure there is no local data in their
+ * pre-boot environment, so that data can arbitrarily relocated (via
+ * GOT references). This is achieved by defining STATIC_RW_DATA to
+ * be null.
+ */
+#ifndef STATIC_RW_DATA
+#define STATIC_RW_DATA static
+#endif
+
+/* A trivial malloc implementation, adapted from
+ * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
+ */
+STATIC_RW_DATA unsigned long malloc_ptr;
+STATIC_RW_DATA int malloc_count;
+
+static void *malloc(int size)
+{
+ void *p;
+
+ if (size < 0)
+ return NULL;
+ if (!malloc_ptr)
+ malloc_ptr = free_mem_ptr;
+
+ malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
+
+ p = (void *)malloc_ptr;
+ malloc_ptr += size;
+
+ if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
+ return NULL;
+
+ malloc_count++;
+ return p;
+}
+
+static void free(void *where)
+{
+ malloc_count--;
+ if (!malloc_count)
+ malloc_ptr = free_mem_ptr;
+}
+
+#define large_malloc(a) malloc(a)
+#define large_free(a) free(a)
+
+#define INIT
+
+#endif /* STATIC */
+
+#endif /* DECOMPR_MM_H */
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/7] ARM: add early malloc support needed by the decompressor
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
` (2 preceding siblings ...)
2012-07-22 14:02 ` [PATCH 4/7] decompressor: import malloc/free implementation for linux 3.4 Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 6/7] compressed: allow to link only what is needed Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 7/7] compressed image: add gzip support Jean-Christophe PLAGNIOL-VILLARD
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
This is not needed by lzo but by gunzip, xz and others.
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
arch/arm/cpu/start.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index 18c5c83..8ab6fdc 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -28,6 +28,9 @@
#include <asm-generic/memory_layout.h>
#include <asm/sections.h>
+unsigned long free_mem_ptr;
+unsigned long free_mem_end_ptr;
+
#ifdef CONFIG_IMAGE_COMPRESSION
void __naked __section(.text_head_entry) compressed_start(void)
{
@@ -158,6 +161,10 @@ void __naked __section(.text_ll_return) board_init_lowlevel_return(void)
/* clear bss */
memset(__bss_start, 0, __bss_stop - __bss_start);
+ /* set 128 KiB before the STACK_BASE - 16 address for early malloc */
+ free_mem_ptr = STACK_BASE - 0x20000 - 16;
+ free_mem_end_ptr = STACK_BASE - 16;
+
/* flush I-cache before jumping to the copied binary */
__asm__ __volatile__("mcr p15, 0, %0, c7, c5, 0" : : "r" (0));
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 6/7] compressed: allow to link only what is needed
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
` (3 preceding siblings ...)
2012-07-22 14:02 ` [PATCH 5/7] ARM: add early malloc support needed by the decompressor Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-22 14:02 ` [PATCH 7/7] compressed image: add gzip support Jean-Christophe PLAGNIOL-VILLARD
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
Today we link to whole barebox and rely on gcc to cleanup via it's garbage
collector.
Now we specify only what is needed and introduce a new directory with source
only related to the compressed target.
The architecture will have to specify the needed file for the link via comp-arch-y.
Import string functions from linux 3.4 (arch/arm/boot/compressed/string.c) and
implement a dummy panic.
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
Makefile | 16 ++++---
arch/arm/Makefile | 7 +++
compressed/Makefile | 5 ++
compressed/misc.c | 10 ++++
compressed/string.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 159 insertions(+), 6 deletions(-)
create mode 100644 compressed/Makefile
create mode 100644 compressed/misc.c
create mode 100644 compressed/string.c
diff --git a/Makefile b/Makefile
index 0b3da03..d6a3ae5 100644
--- a/Makefile
+++ b/Makefile
@@ -412,6 +412,7 @@ scripts: scripts_basic include/config/auto.conf
# Objects we will link into barebox / subdirs we need to visit
common-y := common/ drivers/ commands/ lib/ crypto/ net/ fs/
+comp-y := compressed/
ifeq ($(dot-config),1)
# Read in config
@@ -474,7 +475,7 @@ CFLAGS += $(call cc-option,-Wno-pointer-sign,)
# this default value
export KBUILD_IMAGE ?= barebox
-barebox-dirs := $(patsubst %/,%,$(filter %/, $(common-y)))
+barebox-dirs := $(patsubst %/,%,$(filter %/, $(common-y) $(comp-y)))
barebox-alldirs := $(sort $(barebox-dirs) $(patsubst %/,%,$(filter %/, \
$(common-n) $(common-) \
@@ -482,6 +483,8 @@ barebox-alldirs := $(sort $(barebox-dirs) $(patsubst %/,%,$(filter %/, \
$(net-n) $(net-) $(libs-n) $(libs-))))
common-y := $(patsubst %/, %/built-in.o, $(common-y))
+comp-y := $(patsubst %/, %/built-in.o, $(comp-y))
+comp-arch-y := $(patsubst %/, %/built-in.o, $(comp-arch-y))
# Build barebox
# ---------------------------------------------------------------------------
@@ -509,8 +512,9 @@ common-y := $(patsubst %/, %/built-in.o, $(common-y))
#
# System.map is generated to document addresses of all kernel symbols
+barebox-comp := $(comp-y)
barebox-common := $(common-y)
-barebox-all := $(barebox-common)
+barebox-all := $(barebox-common) $(barebox-comp)
barebox-lds := $(lds-y)
barebox-compressed-lds := $(lds-compressed-y)
@@ -726,11 +730,11 @@ piggy.$(suffix_y).o: barebox-uncompressed.bin.$(suffix_y) $(src)/piggy.$(suffix_
$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c $(src)/piggy.$(suffix_y).S -o $@
ifdef CONFIG_IMAGE_COMPRESSION
-barebox: piggy.$(suffix_y).o
- @echo " LD " $@
+barebox: piggy.$(suffix_y).o $(barebox-comp)
+ @echo " LD " $@ $(barebox-comp)
$(Q)$(LD) $(LDFLAGS) $(LDFLAGS_barebox) -o $@ \
-T $(barebox-compressed-lds) \
- --start-group $(barebox-common) piggy.$(suffix_y).o --end-group
+ --start-group $(barebox-comp) $(comp-arch-y) piggy.$(suffix_y).o --end-group
else
barebox: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsyms.o) FORCE
$(call barebox-modpost)
@@ -743,7 +747,7 @@ barebox.srec: barebox
# The actual objects are generated when descending,
# make sure no implicit rule kicks in
-$(sort $(barebox-head) $(barebox-common) ) $(barebox-lds): $(barebox-dirs) ;
+$(sort $(barebox-head) $(barebox-common) $(barebox-comp) ) $(barebox-lds): $(barebox-dirs) ;
# Handle descending into subdirectories listed in $(barebox-dirs)
# Preset locale variables to speed up the build process. Limit locale
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index a93c4d5..0c666dc 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -207,6 +207,13 @@ endif
common-y += $(BOARD) $(MACH)
common-y += arch/arm/lib/ arch/arm/cpu/
+# those file will not be recompibled
+# we assume they are already compiled
+# for the normal barebox
+comp-arch-y += arch/arm/lib/lib1funcs.o
+comp-arch-y += arch/arm/lib/div0.o
+comp-arch-y += arch/arm/cpu/start.o
+
lds-y := arch/arm/lib/barebox.lds
lds-compressed-y := arch/arm/lib/barebox-compressed.lds
diff --git a/compressed/Makefile b/compressed/Makefile
new file mode 100644
index 0000000..720a0cb
--- /dev/null
+++ b/compressed/Makefile
@@ -0,0 +1,5 @@
+#
+# only unsed by the decompressor
+#
+obj-y += misc.o
+obj-y += string.o
diff --git a/compressed/misc.c b/compressed/misc.c
new file mode 100644
index 0000000..7bb0f50
--- /dev/null
+++ b/compressed/misc.c
@@ -0,0 +1,10 @@
+#include <common.h>
+#include <init.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/ctype.h>
+
+void __noreturn panic(const char *fmt, ...)
+{
+ while(1);
+}
diff --git a/compressed/string.c b/compressed/string.c
new file mode 100644
index 0000000..6787e82
--- /dev/null
+++ b/compressed/string.c
@@ -0,0 +1,127 @@
+/*
+ * arch/arm/boot/compressed/string.c
+ *
+ * Small subset of simple string routines
+ */
+
+#include <linux/types.h>
+
+void *memcpy(void *__dest, __const void *__src, size_t __n)
+{
+ int i = 0;
+ unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
+
+ for (i = __n >> 3; i > 0; i--) {
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+
+ if (__n & 1 << 2) {
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+
+ if (__n & 1 << 1) {
+ *d++ = *s++;
+ *d++ = *s++;
+ }
+
+ if (__n & 1)
+ *d++ = *s++;
+
+ return __dest;
+}
+
+void *memmove(void *__dest, __const void *__src, size_t count)
+{
+ unsigned char *d = __dest;
+ const unsigned char *s = __src;
+
+ if (__dest == __src)
+ return __dest;
+
+ if (__dest < __src)
+ return memcpy(__dest, __src, count);
+
+ while (count--)
+ d[count] = s[count];
+ return __dest;
+}
+
+size_t strlen(const char *s)
+{
+ const char *sc = s;
+
+ while (*sc != '\0')
+ sc++;
+ return sc - s;
+}
+
+int memcmp(const void *cs, const void *ct, size_t count)
+{
+ const unsigned char *su1 = cs, *su2 = ct, *end = su1 + count;
+ int res = 0;
+
+ while (su1 < end) {
+ res = *su1++ - *su2++;
+ if (res)
+ break;
+ }
+ return res;
+}
+
+int strcmp(const char *cs, const char *ct)
+{
+ unsigned char c1, c2;
+ int res = 0;
+
+ do {
+ c1 = *cs++;
+ c2 = *ct++;
+ res = c1 - c2;
+ if (res)
+ break;
+ } while (c1);
+ return res;
+}
+
+void *memchr(const void *s, int c, size_t count)
+{
+ const unsigned char *p = s;
+
+ while (count--)
+ if ((unsigned char)c == *p++)
+ return (void *)(p - 1);
+ return NULL;
+}
+
+char *strchr(const char *s, int c)
+{
+ while (*s != (char)c)
+ if (*s++ == '\0')
+ return NULL;
+ return (char *)s;
+}
+
+#undef memset
+
+void *memset(void *s, int c, size_t count)
+{
+ char *xs = s;
+ while (count--)
+ *xs++ = c;
+ return s;
+}
+
+void __memzero(void *s, size_t count)
+{
+ memset(s, 0, count);
+}
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 7/7] compressed image: add gzip support
2012-07-22 14:02 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
` (4 preceding siblings ...)
2012-07-22 14:02 ` [PATCH 6/7] compressed: allow to link only what is needed Jean-Christophe PLAGNIOL-VILLARD
@ 2012-07-22 14:02 ` Jean-Christophe PLAGNIOL-VILLARD
5 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-07-22 14:02 UTC (permalink / raw)
To: barebox
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
Makefile | 7 ++++++-
arch/arm/cpu/start.c | 4 ++++
common/Kconfig | 3 +++
lib/decompress_inflate.c | 1 +
piggy.gzip.S | 6 ++++++
5 files changed, 20 insertions(+), 1 deletion(-)
create mode 100644 piggy.gzip.S
diff --git a/Makefile b/Makefile
index d6a3ae5..1003786 100644
--- a/Makefile
+++ b/Makefile
@@ -719,8 +719,13 @@ barebox-uncompressed: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsym
barebox-uncompressed.bin: barebox-uncompressed
$(call if_changed,objcopy)
+suffix_$(CONFIG_IMAGE_COMPRESSION_GZIP) = gzip
suffix_$(CONFIG_IMAGE_COMPRESSION_LZO) = lzo
+barebox-uncompressed.bin.gzip: barebox-uncompressed.bin
+ @echo " GZIP " $@
+ $(Q)gzip -n -9 -c barebox-uncompressed.bin > $@
+
barebox-uncompressed.bin.lzo: barebox-uncompressed.bin
@echo " LZO " $@
$(Q)lzop -f -9 -o $@ barebox-uncompressed.bin
@@ -1039,7 +1044,7 @@ CLEAN_FILES += barebox System.map include/generated/barebox_default_env.h \
.tmp_kallsyms* barebox_default_env* barebox.ldr \
scripts/bareboxenv-target \
Doxyfile.version barebox.srec barebox.s5p \
- barebox-uncompressed barebox-uncompressed.bin barebox-uncompressed.bin.lzo
+ barebox-uncompressed barebox-uncompressed.bin*
# Directories & files removed with 'make mrproper'
MRPROPER_DIRS += include/config include2 usr/include
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index 8ab6fdc..8e63523 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -109,6 +109,10 @@ extern void *input_data_end;
#include "../../../lib/decompress_unlzo.c"
#endif
+#ifdef CONFIG_IMAGE_COMPRESSION_GZIP
+#include "../../../../lib/decompress_inflate.c"
+#endif
+
void barebox_uncompress(void *compressed_start, unsigned int len)
{
void (*barebox)(void);
diff --git a/common/Kconfig b/common/Kconfig
index 8437e1c..702a0bd 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -110,6 +110,9 @@ choice
config IMAGE_COMPRESSION_LZO
bool "lzo"
+config IMAGE_COMPRESSION_GZIP
+ bool "gzip"
+
endchoice
endif
diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
index 526d6a1..5c1ebb6 100644
--- a/lib/decompress_inflate.c
+++ b/lib/decompress_inflate.c
@@ -4,6 +4,7 @@
/* prevent inclusion of _LINUX_KERNEL_H in pre-boot environment: lots
* errors about console_printk etc... on ARM */
#define _LINUX_KERNEL_H
+#include <linux/decompress/mm.h>
#include "zlib_inflate/inftrees.c"
#include "zlib_inflate/inffast.c"
diff --git a/piggy.gzip.S b/piggy.gzip.S
new file mode 100644
index 0000000..2ca7d78
--- /dev/null
+++ b/piggy.gzip.S
@@ -0,0 +1,6 @@
+ .section .piggydata,#alloc
+ .globl input_data
+input_data:
+ .incbin "barebox-uncompressed.bin.gzip"
+ .globl input_data_end
+input_data_end:
--
1.7.10
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread