This adds building the u-boot tools for target.
(fw_printenv, fw_setenv).
They are put into a separate package
With these files it becomes possible to modify
the u-boot environment when linux is booted

The #ifdef's in fw_env.h were needed to avoid compilation issues
The constants have been changed to more meaningful defaults
(as 128k flash pages are much more common than 4k pages)
but can be overridden using a configuration file.

This resolves bug 1800

Signed-off-by: Frans Meulenbroeks <fransmeulenbro...@gmail.com>

---
Note: development and testing was done under openembedded classic.
I've tested it there quite heavily (for mpc8313 if that matters).
I was requested to provide a patch for oe-core too (to resolve bug 1800)
so here it is, although at the moment I am unable to test the patch for oe-core.
I suggest that this is carefully reviewed and tested before being merged.

Frans.
---
 meta/recipes-bsp/u-boot/files/tools_fwenv.patch |   48 +++++++++++++++++++++++
 meta/recipes-bsp/u-boot/u-boot.inc              |   21 ++++++++-
 meta/recipes-bsp/u-boot/u-boot_2011.03.bb       |    3 +-
 meta/recipes-bsp/u-boot/u-boot_2011.06.bb       |    3 +-
 4 files changed, 70 insertions(+), 5 deletions(-)
 create mode 100644 meta/recipes-bsp/u-boot/files/tools_fwenv.patch

diff --git a/meta/recipes-bsp/u-boot/files/tools_fwenv.patch 
b/meta/recipes-bsp/u-boot/files/tools_fwenv.patch
new file mode 100644
index 0000000..8e87800
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/files/tools_fwenv.patch
@@ -0,0 +1,48 @@
+Index: u-boot-2011.03/tools/env/fw_env.h
+===================================================================
+--- u-boot-2011.03.orig/tools/env/fw_env.h     2011-03-31 23:45:36.000000000 
+0200
++++ u-boot-2011.03/tools/env/fw_env.h  2011-12-02 13:55:24.667278362 +0100
+@@ -27,25 +27,35 @@
+  * See included "fw_env.config" sample file (TRAB board)
+  * for notes on configuration.
+  */
+-#define CONFIG_FILE     "/etc/fw_env.config"
++//#define CONFIG_FILE     "/etc/fw_env.config"
++
++#include "config.h"
+ 
+ #define HAVE_REDUND /* For systems with 2 env sectors */
+-#define DEVICE1_NAME      "/dev/mtd1"
+-#define DEVICE2_NAME      "/dev/mtd2"
++#define DEVICE1_NAME      "/dev/mtd0"
++#define DEVICE2_NAME      "/dev/mtd0"
+ #define DEVICE1_OFFSET    0x0000
+-#define ENV1_SIZE         0x4000
+-#define DEVICE1_ESIZE     0x4000
+-#define DEVICE2_OFFSET    0x0000
+-#define ENV2_SIZE         0x4000
+-#define DEVICE2_ESIZE     0x4000
++#define ENV1_SIZE         0x2000
++#define DEVICE1_ESIZE     0x20000
++#define DEVICE1_ENVSECTORS     1
++#define DEVICE2_OFFSET    0x20000
++#define ENV2_SIZE         0x2000
++#define DEVICE2_ESIZE     0x20000
++#define DEVICE2_ENVSECTORS     1
+ 
++#ifndef CONFIG_BAUDRATE
+ #define CONFIG_BAUDRATE               115200
++#endif
++#ifndef CONFIG_BOOTDELAY
+ #define CONFIG_BOOTDELAY      5       /* autoboot after 5 seconds     */
++#endif
++#ifndef CONFIG_BOOTCOMMAND
+ #define CONFIG_BOOTCOMMAND                                                    
\
+       "bootp; "                                                               
\
+       "setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "        
\
+       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   
\
+       "bootm"
++#endif
+ 
+ extern int   fw_printenv(int argc, char *argv[]);
+ extern char *fw_getenv  (char *name);
diff --git a/meta/recipes-bsp/u-boot/u-boot.inc 
b/meta/recipes-bsp/u-boot/u-boot.inc
index a3f50bc..bbfc6d6 100644
--- a/meta/recipes-bsp/u-boot/u-boot.inc
+++ b/meta/recipes-bsp/u-boot/u-boot.inc
@@ -32,16 +32,31 @@ do_compile () {
        unset CPPFLAGS
        oe_runmake ${UBOOT_MACHINE}
        oe_runmake ${UBOOT_MAKE_TARGET}
+       oe_runmake tools env HOSTCC="${CC}"
 }
 
 do_install () {
-    install -d ${D}/boot
-    install ${S}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
-    ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
+       install -d ${D}/boot
+       install ${S}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
+       ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
+
+       if [ -e ${WORKDIR}/fw_env.config ] ; then
+               install -d ${D}${base_sbindir}
+               install -d ${D}${sysconfdir}
+               install -m 644 ${WORKDIR}/fw_env.config 
${D}${sysconfdir}/fw_env.config
+               install -m 755 ${S}/tools/env/fw_printenv 
${D}${base_sbindir}/fw_printenv
+               install -m 755 ${S}/tools/env/fw_printenv 
${D}${base_sbindir}/fw_setenv
+       fi
+
 }
 
 FILES_${PN} = "/boot"
 
+PACKAGES += "${PN}-fw-utils"
+FILES_${PN}-fw-utils = "${sysconfdir} ${base_sbindir}"
+# u-boot doesn't use LDFLAGS for fw files, needs to get fixed, but until then:
+INSANE_SKIP_${PN}-fw-utils = True
+
 do_deploy () {
        install ${S}/u-boot.bin ${DEPLOYDIR}/${UBOOT_IMAGE}
 
diff --git a/meta/recipes-bsp/u-boot/u-boot_2011.03.bb 
b/meta/recipes-bsp/u-boot/u-boot_2011.03.bb
index 1ebdbea..fe10f58 100644
--- a/meta/recipes-bsp/u-boot/u-boot_2011.03.bb
+++ b/meta/recipes-bsp/u-boot/u-boot_2011.03.bb
@@ -19,7 +19,8 @@ SRCREV = "19b54a701811220221fc4d5089a2bb18892018ca"
 PV = "v2011.03+git${SRCPV}"
 PR = "r5"
 
-SRC_URI = "git://git.denx.de/u-boot.git;branch=master;protocol=git"
+SRC_URI = "git://git.denx.de/u-boot.git;branch=master;protocol=git \
+           file://tools_fwenv.patch"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta/recipes-bsp/u-boot/u-boot_2011.06.bb 
b/meta/recipes-bsp/u-boot/u-boot_2011.06.bb
index 8ebdbff..bfe5db7 100644
--- a/meta/recipes-bsp/u-boot/u-boot_2011.06.bb
+++ b/meta/recipes-bsp/u-boot/u-boot_2011.06.bb
@@ -19,7 +19,8 @@ SRCREV = "b1af6f532e0d348b153d5c148369229d24af361a"
 PV = "v2011.06+git${SRCPV}"
 PR = "r0"
 
-SRC_URI = "git://git.denx.de/u-boot.git;branch=master;protocol=git"
+SRC_URI = "git://git.denx.de/u-boot.git;branch=master;protocol=git \
+           file://tools_fwenv.patch"
 
 S = "${WORKDIR}/git"
 
-- 
1.7.8.1


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to