Skip to contentSkip to conversation

compressed image update

PATCH New Jean-Christophe PLAGNIOL-VILLARD 1 participant 12 messages Jul 25, 2012

Subsystems (5)
lore
Share & tools
lore
#0 lore raw

v3 cover compressed image update

Hi,

v3:
add comp-y Kbuild target

v2:
fix modules support
move compressed barebox to arch/<arch?compressed rename target to zbarebox*

The following changes since commit 63ac9c743b1304b0b4b792643e4704394f6f8aeb:

only compress default env in uncompressed images (2012-07-20 14:20:15 +0200)

are available in the git repository at:

git://git.jcrosoft.org/barebox.git tags/compressed-gzip2

for you to fetch changes up to eaab1eff304c26f5470cc381f333115708d55cd6:

at91: add lowlevel init to the decompressor (2012-07-25 15:45:40 +0800)

----------------------------------------------------------------
compressed: gzip support and cleanup

The follwing patch series add the support of GZIP

And allow now to link only what is need in the decompressor

This is needed if you want to compile a barebox with modules support

as we current rely on gcc and it's garbage colector to clean the non needed object.

With modules support gcc will not do this.

This will allow to have a version of barebox shrink to the first 128KiB so it can fit in the first page of nand which is garanty badblock free and then if we need more feature we will use modules store in an other partitions.

Kbuild: Introduce built-comp to have related decompressor object across the source tree.

----------------------------------------------------------------
Jean-Christophe PLAGNIOL-VILLARD (11):
stddev: make it selectable via Kconfig
decompress_unlzo: define decompress_unlzo as decompress compressed image: factorise compressor type
decompressor: import malloc/free implementation for linux 3.4
ARM: add early malloc support needed by the decompressor
compressed: rename barebox target to zbarebox and zbarebox.bin compressed image: add gzip support
kbuild: Init all relevant variables used in kbuild files so
kbuild: add comp-y target
arm: use the new built-comp.o generated files
at91: add lowlevel init to the decompressor

 Makefile                                        |   43 +++++++++++--------------------------------
 arch/arm/Makefile                               |    9 ++++++++-
 arch/arm/compressed/Makefile                    |   43 +++++++++++++++++++++++++++++++++++++++++++
 arch/arm/compressed/barebox.lds.S               |   70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 piggy.lzo.S => arch/arm/compressed/piggy.gzip.S |    2 +-
 arch/arm/compressed/piggy.lzo.S                 |    6 ++++++
 arch/arm/cpu/start.c                            |   61 ++++++++++++++++++++++++++++++++++++++++++-------------------
 arch/arm/lib/Makefile                           |    6 +++++-
 arch/arm/lib/barebox.lds.S                      |    2 +-
 arch/arm/mach-at91/Makefile                     |    2 ++
 commands/Makefile                               |    2 +-
 common/Kconfig                                  |   25 ++++++++++++++++++++++---
 compressed/Makefile                             |    5 +++++
 compressed/misc.c                               |   14 ++++++++++++++
 compressed/string.c                             |  127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/decompress/mm.h                   |   68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/decompress_inflate.c                        |    1 +
 lib/decompress_unlzo.c                          |    1 +
 scripts/Makefile.build                          |   47 ++++++++++++++++++++++++++++++++++++++++++++---
 scripts/Makefile.lib                            |    3 +++
 20 files changed, 475 insertions(+), 62 deletions(-)
 create mode 100644 arch/arm/compressed/Makefile
 create mode 100644 arch/arm/compressed/barebox.lds.S
 rename piggy.lzo.S => arch/arm/compressed/piggy.gzip.S (70%)
 create mode 100644 arch/arm/compressed/piggy.lzo.S
 create mode 100644 compressed/Makefile
 create mode 100644 compressed/misc.c
 create mode 100644 compressed/string.c
 create mode 100644 include/linux/decompress/mm.h

Best Regards,
J.

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#1 lore raw

PATCH v3 1/11 stddev: make it selectable via Kconfig

enable is by default for simple and hush
we do not need to NO_SHELL

this allow to save 1KiB

---
 commands/Makefile |    2 +-
 common/Kconfig    |    5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)
commands/Makefile +1 -1
index 54191b4..e9157bf 100644
@@ -1,4 +1,4 @@
-obj-y				+= stddev.o
+obj-$(CONFIG_STDDEV)		+= stddev.o
 obj-$(CONFIG_CMD_BOOTM)		+= bootm.o
 obj-$(CONFIG_CMD_UIMAGE)	+= uimage.o
 obj-$(CONFIG_CMD_LINUX16)	+= linux16.o
