All pastes #427463 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-04-06 20:06 UTC
rendered paste body
#!/bin/sh

# MTD Map
#  0 - bootloader (nor)
#  1 - kernel (nor)
#  2 - nor rootfs (nor)
#  3 - nand rootfs

echo "Running Updater ...."

# set up a few things we need like proc, dev entries
mount -t proc proc /proc

# set up device nodes
/etc/init.d/devices

# if user switch is pressed, don't lauch main system
if grep clear /proc/gpio/USER_SWITCH 1>/dev/null
then
        echo "User switch pressed, booting normal init in NOR fs ..."
        exec /sbin/init 5
fi

# sleep long enough for USB disk to be discovered by kernel
echo "Waiting 6 seconds for USB flash disk detection ..."
sleep 6

echo "Checking for update images on USB flash ..."

[ -e /usb ] || mkdir /usb

NAND_CHAR_DEV=/dev/mtd3
JFFS2_IMAGE=/usb/nand.jffs2
NOR_ROOTFS_IMAGE=/usb/nor_rootfs.img
NOR_KERNEL_IMAGE=/usb/nor_kernel.img

if mount /dev/sda1 /usb 2>/dev/null; then
        usb_mounted=1
        echo 'found disk at /dev/sda1'
fi

if [ ! $usb_mounted ]; then
        if mount /dev/sda /usb 2>/dev/null; then
                usb_mounted=1
                echo 'found disk at /dev/sda'
        fi
fi

if [ -e $NOR_ROOTFS_IMAGE ]; then
  echo 'WARNING, This update mechanism is obsolete, please remove $NOR_ROOTFS_IMAGE from usb disk'
        reboot_required=1
  update_error=1
fi

if [ -e $NOR_KERNEL_IMAGE ]; then
  echo 'WARNING, This update mechanism is obsolete, please remove $NOR_KERNEL_IMAGE from usb disk'
        reboot_required=1
  update_error=1
fi

# look for jffs2 image
if [ -e $JFFS2_IMAGE ]; then
  echo 'WARNING, This update mechanism is obsolete, please remove $JFFS2_IMAGE from usb disk'
        reboot_required=1
  update_error=1
fi

if [ $update_error ]; then
  echo 'Remove files from USB drive and cycle power'
        sleep 9999d
fi

# look for img files (new method)
if [ -e /usb/svs_update.img ]; then
  echo 'Found update image, verifying ...'

  cd /tmp
  if ! tar -x -f /usb/svs_update.img; then
    echo 'Error extracting update image'
    exec /sbin/init 5
  fi

  # check checksums
  if ! md5sum -c svs_update.md5; then
    echo 'Error checksum error in update file'
    echo 'Please cycle power to restart process'
    exec /sbin/init 5
  fi

  # see if kernel or nor flash need updated
        updater
        updater_ret=$?

        if [ $updater_ret -eq 0 ]; then
                echo 'Kernel and NOR rootfs up to date'
        elif [ $updater_ret -eq 1 ]; then
                echo 'critical components updated, rebooting ... '
                umount /usb
                shutdown -r -n -f now
                sleep 9999d
  else
                echo 'NOR update failed'
                exec /sbin/init 5
        fi

        echo 'updating NAND flash'
        if ! flash_eraseall -j $NAND_CHAR_DEV; then
                echo "ERROR: flash_eraseall failure"
                exec /sbin/init 5
        fi
        if ! nandwrite $NAND_CHAR_DEV nand.jffs2; then
                echo "ERROR: nandwrite failure"
                exec /sbin/init 5
        fi
        echo "NAND filesystem update success!"

        reboot_required=1
fi

if [ $usb_mounted ];then
        umount /usb
fi

if [ $reboot_required ];then
        echo "Updater v2"
        echo "Update complete, remove USB device and cycle power"
        sleep 9999d
fi

# if user switch is pressed, don't lauch main system
if grep clear /proc/gpio/USER_SWITCH 1>/dev/null; then
        echo "User switch pressed, booting normal init in NOR fs ..."
        exec /sbin/init 5
fi

echo "mounting main filesystem ..."
mkdir /jffs2
mount -t jffs2 mtd3 /jffs2

echo "booting main filesystem ..."
exec switch_root -c /dev/console /jffs2 /sbin/init 5