diff --git a/chip-legacy-update.sh b/chip-legacy-update.sh new file mode 100755 index 0000000..d6f2c64 --- /dev/null +++ b/chip-legacy-update.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +source $SCRIPTDIR/common.sh + +if ! wait_for_fel; then + echo "ERROR: please jumper your CHIP in FEL mode then power on" + exit 1 +fi + + +FLASH_SCRIPT=./chip-fel-flash.sh +WHAT=buildroot +BRANCH=stable + +function require_directory { + if [[ ! -d "${1}" ]]; then + mkdir -p "${1}" + fi +} + +function s3_md5 { + local URL=$1 + curl -sLI $URL |grep ETag|sed -e 's/.*"\([a-fA-F0-9]\+\)["-]*.*/\1/;' +} + +function cache_download { + local DEST_DIR=${1} + local SRC_URL=${2} + local FILE=${3} + + if [[ -f "${DEST_DIR}/${FILE}" ]]; then + echo "${DEST_DIR}/${FILE} exists... comparing to ${SRC_URL}/${FILE}" + local S3_MD5=$(s3_md5 ${SRC_URL}/${FILE}) + local MD5=$(md5sum ${DEST_DIR}/${FILE} | cut -d\ -f1) + echo "MD5: ${MD5}" + echo "S3_MD5: ${S3_MD5}" + if [[ "${S3_MD5}" != "${MD5}" ]]; then + echo "md5sum differs" + rm ${DEST_DIR}/${FILE} + if ! wget -P "${FW_IMAGE_DIR}" "${SRC_URL}/${FILE}"; then + echo "download of ${SRC_URL}/${FILE} failed!" + exit $? + fi + else + echo "file already downloaded" + fi + else + if ! wget -P "${FW_IMAGE_DIR}" "${SRC_URL}/${FILE}"; then + echo "download of ${SRC_URL}/${FILE} failed!" + exit $? + fi + fi +} + + +while getopts "ufdpb:w:B:" opt; do + case $opt in + u) + echo "updating cache" + if [[ -d "$FW_IMAGE_DIR" ]]; then + rm -rf $FW_IMAGE_DIR + fi + ;; + f) + echo "fastboot enabled" + FLASH_SCRIPT_OPTION="-f" + ;; + B) + BUILD="$OPTARG" + echo "BUILD = ${BUILD}" + ;; + b) + BRANCH="$OPTARG" + echo "BRANCH = ${BRANCH}" + ;; + w) + WHAT="$OPTARG" + echo "WHAT = ${WHAT}" + ;; + d) + echo "debian selected" + WHAT="debian" + ;; + p) + echo "PocketC.H.I.P selected" + WHAT="pocketchip" + BUILD=123 + FLASH_SCRIPT=./chip-fel-flash.sh -p + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + + +FW_DIR="$(pwd)/.firmware" +FW_IMAGE_DIR="${FW_DIR}/images" +BASE_URL="http://opensource.nextthing.co/chip" +S3_URL="${BASE_URL}/${WHAT}/${BRANCH}/latest" + + + +if [[ -z "$BUILD" ]]; then + ROOTFS_URL="$(wget -q -O- ${S3_URL})" || (echo "ERROR: cannot reach ${S3_URL}" && exit 1) + if [[ -z "${ROOTFS_URL}" ]]; then + echo "error: could not get URL for latest build from ${S3_URL} - check internet connection" + exit 1 + fi +else + ROOTFS_URL="${S3_URL%latest}$BUILD" +fi + +case "${WHAT}" in + "buildroot") + BR_BUILD="$(wget -q -O- ${ROOTFS_URL}/build)" + BUILD=${BR_BUILD} + ROOTFS_URL="${ROOTFS_URL}/images" + BR_URL="${ROOTFS_URL}" + ;; + "debian") + BR_BUILD="$(wget -q -O- ${ROOTFS_URL}/br_build)" + BR_URL="${BASE_URL}/buildroot/${BRANCH%-gui}/${BR_BUILD}/images" + BUILD="$(wget -q -O- ${ROOTFS_URL}/build)" + ;; + "pocketchip") + BR_BUILD=123 + BUILD=123 + ROOTFS_URL="http://opensource.nextthing.co/pocketchip" + BR_URL="$ROOTFS_URL" + ;; +esac + +echo "ROOTFS_URL=${ROOTFS_URL}" +echo "BUILD=${BUILD}" +echo "BR_URL=${BR_URL}" +echo "BR_BUILD=${BR_BUILD}" + +require_directory "${FW_IMAGE_DIR}" +cache_download "${FW_IMAGE_DIR}" ${ROOTFS_URL} rootfs.ubi +cache_download "${FW_IMAGE_DIR}" ${BR_URL} sun5i-r8-chip.dtb +cache_download "${FW_IMAGE_DIR}" ${BR_URL} sunxi-spl.bin +cache_download "${FW_IMAGE_DIR}" ${BR_URL} sunxi-spl-with-ecc.bin +cache_download "${FW_IMAGE_DIR}" ${BR_URL} uboot-env.bin +cache_download "${FW_IMAGE_DIR}" ${BR_URL} zImage +cache_download "${FW_IMAGE_DIR}" ${BR_URL} u-boot-dtb.bin + +BUILDROOT_OUTPUT_DIR="${FW_DIR}" ${FLASH_SCRIPT} ${FLASH_SCRIPT_OPTION} || echo "ERROR: could not flash" && exit 1 + +#if ! wait_for_linuxboot; then +# echo "ERROR: could not flash" +# exit 1 +#else +# ${SCRIPTDIR}/verify.sh +#fi + +exit $? diff --git a/chip-update-firmware.sh b/chip-update-firmware.sh index d6f2c64..f71b2d8 100755 --- a/chip-update-firmware.sh +++ b/chip-update-firmware.sh @@ -103,57 +103,39 @@ S3_URL="${BASE_URL}/${WHAT}/${BRANCH}/latest" -if [[ -z "$BUILD" ]]; then - ROOTFS_URL="$(wget -q -O- ${S3_URL})" || (echo "ERROR: cannot reach ${S3_URL}" && exit 1) - if [[ -z "${ROOTFS_URL}" ]]; then - echo "error: could not get URL for latest build from ${S3_URL} - check internet connection" - exit 1 - fi +if [[ ! -z "$BUILD" ]]; then + case "${WHAT}" in + "buildroot") + if [[ "$BUILD" -lt "74" ]] && [[ "${BRANCH}" == "stable" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + if [[ "$BUILD" -lt "60" ]] && [[ "${BRANCH}" == "next" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + ;; + "debian") + if [[ "$BUILD" -lt "47" ]] && [[ "${BRANCH}" == "stable" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + if [[ "$BUILD" -lt "148" ]] && [[ "${BRANCH}" == "next" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + if [[ "$BUILD" -lt "4" ]] && [[ "${BRANCH}" == "stable-gui" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + if [[ "$BUILD" -lt "148" ]] && [[ "${BRANCH}" == "next-gui" ]]; then + ./chip-legacy-update.sh $@ || echo "ERROR: could not flash" && exit 1 + exit 0 + fi + ;; + esac else ROOTFS_URL="${S3_URL%latest}$BUILD" fi -case "${WHAT}" in - "buildroot") - BR_BUILD="$(wget -q -O- ${ROOTFS_URL}/build)" - BUILD=${BR_BUILD} - ROOTFS_URL="${ROOTFS_URL}/images" - BR_URL="${ROOTFS_URL}" - ;; - "debian") - BR_BUILD="$(wget -q -O- ${ROOTFS_URL}/br_build)" - BR_URL="${BASE_URL}/buildroot/${BRANCH%-gui}/${BR_BUILD}/images" - BUILD="$(wget -q -O- ${ROOTFS_URL}/build)" - ;; - "pocketchip") - BR_BUILD=123 - BUILD=123 - ROOTFS_URL="http://opensource.nextthing.co/pocketchip" - BR_URL="$ROOTFS_URL" - ;; -esac - -echo "ROOTFS_URL=${ROOTFS_URL}" -echo "BUILD=${BUILD}" -echo "BR_URL=${BR_URL}" -echo "BR_BUILD=${BR_BUILD}" - -require_directory "${FW_IMAGE_DIR}" -cache_download "${FW_IMAGE_DIR}" ${ROOTFS_URL} rootfs.ubi -cache_download "${FW_IMAGE_DIR}" ${BR_URL} sun5i-r8-chip.dtb -cache_download "${FW_IMAGE_DIR}" ${BR_URL} sunxi-spl.bin -cache_download "${FW_IMAGE_DIR}" ${BR_URL} sunxi-spl-with-ecc.bin -cache_download "${FW_IMAGE_DIR}" ${BR_URL} uboot-env.bin -cache_download "${FW_IMAGE_DIR}" ${BR_URL} zImage -cache_download "${FW_IMAGE_DIR}" ${BR_URL} u-boot-dtb.bin - -BUILDROOT_OUTPUT_DIR="${FW_DIR}" ${FLASH_SCRIPT} ${FLASH_SCRIPT_OPTION} || echo "ERROR: could not flash" && exit 1 - -#if ! wait_for_linuxboot; then -# echo "ERROR: could not flash" -# exit 1 -#else -# ${SCRIPTDIR}/verify.sh -#fi - exit $?