common/Kconfig +5 -0
index 1c996aa..c6f1afa 100644
@@ -50,6 +50,9 @@ config BINFMT
 config GLOBALVAR
 	bool
 
+config STDDEV
+	bool
+
 menu "General Settings              "
 
 config LOCALVERSION
@@ -295,6 +298,7 @@ choice
 		select COMMAND_SUPPORT
 		select PARAMETER
 		select BINFMT
+		select STDDEV
 		help
 		  Enable hush support. This is the most advanced shell available
 		  for barebox.
@@ -304,6 +308,7 @@ choice
 		select ENVIRONMENT_VARIABLES
 		select COMMAND_SUPPORT
 		select PARAMETER
+		select STDDEV
 		help
 		  simple shell. No if/then, no return values from commands, no loops
 
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#2 lore raw

PATCH v3 2/11 decompress_unlzo: define decompress_unlzo as decompress

so we can use decompress in the decompressor
this will simplify multi decompress support

---
 lib/decompress_unlzo.c |    1 +
 1 file changed, 1 insertion(+)
lib/decompress_unlzo.c +1 -0
index 0e6a7ad..56abfc6 100644
@@ -289,3 +289,4 @@ exit_1:
 exit:
 	return ret;
 }
+#define decompress decompress_unlzo
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#3 lore raw

PATCH v3 3/11 compressed image: factorise compressor type

In reply to Jean-Christophe PLAGNIOL-VILLARD

This will simplify to support of multi compressor support such as gzip, lzma, xz.

---
 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(-)
Makefile +7 -5
index e0a3c07..0b3da03 100644
@@ -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)
arch/arm/cpu/start.c +6 -3
index 6743804..18c5c83 100644
@@ -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;
arch/arm/lib/Makefile +1 -1
index 044d3e6..1b6f7f4 100644
@@ -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
arch/arm/lib/barebox.lds.S +1 -1
index b415830..b22cf98 100644
@@ -31,7 +31,7 @@ SECTIONS
 {
 	. = TEXT_BASE;
 
-#ifndef CONFIG_IMAGE_COMPRESSION_LZO
+#ifndef CONFIG_IMAGE_COMPRESSION
 	PRE_IMAGE
 #endif
 	. = ALIGN(4);
common/Kconfig +14 -3
index c6f1afa..8437e1c 100644
@@ -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
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#4 lore raw

PATCH v3 4/11 decompressor: import malloc/free implementation for linux 3.4

In reply to Jean-Christophe PLAGNIOL-VILLARD

This is need for gunzip support

---
 include/linux/decompress/mm.h |   68 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 include/linux/decompress/mm.h
include/linux/decompress/mm.h new file +68 -0
new file mode 100644
index 0000000..0c35411
@@ -0,0 +1,68 @@
+/*
+ * linux/compr_mm.h
+ *
+ * Memory management for pre-boot and ramdisk uncompressors
+ *
+ * Authors: Alain Knaff <[email protected]>
+ *
+ */
+
+#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 */
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#5 lore raw

PATCH v3 5/11 ARM: add early malloc support needed by the decompressor

In reply to Jean-Christophe PLAGNIOL-VILLARD

This is not needed by lzo but by gunzip, xz and others.

---
 arch/arm/cpu/start.c |    7 +++++++
 1 file changed, 7 insertions(+)
arch/arm/cpu/start.c +7 -0
index 18c5c83..8ab6fdc 100644
@@ -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));
 
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#6 lore raw

PATCH v3 6/11 compressed: rename barebox target to zbarebox and zbarebox.bin

In reply to Jean-Christophe PLAGNIOL-VILLARD

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.

Build it in arch/<arm>/compressed
Rebuild all the needed object.

Keep the previous target untouched.
This fix the modules support and allow custom flags for each file.

Import string functions from linux 3.4 (arch/arm/boot/compressed/string.c) and implement a dummy panic.

---
 Makefile                          |   37 ++---------
 arch/arm/Makefile                 |    9 ++-
 arch/arm/compressed/Makefile      |   69 ++++++++++++++++++++
 arch/arm/compressed/barebox.lds.S |   70 ++++++++++++++++++++
 arch/arm/compressed/piggy.lzo.S   |    6 ++
 arch/arm/cpu/start.c              |   41 +++++++-----
 compressed/misc.c                 |   14 ++++
 compressed/string.c               |  127 +++++++++++++++++++++++++++++++++++++
 piggy.lzo.S                       |    6 --
 9 files changed, 323 insertions(+), 56 deletions(-)
 create mode 100644 arch/arm/compressed/Makefile
 create mode 100644 arch/arm/compressed/barebox.lds.S
 create mode 100644 arch/arm/compressed/piggy.lzo.S
 create mode 100644 compressed/misc.c
 create mode 100644 compressed/string.c
 delete mode 100644 piggy.lzo.S
