* [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 [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 [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 [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox