100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
FILE="$1"
 | 
						|
MTDDEV="/dev/mtd3"
 | 
						|
SAFEFILE="/root/new.fw"
 | 
						|
CHECKSTR="Linux-2.6.32.42_stm24_0208-idl4k"
 | 
						|
GITHUB1="https://github.com/perexg/satip-axe/tree/master/dist"
 | 
						|
GITHUB2="https://github.com/perexg/satip-axe/blob/master/dist/$FILE?raw=true"
 | 
						|
 | 
						|
if test "$FILE" = "-h" -o "$FILE" = "--help"; then
 | 
						|
  echo "Usage: $0 FIRMWARE"
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if test -z "$FILE"; then
 | 
						|
  echo "Trying to fetch the list of available firmware files:"
 | 
						|
  if ! wget -q -O /root/list.txt "$GITHUB1"; then
 | 
						|
    echo "FAILED"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  grep -o -E ">satip-axe-.*.fw<" /root/list.txt | grep -o -E "satip-axe.*.fw"
 | 
						|
  rm /root/list.txt
 | 
						|
  exit 0
 | 
						|
fi
 | 
						|
 | 
						|
if ! test -r "$FILE"; then
 | 
						|
  echo "Downloading $FILE:"
 | 
						|
  if ! wget -O "$SAFEFILE" "$GITHUB2/$FILE"; then
 | 
						|
    echo "Unable to fetch firmware file $GITHUB2"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  FILE="$SAFEFILE"
 | 
						|
fi
 | 
						|
 | 
						|
if ! grep "$CHECKSTR" "$FILE" > /dev/null; then
 | 
						|
  echo "$FILE does not appear to be the satip-axe firmware!"
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if test "$FILE" != "$SAFEFILE"; then
 | 
						|
  if ! cp "$FILE" "$SAFEFILE"; then
 | 
						|
    echo "Copy error..."
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
fi
 | 
						|
 | 
						|
echo "Preparing to flash - killing minisatip, unmounting USB sticks"
 | 
						|
umount /media/*
 | 
						|
touch /tmp/nosatip
 | 
						|
killall -9 minisatip
 | 
						|
sync ; sync
 | 
						|
 | 
						|
sleep 3
 | 
						|
 | 
						|
first=true
 | 
						|
second=true
 | 
						|
while test 1 -eq 1; do
 | 
						|
  FILESIZE=$(stat -c "%s" "$SAFEFILE")
 | 
						|
  if test -z "$FILESIZE" -o $FILESIZE -le 0; then
 | 
						|
    echo "Unable to determine file size for $SAFEFILE"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  echo "Verifying... Dumping current flash contents."
 | 
						|
  nanddump -f "$SAFEFILE.old" -l "$FILESIZE" "$MTDDEV"
 | 
						|
  FILESIZE2=$(stat -c "%s" "$SAFEFILE.old")
 | 
						|
  if test "$FILESIZE" -gt "$FILESIZE2"; then
 | 
						|
    echo "Unable to verify (file sizes does not match - $FILESIZE > $FILESIZE2"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  if ! dd if=/dev/null seek="$FILESIZE" bs=1 of="$SAFEFILE.old" 2> /dev/null; then
 | 
						|
    echo "DD truncate failed"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  FILESIZE2=$(stat -c "%s" "$SAFEFILE.old")
 | 
						|
  if test "$FILESIZE" != "$FILESIZE2"; then
 | 
						|
    echo "Unable to verify (file sizes does not match - $FILESIZE != $FILESIZE2"
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
  result=$(diff "$SAFEFILE.old" "$SAFEFILE")
 | 
						|
  if test -z "$result"; then
 | 
						|
    echo "Verify OK. Flash write successful."
 | 
						|
    echo "Type 'reboot' now..."
 | 
						|
    rm -f "$SAFEFILE" "$SAFEFILE.old"
 | 
						|
    exit 0
 | 
						|
  fi
 | 
						|
  rm -f "$FILESIZE.old"
 | 
						|
  if test "$first" != "true"; then
 | 
						|
    echo "** Flash contents do not match. **"
 | 
						|
    if test "$second" != "true"; then
 | 
						|
      echo "** Flashing failed. Consider to use an USB stick to recover. **"
 | 
						|
    fi
 | 
						|
    echo -n "Repeat the flash write? Use 'Ctrl-C' to abort or Enter to repeat: "
 | 
						|
    read i
 | 
						|
    second=
 | 
						|
  fi
 | 
						|
  echo "Flashing..."
 | 
						|
  nandwrite2 -p "$MTDDEV" "$SAFEFILE"
 | 
						|
  first=
 | 
						|
done
 |