Makefile +4 -33
index 0b3da03..46c9491 100644
@@ -512,7 +512,6 @@ common-y	:= $(patsubst %/, %/built-in.o, $(common-y))
 barebox-common := $(common-y)
 barebox-all    := $(barebox-common)
 barebox-lds    := $(lds-y)
-barebox-compressed-lds    := $(lds-compressed-y)
 
 # Rule to link barebox
 # May be overridden by arch/$(ARCH)/Makefile
@@ -668,11 +667,12 @@ quiet_cmd_objcopy = OBJCOPY $@
       cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
 
 OBJCOPYFLAGS_barebox.bin = -O binary
-OBJCOPYFLAGS_barebox-uncompressed.bin = -O binary
 
 barebox.bin: barebox FORCE
 	$(call if_changed,objcopy)
+ifndef CONFIG_IMAGE_COMPRESSION
 	$(call cmd,check_file_size,$(CONFIG_BAREBOX_MAX_IMAGE_SIZE))
+endif
 
 ifdef CONFIG_X86
 barebox.S: barebox
@@ -702,41 +702,13 @@ quiet_cmd_disasm = DISASM  $@
 
 barebox.S: barebox FORCE
 	$(call if_changed,disasm)
-barebox-uncompressed.S: barebox-uncompressed FORCE
-	$(call if_changed,disasm)
 endif
 
 # barebox image
-barebox-uncompressed: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsyms.o)
-	$(call barebox-modpost)
-	$(call if_changed_rule,barebox__)
-	$(Q)rm -f .old_version
-
-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.$(suffix_y).o: barebox-uncompressed.bin.$(suffix_y) $(src)/piggy.$(suffix_y).S
-	@echo "  CC     " $@
-	$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c $(src)/piggy.$(suffix_y).S -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.$(suffix_y).o --end-group
-else
 barebox: $(barebox-lds) $(barebox-head) $(barebox-common) $(kallsyms.o) FORCE
 	$(call barebox-modpost)
 	$(call if_changed_rule,barebox__)
 	$(Q)rm -f .old_version
-endif
 
 barebox.srec: barebox
 	$(OBJCOPY) -O srec $< $@
@@ -1031,11 +1003,10 @@ endif # CONFIG_MODULES
 # Directories & files removed with 'make clean'
 CLEAN_DIRS  += $(MODVERDIR)
 CLEAN_FILES +=	barebox System.map include/generated/barebox_default_env.h \
-                .tmp_version .tmp_barebox* barebox.bin barebox.map barebox.S \
+                .tmp_version .tmp_barebox* barebox.* \
 		.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
+		Doxyfile.version barebox.srec barebox.s5p
 
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include2 usr/include
arch/arm/Makefile +8 -1
index a93c4d5..647c536 100644
@@ -184,6 +184,14 @@ ifeq ($(CONFIG_OMAP_BUILD_IFT),y)
 KBUILD_IMAGE := MLO
 endif
 
+ifdef CONFIG_IMAGE_COMPRESSION
+KBUILD_IMAGE := zbarebox.bin
+endif
+
+comp := arch/arm/compressed
+zbarebox.S zbarebox.bin zbarebox: barebox.bin
+	$(Q)$(MAKE) $(build)=$(comp) $(comp)/$@
+
 all: $(KBUILD_IMAGE)
 
 archprepare: maketools
@@ -208,6 +216,5 @@ common-y += $(BOARD) $(MACH)
 common-y += arch/arm/lib/ arch/arm/cpu/
 
 lds-y	:= arch/arm/lib/barebox.lds
-lds-compressed-y := arch/arm/lib/barebox-compressed.lds
 
 CLEAN_FILES += include/generated/mach-types.h arch/arm/lib/barebox.lds
arch/arm/compressed/Makefile new file +69 -0

69 lines not on this page · raw message

arch/arm/compressed/barebox.lds.S new file +70 -0

70 lines not on this page · raw message

