* [PATCH 1/2] kbuild: keep the barebox binary accessible
@ 2012-09-06 10:20 Jan Luebbe
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer
0 siblings, 2 replies; 8+ messages in thread
From: Jan Luebbe @ 2012-09-06 10:20 UTC (permalink / raw)
To: barebox
When building a special image from the original (compressed or
not) binary, to not overwrite KBUILD_BINARY.
This allows producing multiple images (such as MLO, UBL, ...)
from the (z)barebox.bin. In the case where no special image is
used, KBUILD_IMAGE is set to KBUILD_BINARY.
This patch was developed together with Sascha Hauer. Thanks!
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
Makefile | 16 +++++++++++-----
arch/arm/Makefile | 10 +++++-----
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index c6264d3..0f1a319 100644
--- a/Makefile
+++ b/Makefile
@@ -462,12 +462,18 @@ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
# disable pointer signed / unsigned warnings in gcc 4.0
CFLAGS += $(call cc-option,-Wno-pointer-sign,)
-# Default kernel image to build when no specific target is given.
-# KBUILD_IMAGE may be overruled on the command line or
-# set in the environment
-# Also any assignments in arch/$(ARCH)/Makefile take precedence over
-# this default value
+# KBUILD_IMAGE: Default barebox image to build
+# Depending on the architecture, this can be either compressed or not.
+# It will also include any necessary headers to be bootable.
export KBUILD_IMAGE ?= barebox.bin
+# KBUILD_BINARY: Raw barebox binary
+# This variable is set in case the architecture prepends a header and
+# points to a binary that can be loaded directly into RAM and executed.
+export KBUILD_BINARY ?= barebox.bin
+# KBUILD_IMAGE and _BINARY may be overruled on the command line or
+# set in the environment.
+# Also any assignments in arch/$(ARCH)/Makefile take precedence over
+# the default value.
barebox-flash-image: $(KBUILD_IMAGE)
$(call if_changed,ln)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 8e660be..94ee073 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -179,7 +179,7 @@ barebox.netx: $(KBUILD_BINARY)
ifeq ($(machine-y),netx)
KBUILD_TARGET := barebox.netx
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.netx
endif
barebox.s5p: $(KBUILD_BINARY)
@@ -187,7 +187,7 @@ barebox.s5p: $(KBUILD_BINARY)
ifeq ($(CONFIG_ARCH_S5PCxx),y)
KBUILD_TARGET := barebox.s5p
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.s5p
endif
quiet_cmd_mlo ?= IFT $@
@@ -199,7 +199,7 @@ MLO: $(KBUILD_BINARY)
ifeq ($(CONFIG_OMAP_BUILD_IFT),y)
KBUILD_TARGET := MLO
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := MLO
endif
barebox.ubl: $(KBUILD_BINARY)
@@ -209,7 +209,7 @@ barebox.ubl: $(KBUILD_BINARY)
ifeq ($(CONFIG_ARCH_DAVINCI),y)
KBUILD_TARGET := barebox.ubl
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.ubl
endif
pbl := arch/arm/pbl
@@ -219,7 +219,7 @@ zbarebox.S zbarebox.bin zbarebox: barebox.bin
archclean:
$(MAKE) $(clean)=$(pbl)
-KBUILD_IMAGE := $(KBUILD_BINARY)
+KBUILD_IMAGE ?= $(KBUILD_BINARY)
archprepare: maketools
maketools:
--
1.7.10.4
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage
2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
@ 2012-09-06 10:20 ` Jan Luebbe
2012-09-06 10:32 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer
1 sibling, 2 replies; 8+ messages in thread
From: Jan Luebbe @ 2012-09-06 10:20 UTC (permalink / raw)
To: barebox
This is mostly useful during the initial port of barebox to a new
board which is supported by u-boot. It also allows starting barebox
from a SRAM-based u-boot SPL.
A different load address can be set like this:
make barebox.uimage UIMAGE_BASE=0x80000000
This patch was developed together with Sascha Hauer. Thanks!
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
Makefile | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/Makefile b/Makefile
index 0f1a319..9381e77 100644
--- a/Makefile
+++ b/Makefile
@@ -686,6 +686,22 @@ ifndef CONFIG_PBL_IMAGE
$(call cmd,check_file_size,$(CONFIG_BAREBOX_MAX_IMAGE_SIZE))
endif
+# By default the uImage load address is 2MB below CONFIG_TEXT_BASE,
+# leaving space for the compressed PBL image at 1MB below CONFIG_TEXT_BASE.
+UIMAGE_BASE ?= $(shell printf "0x%08x" $$(($(CONFIG_TEXT_BASE) - 0x200000)))
+
+# For development provide a target which makes barebox loadable by an
+# unmodified u-boot
+quiet_cmd_barebox_mkimage = MKIMAGE $@
+ cmd_barebox_mkimage = $(srctree)/scripts/mkimage -A $(ARCH) -T firmware -C none \
+ -O barebox -a $(UIMAGE_BASE) -e $(UIMAGE_BASE) \
+ -n "barebox $(KERNELRELEASE)" -d $< $@
+
+# barebox.uimage is build from the raw barebox binary, without any other
+# headers.
+barebox.uimage: $(KBUILD_BINARY) FORCE
+ $(call if_changed,barebox_mkimage)
+
ifdef CONFIG_X86
barebox.S: barebox
ifdef CONFIG_X86_HDBOOT
--
1.7.10.4
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
@ 2012-09-06 10:32 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
1 sibling, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-06 10:32 UTC (permalink / raw)
To: Jan Luebbe; +Cc: barebox
On 12:20 Thu 06 Sep , Jan Luebbe wrote:
> This is mostly useful during the initial port of barebox to a new
> board which is supported by u-boot. It also allows starting barebox
> from a SRAM-based u-boot SPL.
>
> A different load address can be set like this:
> make barebox.uimage UIMAGE_BASE=0x80000000
>
> This patch was developed together with Sascha Hauer. Thanks!
>
> Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
> ---
> Makefile | 16 ++++++++++++++++
missing gitignore and clean
Best Regards,
J.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5] xload: get barebox size from barebox_arm_head
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
2012-09-06 10:32 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-06 12:41 ` Jan Weitzel
2012-09-06 13:23 ` Jean-Christophe PLAGNIOL-VILLARD
` (2 more replies)
1 sibling, 3 replies; 8+ messages in thread
From: Jan Weitzel @ 2012-09-06 12:41 UTC (permalink / raw)
To: barebox
Add functions to read the barebox_arm_head, check barebox magicword
and read out the barebox image size.
Create a inital partion of 1Mb to access the barebox image on nand.
Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
v2: remove fall back if header read fail
v3: fix header check, rebase master
v4: factorize barebox detection
v5: mv devines to include/filetype.h
arch/arm/include/asm/barebox-arm-head.h | 9 +++++
arch/arm/mach-omap/include/mach/xload.h | 2 +-
arch/arm/mach-omap/xload.c | 57 ++++++++++++++++++++++++++++--
common/filetype.c | 2 +-
include/filetype.h | 16 +++++++++
4 files changed, 71 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 844b57f..26f1b68 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -1,7 +1,7 @@
#ifndef _MACH_XLOAD_H
#define _MACH_XLOAD_H
-void *omap_xload_boot_nand(int offset, int size);
+void *omap_xload_boot_nand(int offset);
void *omap_xload_boot_mmc(void);
enum omap_boot_src {
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 13024ab..0afeea9 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -7,16 +7,65 @@
#include <fcntl.h>
#include <mach/xload.h>
#include <sizes.h>
+#include <filetype.h>
-void *omap_xload_boot_nand(int offset, int size)
+void *read_image_head(const char *name)
{
+ void *header = xmalloc(ARM_HEAD_SIZE);
+ struct cdev *cdev;
int ret;
- void *to = xmalloc(size);
+
+ cdev = cdev_open(name, O_RDONLY);
+ if (!cdev) {
+ printf("failed to open partition\n");
+ return NULL;
+ }
+
+ ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
+ cdev_close(cdev);
+
+ if (ret != ARM_HEAD_SIZE) {
+ printf("failed to read from partition\n");
+ return NULL;
+ }
+
+ return header;
+}
+
+unsigned int get_image_size(void *head)
+{
+ unsigned int ret = 0;
+ unsigned int *psize = head + ARM_HEAD_SIZE_OFFSET;
+
+ if (is_barebox_arm_head(head))
+ ret = *psize;
+ debug("Detected barebox image size %u\n", ret);
+
+ return ret;
+}
+
+void *omap_xload_boot_nand(int offset)
+{
+ int ret;
+ int size;
+ void *to, *header;
struct cdev *cdev;
- devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
+ devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
dev_add_bb_dev("x", "bbx");
+ header = read_image_head("bbx");
+ if (header == NULL)
+ return NULL;
+
+ size = get_image_size(header);
+ if (!size) {
+ printf("failed to get image size\n");
+ return NULL;
+ }
+
+ to = xmalloc(size);
+
cdev = cdev_open("bbx", O_RDONLY);
if (!cdev) {
printf("failed to open nand\n");
@@ -80,7 +129,7 @@ int run_shell(void)
printf("unknown boot source. Fall back to nand\n");
case OMAP_BOOTSRC_NAND:
printf("booting from NAND\n");
- func = omap_xload_boot_nand(SZ_128K, SZ_256K);
+ func = omap_xload_boot_nand(SZ_128K);
break;
}
diff --git a/common/filetype.c b/common/filetype.c
index e736d43..6306fdc 100644
--- a/common/filetype.c
+++ b/common/filetype.c
@@ -75,7 +75,7 @@ enum filetype file_detect_type(void *_buf)
if (strncmp(buf8, "#!/bin/sh", 9) == 0)
return filetype_sh;
- if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
+ if (is_barebox_arm_head(_buf))
return filetype_arm_barebox;
if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
return filetype_arm_zimage;
diff --git a/include/filetype.h b/include/filetype.h
index 179ec0f..6ac1c1c 100644
--- a/include/filetype.h
+++ b/include/filetype.h
@@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
enum filetype file_detect_type(void *_buf);
enum filetype file_name_detect_type(const char *filename);
+#define ARM_HEAD_SIZE 0x30
+#define ARM_HEAD_MAGICWORD_OFFSET 0x20
+#define ARM_HEAD_SIZE_OFFSET 0x2C
+
+#ifdef CONFIG_ARM
+static inline int is_barebox_arm_head(const char *head)
+{
+ return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
+}
+#else
+static inline int is_barebox_arm_head(const char *head)
+{
+ return 0
+}
+#endif
+
#endif /* __FILE_TYPE_H */
--
1.7.0.4
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
@ 2012-09-06 13:23 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 17:39 ` Sascha Hauer
2012-09-07 10:25 ` Sascha Hauer
2 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-06 13:23 UTC (permalink / raw)
To: Jan Weitzel; +Cc: barebox
On 14:41 Thu 06 Sep , Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.
>
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> ---
> v2: remove fall back if header read fail
> v3: fix header check, rebase master
> v4: factorize barebox detection
> v5: mv devines to include/filetype.h
>
> arch/arm/include/asm/barebox-arm-head.h | 9 +++++
> arch/arm/mach-omap/include/mach/xload.h | 2 +-
> arch/arm/mach-omap/xload.c | 57 ++++++++++++++++++++++++++++--
> common/filetype.c | 2 +-
> include/filetype.h | 16 +++++++++
> 4 files changed, 71 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
> #ifndef _MACH_XLOAD_H
> #define _MACH_XLOAD_H
>
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
> void *omap_xload_boot_mmc(void);
>
> enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 13024ab..0afeea9 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,65 @@
> #include <fcntl.h>
> #include <mach/xload.h>
> #include <sizes.h>
> +#include <filetype.h>
>
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
> {
> + void *header = xmalloc(ARM_HEAD_SIZE);
> + struct cdev *cdev;
> int ret;
> - void *to = xmalloc(size);
> +
> + cdev = cdev_open(name, O_RDONLY);
> + if (!cdev) {
> + printf("failed to open partition\n");
> + return NULL;
> + }
> +
> + ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> + cdev_close(cdev);
> +
> + if (ret != ARM_HEAD_SIZE) {
> + printf("failed to read from partition\n");
> + return NULL;
> + }
> +
> + return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> + unsigned int ret = 0;
> + unsigned int *psize = head + ARM_HEAD_SIZE_OFFSET;
> +
> + if (is_barebox_arm_head(head))
> + ret = *psize;
> + debug("Detected barebox image size %u\n", ret);
> +
> + return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
> +{
> + int ret;
> + int size;
> + void *to, *header;
> struct cdev *cdev;
>
> - devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
> + devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
I'd map 8M so can boot a kernel directly too
Best Regards,
J.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] kbuild: keep the barebox binary accessible
2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
@ 2012-09-06 17:32 ` Sascha Hauer
1 sibling, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-06 17:32 UTC (permalink / raw)
To: Jan Luebbe; +Cc: barebox
On Thu, Sep 06, 2012 at 12:20:15PM +0200, Jan Luebbe wrote:
> When building a special image from the original (compressed or
> not) binary, to not overwrite KBUILD_BINARY.
>
> This allows producing multiple images (such as MLO, UBL, ...)
> from the (z)barebox.bin. In the case where no special image is
> used, KBUILD_IMAGE is set to KBUILD_BINARY.
>
> This patch was developed together with Sascha Hauer. Thanks!
>
> Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
Applied (only this one for now), thanks
Sascha
> ---
> Makefile | 16 +++++++++++-----
> arch/arm/Makefile | 10 +++++-----
> 2 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index c6264d3..0f1a319 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -462,12 +462,18 @@ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
> # disable pointer signed / unsigned warnings in gcc 4.0
> CFLAGS += $(call cc-option,-Wno-pointer-sign,)
>
> -# Default kernel image to build when no specific target is given.
> -# KBUILD_IMAGE may be overruled on the command line or
> -# set in the environment
> -# Also any assignments in arch/$(ARCH)/Makefile take precedence over
> -# this default value
> +# KBUILD_IMAGE: Default barebox image to build
> +# Depending on the architecture, this can be either compressed or not.
> +# It will also include any necessary headers to be bootable.
> export KBUILD_IMAGE ?= barebox.bin
> +# KBUILD_BINARY: Raw barebox binary
> +# This variable is set in case the architecture prepends a header and
> +# points to a binary that can be loaded directly into RAM and executed.
> +export KBUILD_BINARY ?= barebox.bin
> +# KBUILD_IMAGE and _BINARY may be overruled on the command line or
> +# set in the environment.
> +# Also any assignments in arch/$(ARCH)/Makefile take precedence over
> +# the default value.
>
> barebox-flash-image: $(KBUILD_IMAGE)
> $(call if_changed,ln)
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 8e660be..94ee073 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -179,7 +179,7 @@ barebox.netx: $(KBUILD_BINARY)
>
> ifeq ($(machine-y),netx)
> KBUILD_TARGET := barebox.netx
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.netx
> endif
>
> barebox.s5p: $(KBUILD_BINARY)
> @@ -187,7 +187,7 @@ barebox.s5p: $(KBUILD_BINARY)
>
> ifeq ($(CONFIG_ARCH_S5PCxx),y)
> KBUILD_TARGET := barebox.s5p
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.s5p
> endif
>
> quiet_cmd_mlo ?= IFT $@
> @@ -199,7 +199,7 @@ MLO: $(KBUILD_BINARY)
>
> ifeq ($(CONFIG_OMAP_BUILD_IFT),y)
> KBUILD_TARGET := MLO
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := MLO
> endif
>
> barebox.ubl: $(KBUILD_BINARY)
> @@ -209,7 +209,7 @@ barebox.ubl: $(KBUILD_BINARY)
>
> ifeq ($(CONFIG_ARCH_DAVINCI),y)
> KBUILD_TARGET := barebox.ubl
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.ubl
> endif
>
> pbl := arch/arm/pbl
> @@ -219,7 +219,7 @@ zbarebox.S zbarebox.bin zbarebox: barebox.bin
> archclean:
> $(MAKE) $(clean)=$(pbl)
>
> -KBUILD_IMAGE := $(KBUILD_BINARY)
> +KBUILD_IMAGE ?= $(KBUILD_BINARY)
>
> archprepare: maketools
> maketools:
> --
> 1.7.10.4
>
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-09-06 13:23 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-06 17:39 ` Sascha Hauer
2012-09-07 10:25 ` Sascha Hauer
2 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-06 17:39 UTC (permalink / raw)
To: Jan Weitzel; +Cc: barebox
On Thu, Sep 06, 2012 at 02:41:11PM +0200, Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.
>
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
Applied, thanks.
The current code explicitely checks for a barebox image, so no need to
increase the partition size. If someone wants to boot the kernel
directly here there's more work to do anyway.
Sascha
> ---
> v2: remove fall back if header read fail
> v3: fix header check, rebase master
> v4: factorize barebox detection
> v5: mv devines to include/filetype.h
>
> arch/arm/include/asm/barebox-arm-head.h | 9 +++++
> arch/arm/mach-omap/include/mach/xload.h | 2 +-
> arch/arm/mach-omap/xload.c | 57 ++++++++++++++++++++++++++++--
> common/filetype.c | 2 +-
> include/filetype.h | 16 +++++++++
> 4 files changed, 71 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
> #ifndef _MACH_XLOAD_H
> #define _MACH_XLOAD_H
>
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
> void *omap_xload_boot_mmc(void);
>
> enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 13024ab..0afeea9 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,65 @@
> #include <fcntl.h>
> #include <mach/xload.h>
> #include <sizes.h>
> +#include <filetype.h>
>
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
> {
> + void *header = xmalloc(ARM_HEAD_SIZE);
> + struct cdev *cdev;
> int ret;
> - void *to = xmalloc(size);
> +
> + cdev = cdev_open(name, O_RDONLY);
> + if (!cdev) {
> + printf("failed to open partition\n");
> + return NULL;
> + }
> +
> + ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> + cdev_close(cdev);
> +
> + if (ret != ARM_HEAD_SIZE) {
> + printf("failed to read from partition\n");
> + return NULL;
> + }
> +
> + return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> + unsigned int ret = 0;
> + unsigned int *psize = head + ARM_HEAD_SIZE_OFFSET;
> +
> + if (is_barebox_arm_head(head))
> + ret = *psize;
> + debug("Detected barebox image size %u\n", ret);
> +
> + return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
> +{
> + int ret;
> + int size;
> + void *to, *header;
> struct cdev *cdev;
>
> - devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
> + devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
> dev_add_bb_dev("x", "bbx");
>
> + header = read_image_head("bbx");
> + if (header == NULL)
> + return NULL;
> +
> + size = get_image_size(header);
> + if (!size) {
> + printf("failed to get image size\n");
> + return NULL;
> + }
> +
> + to = xmalloc(size);
> +
> cdev = cdev_open("bbx", O_RDONLY);
> if (!cdev) {
> printf("failed to open nand\n");
> @@ -80,7 +129,7 @@ int run_shell(void)
> printf("unknown boot source. Fall back to nand\n");
> case OMAP_BOOTSRC_NAND:
> printf("booting from NAND\n");
> - func = omap_xload_boot_nand(SZ_128K, SZ_256K);
> + func = omap_xload_boot_nand(SZ_128K);
> break;
> }
>
> diff --git a/common/filetype.c b/common/filetype.c
> index e736d43..6306fdc 100644
> --- a/common/filetype.c
> +++ b/common/filetype.c
> @@ -75,7 +75,7 @@ enum filetype file_detect_type(void *_buf)
>
> if (strncmp(buf8, "#!/bin/sh", 9) == 0)
> return filetype_sh;
> - if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
> + if (is_barebox_arm_head(_buf))
> return filetype_arm_barebox;
> if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
> return filetype_arm_zimage;
> diff --git a/include/filetype.h b/include/filetype.h
> index 179ec0f..6ac1c1c 100644
> --- a/include/filetype.h
> +++ b/include/filetype.h
> @@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
> enum filetype file_detect_type(void *_buf);
> enum filetype file_name_detect_type(const char *filename);
>
> +#define ARM_HEAD_SIZE 0x30
> +#define ARM_HEAD_MAGICWORD_OFFSET 0x20
> +#define ARM_HEAD_SIZE_OFFSET 0x2C
> +
> +#ifdef CONFIG_ARM
> +static inline int is_barebox_arm_head(const char *head)
> +{
> + return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
> +}
> +#else
> +static inline int is_barebox_arm_head(const char *head)
> +{
> + return 0
> +}
> +#endif
> +
> #endif /* __FILE_TYPE_H */
> --
> 1.7.0.4
>
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-09-06 13:23 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 17:39 ` Sascha Hauer
@ 2012-09-07 10:25 ` Sascha Hauer
2 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-07 10:25 UTC (permalink / raw)
To: Jan Weitzel; +Cc: barebox
On Thu, Sep 06, 2012 at 02:41:11PM +0200, Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.
>
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> ---
> v2: remove fall back if header read fail
> v3: fix header check, rebase master
> v4: factorize barebox detection
> v5: mv devines to include/filetype.h
>
> arch/arm/include/asm/barebox-arm-head.h | 9 +++++
> arch/arm/mach-omap/include/mach/xload.h | 2 +-
> arch/arm/mach-omap/xload.c | 57 ++++++++++++++++++++++++++++--
> common/filetype.c | 2 +-
> include/filetype.h | 16 +++++++++
> 4 files changed, 71 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
> #ifndef _MACH_XLOAD_H
> #define _MACH_XLOAD_H
>
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
> void *omap_xload_boot_mmc(void);
>
> enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 13024ab..0afeea9 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,65 @@
> #include <fcntl.h>
> #include <mach/xload.h>
> #include <sizes.h>
> +#include <filetype.h>
>
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
> {
> + void *header = xmalloc(ARM_HEAD_SIZE);
> + struct cdev *cdev;
> int ret;
> - void *to = xmalloc(size);
> +
> + cdev = cdev_open(name, O_RDONLY);
> + if (!cdev) {
> + printf("failed to open partition\n");
> + return NULL;
> + }
> +
> + ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> + cdev_close(cdev);
> +
> + if (ret != ARM_HEAD_SIZE) {
> + printf("failed to read from partition\n");
> + return NULL;
> + }
> +
> + return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> + unsigned int ret = 0;
> + unsigned int *psize = head + ARM_HEAD_SIZE_OFFSET;
> +
> + if (is_barebox_arm_head(head))
> + ret = *psize;
> + debug("Detected barebox image size %u\n", ret);
> +
> + return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
> +{
> + int ret;
> + int size;
> + void *to, *header;
> struct cdev *cdev;
>
> - devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
> + devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
> dev_add_bb_dev("x", "bbx");
>
> + header = read_image_head("bbx");
> + if (header == NULL)
> + return NULL;
> +
> + size = get_image_size(header);
> + if (!size) {
> + printf("failed to get image size\n");
> + return NULL;
> + }
> +
> + to = xmalloc(size);
> +
> cdev = cdev_open("bbx", O_RDONLY);
> if (!cdev) {
> printf("failed to open nand\n");
> @@ -80,7 +129,7 @@ int run_shell(void)
> printf("unknown boot source. Fall back to nand\n");
> case OMAP_BOOTSRC_NAND:
> printf("booting from NAND\n");
> - func = omap_xload_boot_nand(SZ_128K, SZ_256K);
> + func = omap_xload_boot_nand(SZ_128K);
> break;
> }
>
> diff --git a/common/filetype.c b/common/filetype.c
> index e736d43..6306fdc 100644
> --- a/common/filetype.c
> +++ b/common/filetype.c
> @@ -75,7 +75,7 @@ enum filetype file_detect_type(void *_buf)
>
> if (strncmp(buf8, "#!/bin/sh", 9) == 0)
> return filetype_sh;
> - if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
> + if (is_barebox_arm_head(_buf))
> return filetype_arm_barebox;
> if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
> return filetype_arm_zimage;
> diff --git a/include/filetype.h b/include/filetype.h
> index 179ec0f..6ac1c1c 100644
> --- a/include/filetype.h
> +++ b/include/filetype.h
> @@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
> enum filetype file_detect_type(void *_buf);
> enum filetype file_name_detect_type(const char *filename);
>
> +#define ARM_HEAD_SIZE 0x30
> +#define ARM_HEAD_MAGICWORD_OFFSET 0x20
> +#define ARM_HEAD_SIZE_OFFSET 0x2C
> +
> +#ifdef CONFIG_ARM
> +static inline int is_barebox_arm_head(const char *head)
> +{
> + return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
> +}
> +#else
> +static inline int is_barebox_arm_head(const char *head)
> +{
> + return 0
> +}
Added the missing semicolon here to fix compilation on !ARM.
Sascha
> +#endif
> +
> #endif /* __FILE_TYPE_H */
> --
> 1.7.0.4
>
>
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-09-07 10:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
2012-09-06 10:32 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 12:41 ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-09-06 13:23 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 17:39 ` Sascha Hauer
2012-09-07 10:25 ` Sascha Hauer
2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.