From 0a79330995b467975dbb44a1247f2d88479cdc33 Mon Sep 17 00:00:00 2001
From: Alessandro Rubini <rubini@gnudd.com>
Date: Tue, 13 May 2014 13:58:33 +0200
Subject: [PATCH] flashing: new procedure

This changes the flashing procedure, because the previous one did not
work any more now that the default filesystem size is bigger.

With this commit no jffs2 images is generated any more, and the
filesystem image is not included as a payload in the initramfs booted
using the USB tools.

Rather, the initramfs downloads wrs-image.tar.gz using TFTP, from the
IP address that replied to DHCP, and untars it to the NAND partitions.

Signed-off-by: Alessandro Rubini <rubini@gnudd.com>
---
 build/flash-wrs                               | 54 ++++++++-----------
 patches/barebox/v2014.04/env/bin/init         | 10 ++--
 usb-loader/S99flash-from-kernel.sh            | 10 ----
 .../rootfs_override/etc/init.d/S10install     | 37 +++++++++++++
 4 files changed, 66 insertions(+), 45 deletions(-)
 delete mode 100755 usb-loader/S99flash-from-kernel.sh
 create mode 100755 userspace/rootfs_override/etc/init.d/S10install

diff --git a/build/flash-wrs b/build/flash-wrs
index bf7a50c99..48ce5d4d2 100755
--- a/build/flash-wrs
+++ b/build/flash-wrs
@@ -126,9 +126,6 @@ if $fake;  then
     FLASHER="fake_flasher $FLASHER"
 fi
 
-# add /usr/sbin for mkfs.jffs2
-export PATH="$PATH:/usr/sbin"
-
 # Default MAC address for the switch board ethernet
 MAC1_DEF="02:34:56:78:9A:BC"
 MAC1=$MAC1_DEF
@@ -153,8 +150,6 @@ kernel=""
 rootfsgz=""
 # full path to the cpio image
 rootfscpio=""
-# full path to the jffs2 image
-rootfsjffs2=""
 # full path to the file system directory
 TMPFS=""
 
@@ -309,7 +304,6 @@ fi
 if $nf; then
 
 	TMPFS=$WRSTMPDIR/wrsfs-tgz; mkdir $TMPFS
-	rootfsjffs2=$WRSTMPDIR/wrs-image.jffs2
 
 	# The TMPCPIO is used for the NAND flashing procedure. It
 	# contains the magic string "paperino" (0x61706570 0x69726f6e)
@@ -326,21 +320,22 @@ tar --directory $TMPFS -xzf $rootfsgz
 # (There is not enough place in DDR to extract 4 HDLs, be carefull if you add custom files)
 find $TMPFS/wr/lib/firmware/ -type f \( ! -name ''${gateware}'' \) -a \( ! -name '*rt_cpu.bin' \) -exec rm -f {} \;
 
-mkfs.jffs2 --little-endian --eraseblock=0x20000 -n --pad -d $TMPFS -o $rootfsjffs2
-
 # Remove heavy and useless stuff to make a light file system to
 # load in RAM
-rm -rf $TMPFS/etc/init.d/S*
 rm -rf $TMPFS/wr
-rm -rf $TMPFS/usr/bin
-rm -rf $TMPFS/usr/lib
+
+for n in top ltrace gdbserver strace rsync screen php php-cgi gdb; do
+   rm -f $TMPFS/usr/bin/\$n
+done
+
+for n in python2.7 lighttpd rsyslog; do
+   rm -rf $TMPFS/usr/lib/\$n
+done
 rm -rf $TMPFS/usr/share
+rm -rf $TMPFS/var/www
 
 mkdir $TMPFS/flashing/
-cp -a /dev/kmsg $TMPFS/dev/kmsg
-cp ${rootfsjffs2} $TMPFS/flashing/wrs-image.jffs2.img
 cp ${kernel} $TMPFS/flashing/zImage
-cp ${WRS_BASE_DIR}/usb-loader/S99flash-from-kernel.sh $TMPFS/etc/init.d/
 cd ..
 echo -n "paperino" > $TMPCPIO
 (cd "$TMPFS" && find . | cpio -o -H newc | gzip) >> $TMPCPIO
@@ -358,34 +353,29 @@ EOF
 	    rm $TMPSCRIPT
 	    rm -rf $TMPFS
 	    rm -rf $TMPCPIO
-	    rm -rf $rootfsjffs2
 	else
 	    echo "Keeping temporaries"
 	    echo "   script is $TMPSCRIPT"
 	    echo "   filesystem image (no attributes) is $TMPFS"
-	    echo "   jffs2 image is in $rootfsjffs2"
 	    echo "   cpio file is in $TMPCPIO at offset 8 bytes"
 	fi
+
+	# Now, flashing proceeds by booting a kernel, get its messages
+
+	# Wait for the device to disappear
+	while [ -e /dev/ttyACM0 ]; do sleep 0.1; done
+	# Wait for the device to appear again
+	while [ ! -e /dev/ttyACM0 ]; do sleep 0.1; done
+	# Report install messages until the device disappears again
+	cat /dev/ttyACM0
+
 fi
 
 ## Loading in DDR
 if $ddr; then