arch/arm/compressed/piggy.lzo.S new file +6 -0
new file mode 100644
index 0000000..0c0d216
@@ -0,0 +1,6 @@
+	.section .piggydata,#alloc
+	.globl	input_data
+input_data:
+	.incbin	"arch/arm/compressed/piggy.lzo"
+	.globl	input_data_end
+input_data_end:
arch/arm/cpu/start.c +25 -16

65 lines not on this page · raw message

compressed/misc.c new file +14 -0
new file mode 100644
index 0000000..47e9cea
@@ -0,0 +1,14 @@
+#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);
+}
+
+void start_barebox(void)
+{
+}
compressed/string.c new file +127 -0

127 lines not on this page · raw message

piggy.lzo.S deleted +0 -6
deleted file mode 100644
index 6cc618d..0000000
@@ -1,6 +0,0 @@
-	.section .piggydata,#alloc
-	.globl  input_data
-input_data:
-	.incbin "barebox-uncompressed.bin.lzo"
-	.globl  input_data_end
-input_data_end:
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#7 lore raw

PATCH v3 7/11 compressed image: add gzip support

In reply to Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/compressed/Makefile     |    1 +
 arch/arm/compressed/piggy.gzip.S |    6 ++++++
 arch/arm/cpu/start.c             |    4 ++++
 common/Kconfig                   |    3 +++
 lib/decompress_inflate.c         |    1 +
 5 files changed, 15 insertions(+)
 create mode 100644 arch/arm/compressed/piggy.gzip.S
arch/arm/compressed/Makefile +1 -0
index 627a411..59e7d59 100644
@@ -1,4 +1,5 @@
 
+suffix_$(CONFIG_IMAGE_COMPRESSION_GZIP) = gzip
 suffix_$(CONFIG_IMAGE_COMPRESSION_LZO)	= lzo
 
 OBJCOPYFLAGS_zbarebox.bin = -O binary
arch/arm/compressed/piggy.gzip.S new file +6 -0
new file mode 100644
index 0000000..ef3dd77
@@ -0,0 +1,6 @@
+	.section .piggydata,#alloc
+	.globl  input_data
+input_data:
+	.incbin "arch/arm/compressed/piggy.gzip"
+	.globl  input_data_end
+input_data_end:
arch/arm/cpu/start.c +4 -0
index 6c745f7..5503552 100644
@@ -110,6 +110,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);
common/Kconfig +3 -0
index 8437e1c..702a0bd 100644
@@ -110,6 +110,9 @@ choice
 config IMAGE_COMPRESSION_LZO
 	bool "lzo"
 
+config IMAGE_COMPRESSION_GZIP
+	bool "gzip"
+
 endchoice
 
 endif
lib/decompress_inflate.c +1 -0
index 526d6a1..5c1ebb6 100644
@@ -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"
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#8 lore raw

PATCH v3 8/11 kbuild: Init all relevant variables used in kbuild files so

In reply to Jean-Christophe PLAGNIOL-VILLARD

import from linux 3.5-rc5

---
 scripts/Makefile.build |   25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)
scripts/Makefile.build +24 -1
index f70e2b9..1a82c44 100644
@@ -7,7 +7,30 @@ src := $(obj)
 PHONY := __build
 __build:
 
-# Read .config if it exist, otherwise ignore
+# Init all relevant variables used in kbuild files so
+# 1) they have correct type
+# 2) they do not inherit any value from the environment
+obj-y :=
+obj-m :=
+lib-y :=
+lib-m :=
+always :=
+targets :=
+subdir-y :=
+subdir-m :=
+EXTRA_AFLAGS   :=
+EXTRA_CFLAGS   :=
+EXTRA_CPPFLAGS :=
+EXTRA_LDFLAGS  :=
+asflags-y  :=
+ccflags-y  :=
+cppflags-y :=
+ldflags-y  :=
+
+subdir-asflags-y :=
+subdir-ccflags-y :=
+
+# Read auto.conf if it exists, otherwise ignore
 -include include/config/auto.conf
 
 include scripts/Kbuild.include
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#9 lore raw

PATCH v3 9/11 kbuild: add comp-y target

In reply to Jean-Christophe PLAGNIOL-VILLARD

This will allow to link compiled object to the built-comp.o across the source tree that will be finally link to the decompressor.

Limitation:

if the object is present in both decompressor and barebox the object is generated once only

---
 Makefile               |    6 +++++-
 scripts/Makefile.build |   22 ++++++++++++++++++++--
 scripts/Makefile.lib   |    3 +++
 3 files changed, 28 insertions(+), 3 deletions(-)
