summaryrefslogtreecommitdiff
path: root/recipes-core/initscripts/initscripts-1.0
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-core/initscripts/initscripts-1.0')
-rw-r--r--recipes-core/initscripts/initscripts-1.0/umountfs158
1 files changed, 158 insertions, 0 deletions
diff --git a/recipes-core/initscripts/initscripts-1.0/umountfs b/recipes-core/initscripts/initscripts-1.0/umountfs
new file mode 100644
index 0000000..1c9a9ce
--- /dev/null
+++ b/recipes-core/initscripts/initscripts-1.0/umountfs
@@ -0,0 +1,158 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides: umountfs
+# Required-Start:
+# Required-Stop:
+# Default-Start:
+# Default-Stop: 0 6
+# Short-Description: Turn off swap and unmount all local file systems.
+# Description:
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+umount_all() {
+ echo "Deactivating swap..."
+ swapoff -a
+
+ # We leave /proc mounted.
+ echo "Unmounting local filesystems..."
+ grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram
+ umount -f -a -r > /dev/null 2>&1
+
+ mount -o remount,ro /
+}
+
+blink_leds() {
+ leds=/sys/class/leds/*
+ nleds=$(echo $leds | wc -w)
+
+ # turn LEDs off
+ for led in $leds; do
+ echo "timer" > $led/trigger
+ echo 0 > $led/delay_off
+ done
+
+ int=200
+ total=$(( int * (nleds+1) ))
+ on=$(( total - int ))
+ off=$(( total - on ))
+
+ # make a pattern
+ for led in $leds; do
+ echo "$on" > $led/delay_on
+ echo "$off" > $led/delay_off
+ on=$(( on - int ))
+ off=$(( total - on ))
+ done
+}
+
+flash_upgrade() {
+ if [ $# -ne 1 ]; then
+ echo "need to specify flash-root"
+ return
+ fi
+ # flash_root must be a mountpoint that is not the rootfs and be mounted rw
+ local flash_root=${1}
+
+ local flash_dir=${flash_root}/flash-upgrade
+ local uImage_file=${flash_dir}/uImage.bin
+ local rootfs_file=${flash_dir}/rootfs.jffs2
+
+ local reboot_cmd=/usr/sbin/upgrade-reboot
+ local nandwrite_cmd=/usr/bin/nandwrite.static
+ local mode=
+ local uImage_mtd=
+ local rootfs_mtd=
+
+ if [ ! -d "${flash_dir}" ]; then
+ echo "${flash_dir} not present, skipping"
+ return
+ fi
+
+ if ! mountpoint -q "${flash_root}"; then
+ echo "${flash_root} is not a mountpoint"
+ return
+ fi
+
+ mode=$(grep "${flash_root}" /proc/mounts | cut -d ' ' -f 4 | cut -d ',' -f 1)
+ if [ "${mode}" != "rw" ]; then
+ echo "${flash_root} is not mounted rw"
+ return
+ fi
+
+ if [ ! -x "${reboot_cmd}" ]; then
+ echo "${reboot_cmd} is not installed"
+ return
+ fi
+
+ if [ ! -x "${nandwrite_cmd}" ]; then
+ echo "${nandwrite_cmd} is not installed"
+ return
+ fi
+
+ uImage_mtd="/dev/$(cat /proc/mtd | grep uImage | cut -d : -f 1)"
+ if [ ! -c "${uImage_mtd}" ]; then
+ echo "No valid MTD partition is labeled uImage"
+ return
+ fi
+
+ rootfs_mtd="/dev/$(cat /proc/mtd | grep Rootfs | cut -d : -f 1)"
+ if [ ! -c "${rootfs_mtd}" ]; then
+ echo "No valid MTD partition is labeled Rootfs"
+ return
+ fi
+
+ echo ""
+ echo "Starting flash upgrade from ${flash_dir}..."
+
+ blink_leds
+
+ if [ -f ${uImage_file} ]; then
+ echo "Flashing ${uImage_mtd} (uImage) with ${uImage_file}..."
+
+ flash_erase ${uImage_mtd} 0 0
+ nandwrite -p ${uImage_mtd} ${uImage_file}
+ else
+ echo "uImage file ${uImage_file} not found"
+ fi
+
+ if [ -f ${rootfs_file} ]; then
+ echo "Flashing ${rootfs_mtd} (rootfs) with ${rootfs_file}..."
+
+ cp ${reboot_cmd} ${flash_dir}/upgrade-reboot
+ cp ${nandwrite_cmd} ${flash_dir}/nandwrite.static
+
+ sync
+ sleep 2
+ mount -o remount,ro ${flash_root}
+
+ # flash_root is not going to be umounted
+ sed -i -e "\\|${flash_root}| d" /etc/mtab
+
+ umount_all
+
+ flash_erase -j ${rootfs_mtd} 0 0
+ ${flash_dir}/nandwrite.static -p ${rootfs_mtd} ${rootfs_file}
+
+ echo "Rebooting..."
+
+ ${flash_dir}/upgrade-reboot
+
+ # Should not get here normally
+ echo "upgrade-reboot failed"
+ exit 1
+ else
+ echo "rootfs file ${rootfs_file} not found"
+ fi
+}
+
+# do flash on reboot if do_flash_upgrade exists
+if [ -f /var/volatile/do_flash_upgrade ]; then
+ flash_upgrade /var/volatile
+ flash_upgrade /media/card
+fi
+
+umount_all
+
+: exit 0