-
-	TMPFS=$(mktemp -d $TMPDIR/wrsfs-tgz.XXXXXX)
-	rootfsjffs2=$TMPDIR/wrs-image.jffs2.img
-	# make cpio and jffs2 image
-	TMPSCRIPT=$(mktemp $TMPDIR/wrsrootfs-script.XXXXXX)
-	cat > $TMPSCRIPT << EOF
-tar --directory $TMPFS -xzf $rootfsgz
-mkfs.jffs2 --little-endian --eraseblock=0x20000 -n --pad -d $TMPFS -o $rootfsjffs2
-EOF
-	fakeroot bash $TMPSCRIPT
-	if $remove_temps; then
-	    rm $TMPSCRIPT
-	    rm $TMPFS
-	fi
-
-	$FLASHER -m ddr $FLAGS $DEV ${Tbarebox} 0x0 ${kernel} 0x1000000 ${rootfsjffs2} 0x2000000
+	echo ""
+	echo "DDR loading (the test procedure) is currently not supported"
+	echo ""
 fi
 
 if $remove_temps; then
diff --git a/patches/barebox/v2014.04/env/bin/init b/patches/barebox/v2014.04/env/bin/init
index b2a730638..1b4cde91b 100644
--- a/patches/barebox/v2014.04/env/bin/init
+++ b/patches/barebox/v2014.04/env/bin/init
@@ -5,11 +5,15 @@
 memcmp -s /dev/mem -d /env/magicstr 0x71FFFFF8 0x0 8
 if [ $? -eq 0 ]; then
 	echo "Booting kernel for NAND flashing procedure"
+	dhcp 5
 	bootargs="console=ttyS0,115200 panic=10 mem=64M"
-	bootargs="$bootargs initrd=0x72000000,25M"
+	bootargs="$bootargs initrd=0x72000000,10M"
 	bootargs="$bootargs root=/dev/ram0"
-	addpart /dev/ram0 0x1000000@0x1000000(kernel)
-	addpart /dev/ram0 0x1000000@0x2000000(initrd)
+	bootargs="$bootargs SERVERIP=$eth0.serverip WRS_IMAGE=wrs-image.tar.gz"
+	bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask:wrs:eth0"
+
+	addpart /dev/ram0 0x400000@0x1000000(kernel)
+	addpart /dev/ram0 0xa00000@0x2000000(initrd)
 	bootm /dev/ram0.kernel
 fi
 
diff --git a/usb-loader/S99flash-from-kernel.sh b/usb-loader/S99flash-from-kernel.sh
deleted file mode 100755
index 9eb96ca5b..000000000
--- a/usb-loader/S99flash-from-kernel.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-# Write kernel and filesystem to NAND memory
-echo "FLASHING: flashing kernel to /dev/mtd0 ..."
-nandwrite -m -p -a /dev/mtd0 /flashing/zImage
-echo "FLASHING: flashing file system to /dev/mtd1 ..."
-nandwrite -m -p -a /dev/mtd1 /flashing/wrs-image.jffs2.img
-echo "FLASHING: complete!"
-# Reboot immediatly because we have completed the flashing procedure
-reboot
diff --git a/userspace/rootfs_override/etc/init.d/S10install b/userspace/rootfs_override/etc/init.d/S10install
new file mode 100755
index 000000000..24d117c61
--- /dev/null
+++ b/userspace/rootfs_override/etc/init.d/S10install
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# This is the installation script for wr-switch. It is activated by
+# a special kernel argument, that reaches user-space environment variables
+
+
+if [ "x$WRS_IMAGE" = "x" ]; then exit 0; fi
+
+echo 1 > /proc/sys/kernel/printk
+
+# keep /dev/ttyGS0 open, to prevent EOF being seen from the PC
+sleep 99999 > /dev/ttyGS0 &
+
+echo "Installation procedure starts" | tee /dev/ttyGS0
+sleep 2
+
+echo -n "Flashing kernel to /dev/mtd0 ..." | tee /dev/ttyGS0
+nandwrite -m -p -a /dev/mtd0 /flashing/zImage
+echo " done" | tee /dev/ttyGS0
+
+# Eth0 is already up, thanks to ip= passed by bootloader
+cd /flashing
+echo -n "Getting tftp://$SERVERIP/$WRS_IMAGE ..." | tee /dev/ttyGS0
+tftp -g -r $WRS_IMAGE -l $WRS_IMAGE $SERVERIP
+echo " done" | tee /dev/ttyGS0
+
+echo -n "Mounting target filesystem..." | tee /dev/ttyGS0
+mount -t jffs2 /dev/mtdblock1 /mnt
+echo " done" | tee /dev/ttyGS0
+
+echo -n "Uncompressing image..." | tee /dev/ttyGS0
+cd /mnt; zcat /flashing/wrs-image.tar.gz | tar xf -
+echo " done" | tee /dev/ttyGS0
+
+#/bin/sh
+
+reboot
-- 
GitLab