Makefile +5 -1
index 46c9491..277f7da 100644
@@ -481,6 +481,8 @@ barebox-alldirs	:= $(sort $(barebox-dirs) $(patsubst %/,%,$(filter %/, \
 		     $(core-n) $(core-) $(drivers-n) $(drivers-) \
 		     $(net-n)  $(net-)  $(libs-n)    $(libs-))))
 
+comp-common-y	:= $(common-y)
+comp-common-y	:= $(patsubst %/, %/built-comp.o, $(common-y))
 common-y	:= $(patsubst %/, %/built-in.o, $(common-y))
 
 # Build barebox
@@ -510,6 +512,8 @@ common-y	:= $(patsubst %/, %/built-in.o, $(common-y))
 # System.map is generated to document addresses of all kernel symbols
 
 barebox-common := $(common-y)
+barebox-common-comp := $(comp-common-y)
+export barebox-common-comp
 barebox-all    := $(barebox-common)
 barebox-lds    := $(lds-y)
 
@@ -715,7 +719,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-lds) $(barebox-common-comp): $(barebox-dirs) ;
 
 # Handle descending into subdirectories listed in $(barebox-dirs)
 # Preset locale variables to speed up the build process. Limit locale
scripts/Makefile.build +20 -2
index 1a82c44..7b3f711 100644
@@ -13,6 +13,7 @@ __build:
 obj-y :=
 obj-m :=
 lib-y :=
+comp-y :=
 lib-m :=
 always :=
 targets :=
@@ -97,13 +98,17 @@ ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
 lib-target := $(obj)/lib.a
 endif
 
-ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target)),)
+ifneq ($(strip $(obj-y) $(obj-m) $(obj-n) $(obj-) $(lib-target) $(comp-y)),)
 builtin-target := $(obj)/built-in.o
 endif
 
+ifneq ($(strip $(comp-y) $(builtin-target)),)
+comp-target := $(obj)/built-comp.o
+endif
+
 # We keep a list of all modules in $(MODVERDIR)
 
-__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \
+__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(comp-target) $(extra-y)) \
 	 $(if $(KBUILD_MODULES),$(obj-m)) \
 	 $(subdir-ym) $(always)
 	@:
@@ -294,6 +299,19 @@ $(builtin-target): $(obj-y) FORCE
 targets += $(builtin-target)
 endif # builtin-target
 
+ifdef comp-target
+quiet_cmd_link_comp_o_target = COMPLD  $@
+# If the list of objects to link is empty, just create an empty built-comp.o
+cmd_link_comp_o_target = $(if $(strip $(comp-y)),\
+		      $(LD) $(ld_flags) -r -o $@ $(filter $(comp-y), $^),\
+		      rm -f $@; $(AR) rcs $@)
+
+$(comp-target): $(comp-y) FORCE
+	$(call if_changed,link_comp_o_target)
+
+targets += $(comp-target)
+endif # comp-target
+
 #
 # Rule to compile a set of .o files into one .a file
 #
scripts/Makefile.lib +3 -0
index b842c48..f0ea147 100644
@@ -28,6 +28,8 @@ subdir-m	+= $(__subdir-m)
 obj-y		:= $(patsubst %/, %/built-in.o, $(obj-y))
 obj-m		:= $(filter-out %/, $(obj-m))
 
+comp-y		:= $(patsubst %/, %/built-comp.o, $(comp-y))
+
 # Subdirectories we need to descend into
 
 subdir-ym	:= $(sort $(subdir-y) $(subdir-m))
@@ -63,6 +65,7 @@ targets		:= $(addprefix $(obj)/,$(targets))
 obj-y		:= $(addprefix $(obj)/,$(obj-y))
 obj-m		:= $(addprefix $(obj)/,$(obj-m))
 lib-y		:= $(addprefix $(obj)/,$(lib-y))
+comp-y		:= $(addprefix $(obj)/,$(comp-y))
 subdir-obj-y	:= $(addprefix $(obj)/,$(subdir-obj-y))
 real-objs-y	:= $(addprefix $(obj)/,$(real-objs-y))
 real-objs-m	:= $(addprefix $(obj)/,$(real-objs-m))
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#10 lore raw

PATCH v3 10/11 arm: use the new built-comp.o generated files

In reply to Jean-Christophe PLAGNIOL-VILLARD
---
 Makefile                     |    2 ++
 arch/arm/compressed/Makefile |   33 +++------------------------------
 arch/arm/lib/Makefile        |    4 ++++
 compressed/Makefile          |    5 +++++
 4 files changed, 14 insertions(+), 30 deletions(-)
 create mode 100644 compressed/Makefile
