| #!/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} |