#!/bin/bash BACKUP_IFS=$IFS IFS=$(echo -en "\n\b") function dir_with_file() { local file=${1}; shift local dir; for dir; do if [ -z "${dir}" ]; then continue; fi if [ -r "${dir}/${file}" ]; then echo ${dir} return fi done echo "Could not find ${file}, looked in $@" >&2 return 1 } LOCAL_DIR=$(dirname "${0}") # Location of where the Brillo OS image is built. UBOOT_DIR=$(dir_with_file u-boot-edison.img \ "${LOCAL_DIR}"/uboot_firmware \ "${LOCAL_DIR}") IFWI_DIR=$(dir_with_file edison_dnx_fwr.bin \ "${LOCAL_DIR}"/ifwi_firmware \ "${LOCAL_DIR}") if [ $? -ne 0 ]; then exit 1 fi GETOPTS="$(which getopt)" if [[ "$OSTYPE" == "darwin"* ]] ; then READLINK=greadlink; GETOPTS="$(brew list gnu-getopt | grep bin/getopt)"; else READLINK=readlink;fi; if [[ "$OSTYPE" == "cygwin" ]] ; then TEMP_DIR="$(dirname $($READLINK -f "$0"))" UBOOT_DIR="$(cygpath -m ${UBOOT_DIR})" IFWI_DIR="$(cygpath -m ${IFWI_DIR})" else UBOOT_DIR=${UBOOT_DIR//' '/'\ '} IFWI_DIR=${IFWI_DIR//' '/'\ '} fi; LOG_FILENAME="flash.log" function print-usage { cat << EOF Usage: ${0##*/} [-h][--help] Update all software and restore board to its initial state. -h,--help display this help and exit. EOF exit -5 } function flash-debug { echo "DEBUG: lsusb" lsusb } function flash-ifwi { if [ -x "$(which xfstk-dldr-solo)" ]; then flash-ifwi-xfstk else echo "!!! You should install xfstk tools, please visit http://xfstk.sourceforge.net/" echo "!!! Alternatively, see the Edison-Brillo web for information on using Phone Flash Tool Lite" exit -1 fi } function flash-ifwi-xfstk { XFSTK_PARAMS=" --gpflags 0x80000007 --osimage ${UBOOT_DIR}/u-boot-edison.img" XFSTK_PARAMS="${XFSTK_PARAMS} --fwdnx ${IFWI_DIR}/edison_dnx_fwr.bin" XFSTK_PARAMS="${XFSTK_PARAMS} --fwimage ${IFWI_DIR}/edison_ifwi-dbg-00.bin" XFSTK_PARAMS="${XFSTK_PARAMS} --osdnx ${IFWI_DIR}/edison_dnx_osr.bin" eval xfstk-dldr-solo ${XFSTK_PARAMS} if [ $? -ne 0 ]; then echo "Xfstk tool error" flash-debug exit -1 fi } # Execute old getopt to have long options support ARGS=$($GETOPTS -o hv -l "recovery,help" -n "${0##*/}" -- "$@"); #Bad arguments if [ $? -ne 0 ]; then print-usage ; fi; eval set -- "$ARGS"; while true; do case "$1" in -h|--help) shift; print-usage;; --) shift; break;; esac done echo "** Flashing Edison Board $(date) **" >> ${LOG_FILENAME} if [[ "$OSTYPE" == "darwin"* ]] ; then echo "Recovery mode is only available on windows and linux"; exit -3 fi echo "Starting Recovery mode" echo "Please plug and reboot the board" echo "Flashing IFWI" flash-ifwi echo "Recovery Success..." echo "You can now try a regular flash" IFS=${BACKUP_IFS}