#!/bin/sh #get data ubi number data_mtd_number=$(cat /proc/mtd | grep -E "data" | awk -F : '{print $1}' | grep -o '[0-9]\+') SWUPDATE_PATH=/mnt/swupdate/ OTA_FILE_FLAG=$SWUPDATE_PATH/enable-network-ota if [ ${data_mtd_number} = ""]; then echo "can not get data mtd number, maybe emmc device......" mount -t ext4 /dev/data /mnt else echo "get data mtd number, now mount data partition......" ubiattach /dev/ubi_ctrl -m ${data_mtd_number} mount -t ubifs /dev/ubi0_0 /mnt fi if [ -f "/mnt/software.swu" ]; then echo "find software.swu in data, now start update......" if [ -f "/proc/inand" ]; then swupdate -l 6 -k /etc/swupdate-public.pem -i /mnt/software.swu else swupdate -l 6 -b "0 1 2 3 4" -k /etc/swupdate-public.pem -i /mnt/software.swu fi if [ $? != 0 ]; then echo "swupdate software.swu from data failed!" umount /mnt else echo "swupdate software.swu from data success!" rm /mnt/software.swu umount /mnt urlmisc clean sync sleep 2 reboot echo "swupdate reboot now!" fi elif [ -f "$OTA_FILE_FLAG" ]; then source $SWUPDATE_PATH/apply_info.sh /mnt $SWUPDATE_PATH/start_wifi.sh wait_time=90 ping_time=0 while [ $ping_time -lt $wait_time ] do echo "Tried $ping_time seconds" ping_output=$(ping -c 1 $SWUPDATE_OTA_SERVER 2>&1) ping_result=$? echo "ping return result: $ping_result" case $ping_result in 0) NETWORK_READY=1 wget --spider -q `cat $OTA_FILE_FLAG` if [ $? == 0 ]; then OTA_PACKAGE_READY=1 fi break; ;; *) if echo $ping_output | grep "Network is unreachable" ; then echo "Network is unreachable, cost 1 second" sleep 1 let ping_time++ else let ping_time=ping_time+10 echo "Ping failed, this will cost 10 second" fi ;; esac done #Here we detect network is ready #Here we detect if the OTA package exist or not if [ -n "$NETWORK_READY" ] && [ -n "$OTA_PACKAGE_READY" ]; then if [ -f "/proc/inand" ]; then swupdate -l 6 -k /etc/swupdate-public.pem -D "-t 60" else swupdate -l 6 -b "0 1 2 3 4" -k /etc/swupdate-public.pem -D "-t 60" fi swupdate_result=$? echo "swupdate return result: $swupdate_result" case $swupdate_result in 0) echo "swupdate software.swu from url success!" rm -f $SWUPDATE_PATH/swupdate_retry ;; 10) echo "swupdate software.swu from url failed, need retry!" keep_recovery=1 touch $SWUPDATE_PATH/swupdate_retry ;; *) echo "swupdate software.swu from url failed, return to normal system!" ;; esac else if [ -z "$NETWORK_READY" ]; then echo "Network is not ready, reboot to normal system" else if [ -z "$OTA_PACKAGE_READY" ]; then echo "OTA_PACKAGE is not ready, reboot to normal system" else echo "Should not come here, please debug ASAP." fi fi echo "Clean up recovery flag in misc partition, then reboot to normal system" fi if [ -f $SWUPDATE_PATH/swupdate_retry ]; then echo "Because upgrade already in progress, We will try util upgrade OK." echo "We will not clean up anything,because they are still needed by next trying." else if [ -z "$keep_recovery" ]; then echo "Clean up recovery settings, will NOT enter recovery on next boot." urlmisc clean rm -fr $SWUPDATE_PATH fi fi sync umount /mnt read -t 5 -p "Rebooting...^-^..." if [ $? != 0 ]; then reboot -f fi else #wait for usb device echo "can not find software.swu in data, now find usb device......" sleep 5 # try to find Udisk if mount | grep "/dev/sd" > /dev/null; then echo "U disk has been mounted" else echo "try to find Udisk" sd_dev_path="" first_sd_path=`ls /dev/sd* | grep "1$"` if [ -b "$first_sd_path" ]; then sd_dev_path="$first_sd_path" fi mount $sd_dev_path /media fi if [ -f "/media/software.swu" ]; then if [ -f "/proc/inand" ]; then swupdate -l 6 -k /etc/swupdate-public.pem -i /media/software.swu else swupdate -l 6 -b "0 1 2 3 4" -k /etc/swupdate-public.pem -i /media/software.swu fi if [ $? != 0 ]; then echo "swupdate software.swu from usb failed!" umount /media else echo "swupdate software.swu from usb success!" umount /media urlmisc clean sync sleep 2 reboot echo "swupdate reboot now!" fi else echo "no software.swu found in usb device" #execute swupdate for clear misc, no need into recovery after reboot swupdate umount /media urlmisc clean fi fi