A shell script to parse environment.in from devirginator and create
a U-Boot compatible environment block from it, with CRC.

A blank line is required in environment.in after each stanza.

Also a shell script to program the output environment block over
DFU.

Signed-off-by: Andy Green <[EMAIL PROTECTED]>

--- /dev/null	2007-12-16 05:30:16.544083553 +0000
+++ genubootparamblock	2007-12-20 12:50:14.000000000 +0000
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+ENV_LENGTH=$(( 256 * 1024 ))
+
+if [ -z "$1" -o -z "$2" ] ; then
+	echo "Usage: $0 inputfile outputfile"
+	exit 1
+fi
+
+        # little bit tricky because u-boot protects it with CRC32
+
+	rm -f /tmp/b1
+	FLAG=
+	cat $1 | while read line ; do
+		if [ ${#line} -lt 1 ] ; then
+			if [ ! -z "$FLAG" ]; then
+				echo -e -n "\000" >>/tmp/b1
+			fi
+			FLAG=
+			SPACE=
+		else
+			if [ ! -z "$SPACE" ] ; then
+				echo -n " " >>/tmp/b1
+				SPACE=
+			fi
+			if [ ${line:0:1} != '#' ] ; then
+				echo -n $line >>/tmp/b1
+				if [ ${line: -1} != '=' ] ; then
+					SPACE=1
+				fi
+				FLAG=1
+			fi
+		fi
+	done
+
+        LEN=`ls -l /tmp/b1 | tr -s ' ' | cut -d' ' -f5`
+
+        while [ $LEN -lt $(( $ENV_LENGTH - 32 )) ] ; do
+        echo -e -n "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" >>/tmp/b1
+        LEN=$(( $LEN + 16 ))
+        done
+
+        while [ $LEN -lt $(( $ENV_LENGTH - 4 )) ] ; do
+        echo -e -n "\000" >>/tmp/b1
+        LEN=$(( $LEN + 1 ))
+        done
+
+        CRC=`crc32 /tmp/b1 | tr '[a-z]' '[A-Z]'`
+
+        BYTE=\\0`echo "ibase=16 ; obase=8 ; ${CRC:6:2}" | bc`
+        echo -e -n $BYTE >/tmp/b2
+        BYTE=\\0`echo "ibase=16 ; obase=8 ; ${CRC:4:2}" | bc`
+        echo -e -n $BYTE >>/tmp/b2
+        BYTE=\\0`echo "ibase=16 ; obase=8 ; ${CRC:2:2}" | bc`
+        echo -e -n $BYTE >>/tmp/b2
+        BYTE=\\0`echo "ibase=16 ; obase=8 ; ${CRC:0:2}" | bc`
+        echo -e -n $BYTE >>/tmp/b2
+
+        cat /tmp/b1 >>/tmp/b2
+
+        cp /tmp/b2 $2
+
+
--- /dev/null	2007-12-16 05:30:16.544083553 +0000
+++ dfu-env	2007-12-20 14:33:57.000000000 +0000
@@ -0,0 +1,7 @@
+#!/bin/bash
+../dfu-util/src/dfu-util -a 2 -d 0x1457:0x5119 -D $1
+if [ $? -eq 1 ] ; then
+   ../dfu-util/src/dfu-util -a 2 -d 0x1457:0x5120 -D $1
+   ../dfu-util/src/dfu-util -a 2 -d 0x1457:0x5119 -D $1
+fi
+

Reply via email to