Makefile +2 -0
index 277f7da..35a681f 100644
@@ -474,6 +474,8 @@ CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 # this default value
 export KBUILD_IMAGE ?= barebox
 
+common-$(CONFIG_IMAGE_COMPRESSION)	+= compressed/
+
 barebox-dirs	:= $(patsubst %/,%,$(filter %/, $(common-y)))
 
 barebox-alldirs	:= $(sort $(barebox-dirs) $(patsubst %/,%,$(filter %/, \
arch/arm/compressed/Makefile +3 -30
index 59e7d59..9d8c051 100644
@@ -6,12 +6,11 @@ OBJCOPYFLAGS_zbarebox.bin = -O binary
 
 targets := zbarebox zbarebox.bin zbarebox.S \
 	   piggy.$(suffix_y) piggy.$(suffix_y).o \
-	   lib1funcs.o lib1funcs.S ashldi3.o ashldi3.S \
-	   misc.o string.o start.o
+	   start.o
 
 # Make sure files are removed during clean
 extra-y       += piggy.gzip piggy.lzo piggy.lzma piggy.xzkern \
-		 lib1funcs.S ashldi3.S start.c string.c misc.c
+		 start.c
 
 $(obj)/zbarebox.bin:	$(obj)/zbarebox FORCE
 	$(call if_changed,objcopy)
@@ -21,39 +20,13 @@ $(obj)/zbarebox.bin:	$(obj)/zbarebox FORCE
 $(obj)/zbarebox.S: $(obj)/zbarebox FORCE
 	$(call if_changed,disasm)
 
-# For __aeabi_uidivmod
-lib1funcs = $(obj)/lib1funcs.o
-
-$(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S
-	$(call cmd,shipped)
-
 CFLAGS_start.o = -D CONFIG_COMPRESSOR
 start= $(obj)/start.o
 $(obj)/start.c: $(srctree)/arch/$(SRCARCH)/cpu/start.c
 	$(call cmd,shipped)
 
-string= $(obj)/string.o
-$(obj)/string.c: $(srctree)/compressed/string.c
-	$(call cmd,shipped)
-
-misc= $(obj)/misc.o
-$(obj)/misc.c: $(srctree)/compressed/misc.c
-	$(call cmd,shipped)
-
-# For __aeabi_llsl
-ashldi3 = $(obj)/ashldi3.o
-
-$(obj)/ashldi3.S: $(srctree)/arch/$(SRCARCH)/lib/ashldi3.S
-	$(call cmd,shipped)
-
-# For __div0
-div0 = $(obj)/div0.o
-
-$(obj)/div0.c: $(srctree)/arch/$(SRCARCH)/lib/div0.c
-	$(call cmd,shipped)
-
 LDFLAGS_zbarebox	:= -Map zbarebox.map
-comp := $(obj)/piggy.$(suffix_y).o \
+comp := $(barebox-common-comp) $(obj)/piggy.$(suffix_y).o \
 	$(lib1funcs) $(ashldi3) $(start) $(string) $(misc) $(div0)
 
 $(obj)/zbarebox: $(obj)/barebox.lds $(comp) FORCE
arch/arm/lib/Makefile +4 -0
index 1b6f7f4..2291dc2 100644
@@ -22,3 +22,7 @@ obj-$(CONFIG_ARM_UNWIND) += unwind.o
 obj-$(CONFIG_MODULES) += module.o
 extra-y += barebox.lds
 extra-$(CONFIG_IMAGE_COMPRESSION) += barebox-compressed.lds
+
+comp-y	+= lib1funcs.o
+comp-y	+= ashldi3.o
+comp-y	+= div0.o
compressed/Makefile new file +5 -0
new file mode 100644
index 0000000..c2c4f7f
@@ -0,0 +1,5 @@
+#
+# only unsed by the decompressor
+#
+comp-y += misc.o
+comp-y += string.o
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#11 lore raw

PATCH v3 11/11 at91: add lowlevel init to the decompressor

In reply to Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/mach-at91/Makefile |    2 ++
 1 file changed, 2 insertions(+)
arch/arm/mach-at91/Makefile +2 -0
index 491c454..5565989 100644
@@ -4,6 +4,8 @@ lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
 
+comp-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
 obj-$(CONFIG_AT91SAM9_RESET) += at91sam9_reset.o
 obj-$(CONFIG_AT91SAM9G45_RESET) += at91sam9g45_reset.o
 
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox