mirror of
https://github.com/NextThingCo/CHIP-tools-backup
synced 2025-07-17 17:33:21 +00:00
initial commit
This commit is contained in:
7
LICENSE
Normal file
7
LICENSE
Normal file
@ -0,0 +1,7 @@
|
||||
Copyright (c) <2016> <Next Thing Co.>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
14
README.md
Normal file
14
README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# CHIP-tools
|
||||
A collection of scripts for working with CHIP
|
||||
|
||||
## Requirements
|
||||
1) **sunxi-tools** from your package manager or from the [Sunxi repository](https://github.com/linux-sunxi/sunxi-tools.git)
|
||||
2) **uboot-tools** from your package manager
|
||||
2) **mtd-utils-mlc** from our repository (https://github.com/nextthingco/chip-mtd-utils) [for creating images]
|
||||
|
||||
## Included Tools
|
||||
### chip-update-firmware
|
||||
This tool is used to download and flash the latest firmware release for CHIP. The tool also now only supports fastboot flashing.
|
||||
|
||||
### chip-create-nand-images
|
||||
This tool is used to generate local firmware images for CHIP and CHIP Pro.
|
161
chip-create-nand-images.sh
Executable file
161
chip-create-nand-images.sh
Executable file
@ -0,0 +1,161 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source $SCRIPTDIR/common.sh
|
||||
|
||||
if [[ -z $(which ${MKFS_UBIFS}) ]]; then
|
||||
echo "Could not find ${MKFS_UBIFS} in path."
|
||||
echo "Install it with the CHIP-SDK setup script."
|
||||
echo "You will also need to run this script as root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
UBOOTDIR="$1"
|
||||
ROOTFSTAR="$2"
|
||||
OUTPUTDIR="$3"
|
||||
|
||||
# build the UBI image
|
||||
prepare_ubi() {
|
||||
local tmpdir=`mktemp -d -t chip-ubi-XXXXXX`
|
||||
local rootfs=$tmpdir/rootfs
|
||||
local ubifs=$tmpdir/rootfs.ubifs
|
||||
local ubicfg=$tmpdir/ubi.cfg
|
||||
local outputdir="$1"
|
||||
local rootfstar="$2"
|
||||
local nandtype="$3"
|
||||
local maxlebcount="$4"
|
||||
local eraseblocksize="$5"
|
||||
local pagesize="$6"
|
||||
local subpagesize="$7"
|
||||
local oobsize="$8"
|
||||
local ebsize=`printf %x $eraseblocksize`
|
||||
local psize=`printf %x $pagesize`
|
||||
local osize=`printf %x $oobsize`
|
||||
local ubi=$outputdir/chip-$ebsize-$psize-$osize.ubi
|
||||
local sparseubi=$outputdir/chip-$ebsize-$psize-$osize.ubi.sparse
|
||||
local mlcopts=""
|
||||
|
||||
if [ -z $subpagesize ]; then
|
||||
subpagesize=$pagesize
|
||||
fi
|
||||
|
||||
if [ "$nandtype" = "mlc" ]; then
|
||||
lebsize=$((eraseblocksize/2-$pagesize*2))
|
||||
mlcopts="-M dist3"
|
||||
elif [ $subpagesize -lt $pagesize ]; then
|
||||
lebsize=$((eraseblocksize-pagesize))
|
||||
else
|
||||
lebsize=$((eraseblocksize-pagesize*2))
|
||||
fi
|
||||
|
||||
if [ "$osize" = "100" ]; then
|
||||
#TOSH_512_SLC
|
||||
volspec="vol_flags=autoresize"
|
||||
elif [ "$osize" = "500" ]; then
|
||||
#TOSH_4GB_MLC
|
||||
volspec="vol_size=3584MiB"
|
||||
elif [ "$osize" = "680" ]; then
|
||||
#HYNI_8GB_MLC
|
||||
volspec="vol_size=7168MiB"
|
||||
else
|
||||
echo "Unable to acquire appropriate volume size or flags, quitting!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p $rootfs
|
||||
tar -xf $rootfstar -C $rootfs
|
||||
${MKFS_UBIFS} -d $rootfs -m $pagesize -e $lebsize -c $maxlebcount -o $ubifs
|
||||
echo "[rootfs]
|
||||
mode=ubi
|
||||
vol_id=0
|
||||
$volspec
|
||||
vol_type=dynamic
|
||||
vol_name=rootfs
|
||||
vol_alignment=1
|
||||
image=$ubifs" > $ubicfg
|
||||
|
||||
|
||||
ubinize -o $ubi -p $eraseblocksize -m $pagesize -s $subpagesize $mlcopts $ubicfg
|
||||
img2simg $ubi $sparseubi $eraseblocksize
|
||||
rm -rf $tmpdir
|
||||
}
|
||||
|
||||
# build the SPL image
|
||||
prepare_spl() {
|
||||
local tmpdir=`mktemp -d -t chip-spl-XXXXXX`
|
||||
local outputdir=$1
|
||||
local spl=$2
|
||||
local eraseblocksize=$3
|
||||
local pagesize=$4
|
||||
local oobsize=$5
|
||||
local repeat=$((eraseblocksize/pagesize/64))
|
||||
local nandspl=$tmpdir/nand-spl.bin
|
||||
local nandpaddedspl=$tmpdir/nand-padded-spl.bin
|
||||
local ebsize=`printf %x $eraseblocksize`
|
||||
local psize=`printf %x $pagesize`
|
||||
local osize=`printf %x $oobsize`
|
||||
local nandrepeatedspl=$outputdir/spl-$ebsize-$psize-$osize.bin
|
||||
local padding=$tmpdir/padding
|
||||
local splpadding=$tmpdir/nand-spl-padding
|
||||
|
||||
${SNIB} -c 64/1024 -p $pagesize -o $oobsize -u 1024 -e $eraseblocksize -b -s $spl $nandspl
|
||||
|
||||
local splsize=`filesize $nandspl`
|
||||
local paddingsize=$((64-(splsize/(pagesize+oobsize))))
|
||||
local i=0
|
||||
|
||||
while [ $i -lt $repeat ]; do
|
||||
dd if=/dev/urandom of=$padding bs=1024 count=$paddingsize
|
||||
${SNIB} -c 64/1024 -p $pagesize -o $oobsize -u 1024 -e $eraseblocksize -b -s $padding $splpadding
|
||||
cat $nandspl $splpadding > $nandpaddedspl
|
||||
|
||||
if [ "$i" -eq "0" ]; then
|
||||
cat $nandpaddedspl > $nandrepeatedspl
|
||||
else
|
||||
cat $nandpaddedspl >> $nandrepeatedspl
|
||||
fi
|
||||
|
||||
i=$((i+1))
|
||||
done
|
||||
|
||||
rm -rf $tmpdir
|
||||
}
|
||||
|
||||
# build the bootloader image
|
||||
prepare_uboot() {
|
||||
local outputdir=$1
|
||||
local uboot=$2
|
||||
local eraseblocksize=$3
|
||||
local ebsize=`printf %x $eraseblocksize`
|
||||
local paddeduboot=$outputdir/uboot-$ebsize.bin
|
||||
|
||||
dd if=$uboot of=$paddeduboot bs=$eraseblocksize conv=sync
|
||||
}
|
||||
|
||||
## copy the source images in the output dir ##
|
||||
mkdir -p $OUTPUTDIR
|
||||
cp $UBOOTDIR/spl/sunxi-spl.bin $OUTPUTDIR/
|
||||
cp $UBOOTDIR/u-boot-dtb.bin $OUTPUTDIR/
|
||||
cp $ROOTFSTAR $OUTPUTDIR/
|
||||
|
||||
## prepare ubi images ##
|
||||
# Toshiba SLC image:
|
||||
prepare_ubi $OUTPUTDIR $ROOTFSTAR "slc" 2048 262144 4096 1024 256
|
||||
# Toshiba MLC image:
|
||||
prepare_ubi $OUTPUTDIR $ROOTFSTAR "mlc" 4096 4194304 16384 16384 1280
|
||||
# Hynix MLC image:
|
||||
prepare_ubi $OUTPUTDIR $ROOTFSTAR "mlc" 4096 4194304 16384 16384 1664
|
||||
|
||||
## prepare spl images ##
|
||||
# Toshiba SLC image:
|
||||
prepare_spl $OUTPUTDIR $UBOOTDIR/spl/sunxi-spl.bin 262144 4096 256
|
||||
# Toshiba MLC image:
|
||||
prepare_spl $OUTPUTDIR $UBOOTDIR/spl/sunxi-spl.bin 4194304 16384 1280
|
||||
# Hynix MLC image:
|
||||
prepare_spl $OUTPUTDIR $UBOOTDIR/spl/sunxi-spl.bin 4194304 16384 1664
|
||||
|
||||
## prepare uboot images ##
|
||||
# Toshiba SLC image:
|
||||
prepare_uboot $OUTPUTDIR $UBOOTDIR/u-boot-dtb.bin 262144
|
||||
# Toshiba/Hynix MLC image:
|
||||
prepare_uboot $OUTPUTDIR $UBOOTDIR/u-boot-dtb.bin 4194304
|
223
chip-fel-flash.sh
Executable file
223
chip-fel-flash.sh
Executable file
@ -0,0 +1,223 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source $SCRIPTDIR/common.sh
|
||||
|
||||
##############################################################
|
||||
# main
|
||||
##############################################################
|
||||
while getopts "flpu:" opt; do
|
||||
case $opt in
|
||||
f)
|
||||
echo "fastboot enabled"
|
||||
METHOD=fastboot
|
||||
;;
|
||||
l)
|
||||
echo "factory mode remain in u-boot after flashing"
|
||||
AFTER_FLASHING=loop
|
||||
;;
|
||||
u)
|
||||
BUILDROOT_OUTPUT_DIR="${OPTARG}"
|
||||
;;
|
||||
p)
|
||||
POCKET_CHIP=true
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "BUILDROOT_OUTPUT_DIR = $BUILDROOT_OUTPUT_DIR"
|
||||
|
||||
FEL=fel
|
||||
|
||||
METHOD=${METHOD:-fel}
|
||||
AFTER_FLASHING=${AFTER_FLASHING:-wait}
|
||||
|
||||
|
||||
NAND_ERASE_BB=false
|
||||
if [ "$1" == "erase-bb" ]; then
|
||||
NAND_ERASE_BB=true
|
||||
fi
|
||||
|
||||
PATH=$PATH:$BUILDROOT_OUTPUT_DIR/host/usr/bin
|
||||
TMPDIR=`mktemp -d -t chipflashXXXXXX`
|
||||
PADDED_SPL="${BUILDROOT_OUTPUT_DIR}/images/sunxi-spl-with-ecc.bin"
|
||||
PADDED_SPL_SIZE=0
|
||||
UBOOT_SCRIPT="$TMPDIR/uboot.scr"
|
||||
UBOOT_SCRIPT_MEM_ADDR=0x43100000
|
||||
UBOOT_SCRIPT_SRC="$TMPDIR/uboot.cmds"
|
||||
SPL="$BUILDROOT_OUTPUT_DIR/images/sunxi-spl.bin"
|
||||
SPL_MEM_ADDR=0x43000000
|
||||
UBOOT="$BUILDROOT_OUTPUT_DIR/images/u-boot-dtb.bin"
|
||||
PADDED_UBOOT="$TMPDIR/padded-uboot"
|
||||
PADDED_UBOOT_SIZE=0x400000
|
||||
UBOOT_MEM_ADDR=0x4a000000
|
||||
UBI="$BUILDROOT_OUTPUT_DIR/images/rootfs.ubi"
|
||||
SPARSE_UBI="${TMPDIR}/rootfs.ubi.sparse"
|
||||
UBI_MEM_ADDR=0x4b000000
|
||||
|
||||
UBI_SIZE=`filesize $UBI | xargs printf "0x%08x"`
|
||||
PAGE_SIZE=16384
|
||||
OOB_SIZE=1664
|
||||
|
||||
prepare_images() {
|
||||
#PADDED_SPL_SIZE in pages
|
||||
if [[ ! -e "${PADDED_SPL}" ]]; then
|
||||
echo "ERROR: can not read ${PADDED_SPL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PADDED_SPL_SIZE=$(filesize "${PADDED_SPL}")
|
||||
PADDED_SPL_SIZE=$(($PADDED_SPL_SIZE / ($PAGE_SIZE + $OOB_SIZE)))
|
||||
PADDED_SPL_SIZE=$(echo $PADDED_SPL_SIZE | xargs printf "0x%08x")
|
||||
echo "PADDED_SPL_SIZE=$PADDED_SPL_SIZE"
|
||||
|
||||
# Align the u-boot image on a page boundary
|
||||
dd if="$UBOOT" of="$PADDED_UBOOT" bs=4M conv=sync
|
||||
UBOOT_SIZE=`filesize "$PADDED_UBOOT" | xargs printf "0x%08x"`
|
||||
echo "UBOOT_SIZE=${UBOOT_SIZE}"
|
||||
echo "PADDED_UBOOT_SIZE=${PADDED_UBOOT_SIZE}"
|
||||
dd if=/dev/urandom of="$PADDED_UBOOT" seek=$((UBOOT_SIZE / 0x4000)) bs=16k count=$(((PADDED_UBOOT_SIZE - UBOOT_SIZE) / 0x4000))
|
||||
}
|
||||
|
||||
prepare_uboot_script() {
|
||||
if [ "$NAND_ERASE_BB" = true ] ; then
|
||||
echo "nand scrub -y 0x0 0x200000000" > "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "nand erase 0x0 0x200000000" > "${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
echo "echo nand write.raw.noverify $SPL_MEM_ADDR 0x0 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "nand write.raw.noverify $SPL_MEM_ADDR 0x0 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo nand write.raw.noverify $SPL_MEM_ADDR 0x400000 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "nand write.raw.noverify $SPL_MEM_ADDR 0x400000 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "nand write $UBOOT_MEM_ADDR 0x800000 $PADDED_UBOOT_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw earlyprintk ubi.mtd=4" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv bootcmd 'gpio set PB2; if test -n \${fel_booted} && test -n \${scriptaddr}; then echo '(FEL boot)'; source \${scriptaddr}; fi; mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/sun5i-r8-chip.dtb; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r'" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv fel_booted 0" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "echo Enabling Splash" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv stdout serial" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv stderr serial" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv splashpos m,m" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "echo Configuring Video Mode"
|
||||
if [[ "${POCKET_CHIP}" == "true" ]]; then
|
||||
echo "setenv video-mode" >> "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "setenv video-mode sunxi:640x480-24@60,monitor=composite-ntsc,overscan_x=40,overscan_y=20" >> "${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
echo "saveenv" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
echo "nand write.slc-mode.trimffs $UBI_MEM_ADDR 0x1000000 $UBI_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "mw \${scriptaddr} 0x0" >> "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "echo going to fastboot mode" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "fastboot 0" >>"${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
if [[ "${AFTER_FLASHING}" == "boot" ]]; then
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo *****************[ BOOT ]*****************" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "boot" >> "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo *****************[ FLASHING DONE ]*****************" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
echo "reset"
|
||||
else
|
||||
echo "while true; do; sleep 10; done;" >>"${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
mkimage -A arm -T script -C none -n "flash CHIP" -d "${UBOOT_SCRIPT_SRC}" "${UBOOT_SCRIPT}"
|
||||
}
|
||||
|
||||
assert_error() {
|
||||
ERR=$?
|
||||
ERRCODE=$1
|
||||
if [ "${ERR}" != "0" ]; then
|
||||
if [ -z "${ERR}" ]; then
|
||||
exit ${ERR}
|
||||
else
|
||||
exit ${ERRCODE}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
echo == preparing images ==
|
||||
prepare_images
|
||||
prepare_uboot_script
|
||||
|
||||
echo == upload the SPL to SRAM and execute it ==
|
||||
if ! wait_for_fel; then
|
||||
echo "ERROR: please make sure CHIP is connected and jumpered in FEL mode"
|
||||
fi
|
||||
${FEL} spl "${SPL}"
|
||||
assert_error 128
|
||||
|
||||
sleep 1 # wait for DRAM initialization to complete
|
||||
|
||||
echo == upload spl ==
|
||||
${FEL} write $SPL_MEM_ADDR "${PADDED_SPL}" || ( echo "ERROR: could not write ${PADDED_SPL}" && exit $? )
|
||||
assert_error 129
|
||||
|
||||
echo == upload u-boot ==
|
||||
${FEL} write $UBOOT_MEM_ADDR "${PADDED_UBOOT}" || ( echo "ERROR: could not write ${PADDED_UBOOT}" && exit $? )
|
||||
assert_error 130
|
||||
|
||||
echo == upload u-boot script ==
|
||||
${FEL} write $UBOOT_SCRIPT_MEM_ADDR "${UBOOT_SCRIPT}" || ( echo "ERROR: could not write ${UBOOT_SCRIPT}" && exit $? )
|
||||
assert_error 131
|
||||
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
echo == upload ubi ==
|
||||
${FEL} --progress write $UBI_MEM_ADDR "${UBI}"
|
||||
|
||||
echo == execute the main u-boot binary ==
|
||||
${FEL} exe $UBOOT_MEM_ADDR
|
||||
|
||||
echo == write ubi ==
|
||||
else
|
||||
echo == execute the main u-boot binary ==
|
||||
${FEL} exe $UBOOT_MEM_ADDR
|
||||
assert_error 132
|
||||
|
||||
echo == creating sparse image ==
|
||||
img2simg ${UBI} ${SPARSE_UBI} $((2*1024*1024))
|
||||
assert_error 133
|
||||
|
||||
echo == waiting for fastboot ==
|
||||
if wait_for_fastboot; then
|
||||
fastboot -i 0x1f3a -u flash UBI ${SPARSE_UBI}
|
||||
assert_error 134
|
||||
|
||||
fastboot -i 0x1f3a continue
|
||||
assert_error 135
|
||||
else
|
||||
rm -rf "${TMPDIR}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
if ! wait_for_linuxboot; then
|
||||
echo "ERROR: could not flash":
|
||||
rm -rf ${TMPDIR}
|
||||
exit 1
|
||||
else
|
||||
${SCRIPTDIR}/verify.sh
|
||||
fi
|
||||
fi
|
||||
rm -rf "${TMPDIR}"
|
||||
|
||||
ready_to_roll
|
||||
|
31
chip-fel-upload.sh
Executable file
31
chip-fel-upload.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#! /bin/bash
|
||||
|
||||
SPL=$1
|
||||
UBOOT=$2
|
||||
KERNEL=$3
|
||||
DTB=$4
|
||||
INITRD=$5
|
||||
SCRIPT=$6
|
||||
|
||||
echo == upload the SPL to SRAM and execute it ==
|
||||
fel spl $SPL
|
||||
|
||||
sleep 1 # wait for DRAM initialization to complete
|
||||
|
||||
echo == upload the main u-boot binary to DRAM ==
|
||||
fel write 0x4a000000 $UBOOT
|
||||
|
||||
echo == upload the kernel ==
|
||||
fel write 0x42000000 $KERNEL
|
||||
|
||||
echo == upload the DTB file ==
|
||||
fel write 0x43000000 $DTB
|
||||
|
||||
echo == upload the boot.scr file ==
|
||||
fel write 0x43100000 $SCRIPT
|
||||
|
||||
echo == upload the initramfs file ==
|
||||
fel write 0x43300000 $INITRD
|
||||
|
||||
echo == execute the main u-boot binary ==
|
||||
fel exe 0x4a000000
|
279
chip-flash
Executable file
279
chip-flash
Executable file
@ -0,0 +1,279 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source $SCRIPTDIR/common.sh
|
||||
|
||||
RUN_ALL_STAGES=true
|
||||
NUM_STAGES=5
|
||||
stage=()
|
||||
|
||||
for i in $(seq 0 $NUM_STAGES); do
|
||||
stage+=(false)
|
||||
done
|
||||
##############################################################
|
||||
# main
|
||||
##############################################################
|
||||
TEMP=`getopt -o "sflu:n:" --long "fel,fastboot,loop-after-flash,stage:,chip-path:" -- "$@"`
|
||||
eval set -- "$TEMP"
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
-s|--fel)
|
||||
echo "fel method enabled"
|
||||
METHOD=fel
|
||||
shift
|
||||
;;
|
||||
-f|--fastboot)
|
||||
echo "fastboot method enabled"
|
||||
METHOD=fastboot
|
||||
shift
|
||||
;;
|
||||
-l|--loop-after-flash)
|
||||
echo "factory mode remain in u-boot after flashing"
|
||||
AFTER_FLASHING=loop
|
||||
shift
|
||||
;;
|
||||
-u)
|
||||
BUILDROOT_OUTPUT_DIR="${2}"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--stage)
|
||||
if [ "${2}" -ge 0 -a "${2}" -le $NUM_STAGES ]; then
|
||||
echo "Enabling stage ${2}"
|
||||
stage[${2}]=true
|
||||
RUN_ALL_STAGES=false
|
||||
else
|
||||
echo "Unknown stage: ${2}"
|
||||
fi
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-n|--chip-path)
|
||||
CHIP_PATH=$2
|
||||
FEL_DEVICE="--dev $(udevadm info ${CHIP_PATH} | grep "E\: BUSNUM" | awk -F "=" '{ print $NF }'| sed 's/^0*//'):$(udevadm info ${CHIP_PATH} | grep "E\: DEVNUM" | awk -F "=" '{ print $NF }'| sed 's/^0*//')"
|
||||
FASTBOOT_PORT="-s usb:$(udevadm info ${CHIP_PATH} | grep "P\:" | awk -F "/" '{print $NF}')"
|
||||
echo "Fastboot port: ${FASTBOOT_PORT}"
|
||||
echo "FEL device: ${FEL_DEVICE}"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--)
|
||||
shift; break;;
|
||||
*)
|
||||
echo "Invalid option: -$1" >&2
|
||||
exit 1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
log() {
|
||||
echo " ${FEL_DEVICE}: $@"
|
||||
}
|
||||
BUILDROOT_OUTPUT_DIR="${BUILDROOT_OUTPUT_DIR:-$(pwd)/.firmware}"
|
||||
log "BUILDROOT_OUTPUT_DIR = $BUILDROOT_OUTPUT_DIR"
|
||||
|
||||
if ${RUN_ALL_STAGES}; then
|
||||
log "Running all stages"
|
||||
for i in $(seq 0 $NUM_STAGES); do
|
||||
stage[i]=true
|
||||
done
|
||||
fi
|
||||
|
||||
FEL="fel ${FEL_DEVICE}"
|
||||
|
||||
METHOD=${METHOD:-fastboot}
|
||||
AFTER_FLASHING=${AFTER_FLASHING:-wait}
|
||||
|
||||
|
||||
NAND_ERASE_BB=false
|
||||
if [ "$1" == "erase-bb" ]; then
|
||||
NAND_ERASE_BB=true
|
||||
fi
|
||||
|
||||
PATH=$PATH:$BUILDROOT_OUTPUT_DIR/host/usr/bin
|
||||
TMPDIR="${BUILDROOT_OUTPUT_DIR}/tmp"
|
||||
PADDED_SPL="${BUILDROOT_OUTPUT_DIR}/images/sunxi-spl-with-ecc.bin"
|
||||
PADDED_SPL_SIZE=0
|
||||
UBOOT_SCRIPT="$TMPDIR/uboot.scr"
|
||||
UBOOT_SCRIPT_MEM_ADDR=0x43100000
|
||||
UBOOT_SCRIPT_SRC="$TMPDIR/uboot.cmds"
|
||||
SPL="$BUILDROOT_OUTPUT_DIR/images/sunxi-spl.bin"
|
||||
SPL_MEM_ADDR=0x43000000
|
||||
UBOOT="$BUILDROOT_OUTPUT_DIR/images/u-boot-dtb.bin"
|
||||
PADDED_UBOOT="$TMPDIR/padded-uboot"
|
||||
PADDED_UBOOT_SIZE=0x400000
|
||||
UBOOT_MEM_ADDR=0x4a000000
|
||||
UBI="$BUILDROOT_OUTPUT_DIR/images/rootfs.ubi"
|
||||
SPARSE_UBI="${TMPDIR}/rootfs.ubi.sparse"
|
||||
UBI_MEM_ADDR=0x4b000000
|
||||
|
||||
log "Temporary directory: ${TMPDIR}"
|
||||
if [ ! -d "${TMPDIR}" ]; then
|
||||
log "Making directory: ${TMPDIR}"
|
||||
mkdir -p "${TMPDIR}"
|
||||
fi
|
||||
|
||||
UBI_SIZE=`filesize $UBI | xargs printf "0x%08x"`
|
||||
PAGE_SIZE=16384
|
||||
OOB_SIZE=1664
|
||||
|
||||
prepare_images() {
|
||||
#PADDED_SPL_SIZE in pages
|
||||
if [[ ! -e "${PADDED_SPL}" ]]; then
|
||||
log "ERROR: can not read ${PADDED_SPL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PADDED_SPL_SIZE=$(filesize "${PADDED_SPL}")
|
||||
PADDED_SPL_SIZE=$(($PADDED_SPL_SIZE / ($PAGE_SIZE + $OOB_SIZE)))
|
||||
PADDED_SPL_SIZE=$(echo $PADDED_SPL_SIZE | xargs printf "0x%08x")
|
||||
log "PADDED_SPL_SIZE=$PADDED_SPL_SIZE"
|
||||
|
||||
# Align the u-boot image on block boundary
|
||||
dd if="$UBOOT" of="$PADDED_UBOOT" bs=4MB conv=sync
|
||||
UBOOT_SIZE=`filesize "$PADDED_UBOOT" | xargs printf "0x%08x"`
|
||||
log "UBOOT_SIZE=${UBOOT_SIZE}"
|
||||
log "PADDED_UBOOT_SIZE=${PADDED_UBOOT_SIZE}"
|
||||
dd if=/dev/urandom of="$PADDED_UBOOT" seek=$((UBOOT_SIZE / 0x4000)) bs=16k count=$(((PADDED_UBOOT_SIZE - UBOOT_SIZE) / 0x4000))
|
||||
}
|
||||
|
||||
prepare_uboot_script() {
|
||||
if [ "$NAND_ERASE_BB" = true ] ; then
|
||||
echo "nand scrub -y 0x0 0x200000000" > "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "nand erase 0x0 0x200000000" > "${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
echo "echo nand write.raw.noverify $SPL_MEM_ADDR 0x0 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "nand write.raw.noverify $SPL_MEM_ADDR 0x0 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo nand write.raw.noverify $SPL_MEM_ADDR 0x400000 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "nand write.raw.noverify $SPL_MEM_ADDR 0x400000 $PADDED_SPL_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "nand write $UBOOT_MEM_ADDR 0x800000 $PADDED_UBOOT_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw earlyprintk ubi.mtd=4" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv bootcmd 'if test -n \${fel_booted} && test -n \${scriptaddr}; then echo '(FEL boot)'; source \${scriptaddr}; fi; mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/sun5i-r8-chip.dtb; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r'" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv fel_booted 0" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "echo Enabling Splash" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv stdout serial" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv stderr serial" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "setenv splashpos m,m" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "echo Configuring Video Mode"
|
||||
echo "setenv video-mode sunxi:640x480-24@60,monitor=composite-ntsc,overscan_x=40,overscan_y=20" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
echo "saveenv" >> "${UBOOT_SCRIPT_SRC}"
|
||||
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
echo "nand write.slc-mode.trimffs $UBI_MEM_ADDR 0x1000000 $UBI_SIZE" >> "${UBOOT_SCRIPT_SRC}"
|
||||
echo "mw \${scriptaddr} 0x0" >> "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "echo going to fastboot mode" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "fastboot 0" >>"${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
if [[ "${AFTER_FLASHING}" == "boot" ]]; then
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo *****************[ BOOT ]*****************" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "boot" >> "${UBOOT_SCRIPT_SRC}"
|
||||
else
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo *****************[ FLASHING DONE ]*****************" >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "echo " >>"${UBOOT_SCRIPT_SRC}"
|
||||
echo "while true; do; sleep 10; done;" >>"${UBOOT_SCRIPT_SRC}"
|
||||
fi
|
||||
|
||||
mkimage -A arm -T script -C none -n "flash CHIP" -d "${UBOOT_SCRIPT_SRC}" "${UBOOT_SCRIPT}"
|
||||
}
|
||||
|
||||
assert_error() {
|
||||
ERR=$?
|
||||
ERRCODE=$1
|
||||
if [ "${ERR}" != "0" ]; then
|
||||
if [ -z "${ERR}" ]; then
|
||||
exit ${ERR}
|
||||
else
|
||||
exit ${ERRCODE}
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
if ${stage[0]}; then
|
||||
log "== preparing images =="
|
||||
if [ ! -f "${PADDED_UBOOT}" ]; then
|
||||
prepare_images > /dev/null
|
||||
fi
|
||||
if [ ! -f "${UBOOT_SCRIPT}" ]; then
|
||||
prepare_uboot_script > /dev/null
|
||||
fi
|
||||
|
||||
log "== upload the SPL to SRAM and execute it =="
|
||||
|
||||
${FEL} spl "${SPL}" > /dev/null
|
||||
assert_error 128
|
||||
sleep 1 # wait for DRAM initialization to complete
|
||||
fi
|
||||
|
||||
|
||||
if ${stage[1]}; then
|
||||
log "== upload spl =="
|
||||
${FEL} write $SPL_MEM_ADDR "${PADDED_SPL}" > /dev/null
|
||||
assert_error 129
|
||||
fi
|
||||
|
||||
if ${stage[2]}; then
|
||||
log "== upload u-boot =="
|
||||
${FEL} write $UBOOT_MEM_ADDR "${PADDED_UBOOT}" > /dev/null
|
||||
assert_error 130
|
||||
fi
|
||||
|
||||
if ${stage[3]}; then
|
||||
log "== upload u-boot script =="
|
||||
${FEL} write $UBOOT_SCRIPT_MEM_ADDR "${UBOOT_SCRIPT}" || ( echo "ERROR: could not write ${UBOOT_SCRIPT}" && exit $? )
|
||||
assert_error 131
|
||||
fi
|
||||
|
||||
if [[ "${METHOD}" == "fel" ]]; then
|
||||
|
||||
if ${stage[4]}; then
|
||||
log "== upload ubi =="
|
||||
${FEL} write $UBI_MEM_ADDR "${UBI}" > /dev/null
|
||||
assert_error 132
|
||||
fi
|
||||
|
||||
if ${stage[5]}; then
|
||||
log "== execute the main u-boot binary =="
|
||||
${FEL} exe $UBOOT_MEM_ADDR > /dev/null
|
||||
assert_error 133
|
||||
fi
|
||||
# rm -rf "${TMPDIR}"
|
||||
else
|
||||
if ${stage[4]}; then
|
||||
log "== execute the main u-boot binary =="
|
||||
${FEL} exe $UBOOT_MEM_ADDR > /dev/null
|
||||
assert_error 132
|
||||
fi
|
||||
|
||||
if ${stage[5]}; then
|
||||
log "== creating sparse image =="
|
||||
if [ ! -f "${SPARSE_UBI}" ]; then
|
||||
img2simg ${UBI} ${SPARSE_UBI} $((2*1024*1024)) &> /dev/null
|
||||
fi
|
||||
assert_error 133
|
||||
|
||||
log "== waiting for fastboot =="
|
||||
if wait_for_fastboot ${FASTBOOT_PORT}; then
|
||||
fastboot ${FASTBOOT_PORT} -i 0x1f3a -u flash UBI ${SPARSE_UBI} > /dev/null
|
||||
assert_error 134
|
||||
|
||||
fastboot ${FASTBOOT_PORT} -i 0x1f3a continue > /dev/null
|
||||
assert_error 135
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
# rm -rf "${TMPDIR}"
|
||||
fi
|
||||
fi
|
11
chip-flash-nand-images.sh
Executable file
11
chip-flash-nand-images.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source $SCRIPTDIR/common.sh
|
||||
|
||||
IMAGESDIR="$1"
|
||||
ERASEMODE="$2"
|
||||
PLATFORM="$3"
|
||||
|
||||
detect_nand
|
||||
flash_images
|
159
chip-legacy-update.sh
Executable file
159
chip-legacy-update.sh
Executable file
@ -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 $?
|
221
chip-update-firmware.sh
Executable file
221
chip-update-firmware.sh
Executable file
@ -0,0 +1,221 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPTDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
||||
source $SCRIPTDIR/common.sh
|
||||
|
||||
DL_DIR=".dl"
|
||||
IMAGESDIR=".new/firmware/images"
|
||||
|
||||
DL_URL="http://opensource.nextthing.co/chip/images"
|
||||
|
||||
WGET="wget"
|
||||
|
||||
FLAVOR=server
|
||||
BRANCH=stable
|
||||
|
||||
PROBES=(spl-40000-1000-100.bin
|
||||
spl-400000-4000-500.bin
|
||||
spl-400000-4000-680.bin
|
||||
sunxi-spl.bin
|
||||
u-boot-dtb.bin
|
||||
uboot-40000.bin
|
||||
uboot-400000.bin)
|
||||
|
||||
UBI_PREFIX="chip"
|
||||
UBI_SUFFIX="ubi.sparse"
|
||||
UBI_TYPE="400000-4000-680"
|
||||
|
||||
while getopts "sgpbfnrhB:N:F:L:" opt; do
|
||||
case $opt in
|
||||
s)
|
||||
echo "== Server selected =="
|
||||
FLAVOR=server
|
||||
;;
|
||||
g)
|
||||
echo "== Gui selected =="
|
||||
FLAVOR=gui
|
||||
;;
|
||||
p)
|
||||
echo "== Pocketchip selected =="
|
||||
FLAVOR=pocketchip
|
||||
;;
|
||||
b)
|
||||
echo "== Buildroot selected =="
|
||||
FLAVOR=buildroot
|
||||
;;
|
||||
f)
|
||||
echo "== Force clean and download =="
|
||||
rm -rf .dl/ .new/
|
||||
;;
|
||||
n)
|
||||
echo "== No Limit mode =="
|
||||
NO_LIMIT="while itest.b *0x80400000 -ne 03; do i2c mw 0x34 0x30 0x03; i2c read 0x34 0x30 1 0x80400000; done; "
|
||||
;;
|
||||
r)
|
||||
echo "== Reset after flash =="
|
||||
RESET_COMMAND="reset"
|
||||
;;
|
||||
B)
|
||||
BRANCH="$OPTARG"
|
||||
echo "== ${BRANCH} branch selected =="
|
||||
;;
|
||||
N)
|
||||
CACHENUM="$OPTARG"
|
||||
echo "== Build number ${CACHENUM} selected =="
|
||||
;;
|
||||
F)
|
||||
FORMAT="$OPTARG"
|
||||
echo "== Format ${FORMAT} selected =="
|
||||
;;
|
||||
L)
|
||||
LOCALDIR="$OPTARG"
|
||||
echo "== Local directory '${LOCALDIR}' selected =="
|
||||
;;
|
||||
h)
|
||||
echo ""
|
||||
echo "== Help =="
|
||||
echo ""
|
||||
echo " -s -- Server [Debian + Headless] "
|
||||
echo " -g -- GUI [Debian + XFCE] "
|
||||
echo " -p -- PocketCHIP [CHIP on the go!] "
|
||||
echo " -b -- Buildroot [Tiny, but powerful] "
|
||||
echo " -f -- Force clean [re-download if applicable]"
|
||||
echo " -n -- No limit [enable greater power draw]"
|
||||
echo " -r -- Reset [reset device after flash] "
|
||||
echo " -B -- Branch [eg. -B testing] "
|
||||
echo " -N -- Build# [eg. -N 150] "
|
||||
echo " -F -- Format [eg. -F Toshiba_4G_MLC] "
|
||||
echo " -L -- Local [eg. -L ../img/buildroot/] "
|
||||
echo ""
|
||||
echo ""
|
||||
exit 0
|
||||
;;
|
||||
\?)
|
||||
echo "== Invalid option: -$OPTARG ==" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
function require_directory {
|
||||
if [[ ! -d "${1}" ]]; then
|
||||
mkdir -p "${1}"
|
||||
fi
|
||||
}
|
||||
|
||||
function dl_probe {
|
||||
|
||||
if [ -z $CACHENUM ] && [ -z $LOCALDIR ]; then
|
||||
CACHENUM=$(curl -s $DL_URL/$BRANCH/$FLAVOR/latest)
|
||||
fi
|
||||
|
||||
if [[ ! -d "$DL_DIR/$BRANCH-$FLAVOR-b${CACHENUM}" ]] && [[ -z $LOCALDIR ]]; then
|
||||
echo "== New image available =="
|
||||
|
||||
rm -rf $DL_DIR/$BRANCH-$FLAVOR*
|
||||
|
||||
mkdir -p $DL_DIR/${BRANCH}-${FLAVOR}-b${CACHENUM}
|
||||
pushd $DL_DIR/${BRANCH}-${FLAVOR}-b${CACHENUM} > /dev/null
|
||||
|
||||
echo "== Downloading.. =="
|
||||
for FILE in ${PROBES[@]}; do
|
||||
if ! $WGET $DL_URL/$BRANCH/$FLAVOR/${CACHENUM}/$FILE; then
|
||||
echo "!! download of $BRANCH-$FLAVOR-$METHOD-b${CACHENUM} failed !!"
|
||||
exit $?
|
||||
fi
|
||||
done
|
||||
popd > /dev/null
|
||||
else
|
||||
echo "== Local/cached probe files located =="
|
||||
fi
|
||||
|
||||
echo "== Staging for NAND probe =="
|
||||
if [ -z $LOCALDIR ];then
|
||||
ln -s ../../$DL_DIR/${BRANCH}-${FLAVOR}-b${CACHENUM}/ $IMAGESDIR
|
||||
else
|
||||
ln -s ../../$LOCALDIR $IMAGESDIR
|
||||
fi
|
||||
|
||||
if [[ -f ${IMAGESDIR}/ubi_type ]]; then rm ${IMAGESDIR}/ubi_type; fi
|
||||
|
||||
if [ -z $FORMAT ]; then
|
||||
detect_nand || exit 1
|
||||
else
|
||||
case $FORMAT in
|
||||
"Hynix_8G_MLC")
|
||||
echo hello
|
||||
export nand_erasesize=400000
|
||||
export nand_oobsize=680
|
||||
export nand_writesize=4000
|
||||
;;
|
||||
"Toshiba_4G_MLC")
|
||||
export nand_erasesize=400000
|
||||
export nand_oobsize=500
|
||||
export nand_writesize=4000
|
||||
;;
|
||||
"Toshiba_512M_SLC")
|
||||
echo correct
|
||||
export nand_erasesize=40000
|
||||
export nand_oobsize=100
|
||||
export nand_writesize=1000
|
||||
;;
|
||||
*)
|
||||
echo "== Invalid format: $FORMAT =="
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
UBI_TYPE="$nand_erasesize-$nand_writesize-$nand_oobsize"
|
||||
echo $UBI_TYPE > ${IMAGESDIR}/ubi_type
|
||||
fi
|
||||
|
||||
if [[ ! -f "$DL_DIR/$BRANCH-$FLAVOR-b${CACHENUM}/$UBI_PREFIX-$UBI_TYPE.$UBI_SUFFIX" ]] && [ -z $LOCALDIR ]; then
|
||||
echo "== Downloading new UBI, this will be cached for future flashes. =="
|
||||
pushd $DL_DIR/${BRANCH}-${FLAVOR}-b${CACHENUM} > /dev/null
|
||||
if ! $WGET $DL_URL/$BRANCH/$FLAVOR/${CACHENUM}/$UBI_PREFIX-$UBI_TYPE.$UBI_SUFFIX; then
|
||||
echo "!! download of $BRANCH-$FLAVOR-$METHOD-b${CACHENUM} failed !!"
|
||||
exit $?
|
||||
fi
|
||||
popd > /dev/null
|
||||
else
|
||||
if [ -z $LOCALDIR ]; then
|
||||
echo "== Cached UBI located =="
|
||||
else
|
||||
if [[ ! -f "$IMAGESDIR/$UBI_PREFIX-$UBI_TYPE.$UBI_SUFFIX" ]]; then
|
||||
echo "Could not locate UBI files"
|
||||
exit 1
|
||||
else
|
||||
echo "== Cached UBI located =="
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
echo == preparing images ==
|
||||
require_directory "$IMAGESDIR"
|
||||
rm -rf ${IMAGESDIR}
|
||||
require_directory "$DL_DIR"
|
||||
|
||||
##pass
|
||||
dl_probe || (
|
||||
##fail
|
||||
echo -e "\n FLASH VERIFICATION FAILED.\n\n"
|
||||
echo -e "\tTROUBLESHOOTING:\n"
|
||||
echo -e "\tIs the FEL pin connected to GND?"
|
||||
echo -e "\tHave you tried turning it off and turning it on again?"
|
||||
echo -e "\tDid you run the setup script in CHIP-SDK?"
|
||||
echo -e "\tDownload could be corrupt, it can be re-downloaded by adding the '-f' flag."
|
||||
echo -e "\n\n"
|
||||
exit 1
|
||||
)
|
||||
|
||||
##pass
|
||||
flash_images && ready_to_roll || (
|
||||
##fail
|
||||
echo -e "\n FLASH VERIFICATION FAILED.\n\n"
|
||||
echo -e "\tTROUBLESHOOTING:\n"
|
||||
echo -e "\tIs the FEL pin connected to GND?"
|
||||
echo -e "\tHave you tried turning it off and turning it on again?"
|
||||
echo -e "\tDid you run the setup script in CHIP-SDK?"
|
||||
echo -e "\tDownload could be corrupt, it can be re-downloaded by adding the '-f' flag."
|
||||
echo -e "\n\n"
|
||||
)
|
278
common.sh
Executable file
278
common.sh
Executable file
@ -0,0 +1,278 @@
|
||||
#!/bin/bash
|
||||
|
||||
TIMEOUT=30
|
||||
FEL=${FEL:-sunxi-fel}
|
||||
FASTBOOT=${FASTBOOT:-fastboot}
|
||||
MKIMAGE=${MKIMAGE:-mkimage}
|
||||
MKFS_UBIFS=${MKFS_UBIFS:-mkfs.ubifs}
|
||||
SNIB=${SNIB:-sunxi-nand-image-builder}
|
||||
TOOLS=( ${FEL} ${FASTBOOT} ${MKIMAGE} ${SNIB})
|
||||
SPLMEMADDR=0x43000000
|
||||
UBOOTMEMADDR=0x4a000000
|
||||
UBOOTSCRMEMADDR=0x43100000
|
||||
nand_erasesize=400000
|
||||
nand_writesize=4000
|
||||
nand_oobsize=680
|
||||
|
||||
if [[ -z ${CHECK_DEPS} ]]; then
|
||||
|
||||
for TOOL in ${TOOLS[@]}; do
|
||||
if [[ -z $(which $TOOL) ]]; then
|
||||
echo " Error: Unable to locate $TOOL utility."
|
||||
echo " Install $TOOL with:"
|
||||
echo " CHIP-SDK setup script [github.com/NextThingCo/CHIP-SDK]"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------
|
||||
onMac() {
|
||||
if [ "$(uname)" == "Darwin" ]; then
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
fi
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
filesize() {
|
||||
if onMac; then
|
||||
stat -f "%z" $1
|
||||
else
|
||||
stat --printf="%s" $1
|
||||
fi
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
wait_for_fastboot() {
|
||||
if [[ -v DONT_WAIT_FOR_STATE ]]; then return 0; fi
|
||||
|
||||
echo -n "waiting for fastboot...";
|
||||
export FLASH_WAITING_FOR_DEVICE=1
|
||||
for ((i=$TIMEOUT; i>0; i--)) {
|
||||
if [[ ! -z "$(${FASTBOOT} -i 0x1f3a $@ devices)" ]]; then
|
||||
echo "OK";
|
||||
unset FLASH_WAITING_FOR_DEVICE
|
||||
return 0;
|
||||
fi
|
||||
echo -n ".";
|
||||
sleep 1
|
||||
}
|
||||
|
||||
echo "TIMEOUT";
|
||||
unset FLASH_WAITING_FOR_DEVICE
|
||||
return 1
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
wait_for_fel() {
|
||||
if [[ -v DONT_WAIT_FOR_STATE ]]; then return 0; fi
|
||||
|
||||
echo -n "waiting for fel...";
|
||||
export FLASH_WAITING_FOR_DEVICE=1
|
||||
for ((i=$TIMEOUT; i>0; i--)) {
|
||||
if ${FEL} $@ ver 2>/dev/null >/dev/null; then
|
||||
echo "OK"
|
||||
unset FLASH_WAITING_FOR_DEVICE
|
||||
return 0;
|
||||
fi
|
||||
echo -n ".";
|
||||
sleep 1
|
||||
}
|
||||
|
||||
echo "TIMEOUT";
|
||||
unset FLASH_WAITING_FOR_DEVICE
|
||||
return 1
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
detect_nand() {
|
||||
|
||||
local tmpdir=`mktemp -d -t chip-uboot-script-XXXXXX`
|
||||
local ubootcmds=$tmpdir/uboot.cmds
|
||||
local ubootscr=$tmpdir/uboot.scr
|
||||
|
||||
echo "nand info
|
||||
env export -t -s 0x100 0x7c00 nand_erasesize nand_writesize nand_oobsize
|
||||
reset" > $ubootcmds
|
||||
${MKIMAGE} -A arm -T script -C none -n "detect NAND" -d $ubootcmds $ubootscr || return 1
|
||||
|
||||
if ! wait_for_fel; then
|
||||
echo "ERROR: please make sure CHIP is connected and jumpered in FEL mode"
|
||||
return 1
|
||||
fi
|
||||
|
||||
$FEL spl $IMAGESDIR/sunxi-spl.bin || return 1
|
||||
# wait for DRAM initialization to complete
|
||||
sleep 1
|
||||
|
||||
$FEL write $UBOOTMEMADDR $IMAGESDIR/u-boot-dtb.bin || return 1
|
||||
$FEL write $UBOOTSCRMEMADDR $ubootscr || return 1
|
||||
$FEL exe $UBOOTMEMADDR || return 1
|
||||
|
||||
if ! wait_for_fel; then
|
||||
echo "ERROR: please make sure CHIP is connected and jumpered in FEL mode"
|
||||
return 1
|
||||
fi
|
||||
|
||||
$FEL read 0x7c00 0x100 $tmpdir/nand-info || return 1
|
||||
|
||||
echo "NAND detected:"
|
||||
cat $tmpdir/nand-info || return 1
|
||||
UBI_TYPE="$(cat $tmpdir/nand-info | awk -F= '/erase/ {print $2}')-$(cat $tmpdir/nand-info | awk -F= '/write/ {print $2}')-$(cat $tmpdir/nand-info | awk -F= '/oob/ {print $2}')"
|
||||
echo "${UBI_TYPE}" > $IMAGESDIR/ubi_type || return 1
|
||||
source $tmpdir/nand-info || return 1
|
||||
|
||||
rm -rf $tmpdir
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
flash_images() {
|
||||
local RC=0
|
||||
|
||||
local tmpdir=`mktemp -d -t chip-uboot-script-XXXXXX`
|
||||
local ubootcmds=$tmpdir/uboot.cmds
|
||||
local ubootscr=$IMAGESDIR/uboot.scr
|
||||
local ubootsize=`filesize $IMAGESDIR/uboot-$nand_erasesize.bin | xargs printf "0x%08x"`
|
||||
local pagespereb=`echo $((nand_erasesize/nand_writesize)) | xargs printf "%x"`
|
||||
local sparseubi=$tmpdir/ubi.sparse
|
||||
|
||||
if [ "x$ERASEMODE" = "xscrub" ]; then
|
||||
echo "nand scrub.chip -y" > $ubootcmds
|
||||
else
|
||||
echo "nand erase.chip" > $ubootcmds
|
||||
fi
|
||||
|
||||
if [ "$nand_oobsize" = "100" ];then
|
||||
DTB_NAME="ntc-gr8-crumb.dtb"
|
||||
else
|
||||
DTB_NAME="sun5i-r8-chip.dtb"
|
||||
fi
|
||||
|
||||
echo "nand write.raw.noverify $SPLMEMADDR 0x0 $pagespereb" >> $ubootcmds
|
||||
echo "nand write.raw.noverify $SPLMEMADDR 0x400000 $pagespereb" >> $ubootcmds
|
||||
echo "nand write $UBOOTMEMADDR 0x800000 $ubootsize" >> $ubootcmds
|
||||
echo "setenv mtdparts mtdparts=sunxi-nand.0:4m(spl),4m(spl-backup),4m(uboot),4m(env),-(UBI)" >> $ubootcmds
|
||||
echo "setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw earlyprintk ubi.mtd=4" >> $ubootcmds
|
||||
echo "setenv bootcmd 'gpio set PB2; if test -n \${fel_booted} && test -n \${scriptaddr}; then echo '(FEL boot)'; source \${scriptaddr}; fi; mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/$DTB_NAME; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r'" >> $ubootcmds
|
||||
echo "setenv fel_booted 0" >> $ubootcmds
|
||||
|
||||
echo "echo Enabling Splash" >> $ubootcmds
|
||||
echo "setenv stdout serial" >> $ubootcmds
|
||||
echo "setenv stderr serial" >> $ubootcmds
|
||||
echo "setenv splashpos m,m" >> $ubootcmds
|
||||
|
||||
echo "echo Configuring Video Mode" >> $ubootcmds
|
||||
if [ "$FLAVOR" = "pocketchip" ]; then
|
||||
|
||||
echo "setenv clear_fastboot 'i2c mw 0x34 0x4 0x00 4;'" >> $ubootcmds
|
||||
echo "setenv write_fastboot 'i2c mw 0x34 0x4 66 1; i2c mw 0x34 0x5 62 1; i2c mw 0x34 0x6 30 1; i2c mw 0x34 0x7 00 1'" >> $ubootcmds
|
||||
echo "setenv test_fastboot 'i2c read 0x34 0x4 4 0x80200000; if itest.s *0x80200000 -eq fb0; then echo (Fastboot); i2c mw 0x34 0x4 0x00 4; fastboot 0; fi'" >> $ubootcmds
|
||||
|
||||
echo "setenv bootargs root=ubi0:rootfs rootfstype=ubifs rw ubi.mtd=4 quiet lpj=501248 loglevel=3 splash plymouth.ignore-serial-consoles" >> $ubootcmds
|
||||
echo "setenv bootpaths 'initrd noinitrd'" >> $ubootcmds
|
||||
echo "setenv bootcmd '${NO_LIMIT}run test_fastboot; if test -n \${fel_booted} && test -n \${scriptaddr}; then echo (FEL boot); source \${scriptaddr}; fi; for path in \${bootpaths}; do run boot_\$path; done'" >> $ubootcmds
|
||||
echo "setenv boot_initrd 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/$DTB_NAME; ubifsload 0x44000000 /boot/initrd.uimage; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r 0x44000000 \$fdt_addr_r'" >> $ubootcmds
|
||||
echo "setenv boot_noinitrd 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/$DTB_NAME; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r'" >> $ubootcmds
|
||||
echo "setenv video-mode" >> $ubootcmds
|
||||
echo "setenv dip_addr_r 0x43400000" >> $ubootcmds
|
||||
echo "setenv dip_overlay_dir /lib/firmware/nextthingco/chip/early" >> $ubootcmds
|
||||
echo "setenv dip_overlay_cmd 'if test -n \"\${dip_overlay_name}\"; then ubifsload \$dip_addr_r \$dip_overlay_dir/\$dip_overlay_name; fi'" >> $ubootcmds
|
||||
echo "setenv fel_booted 0" >> $ubootcmds
|
||||
echo "setenv bootdelay 1" >> $ubootcmds
|
||||
else
|
||||
|
||||
echo "setenv bootpaths 'initrd noinitrd'" >> $ubootcmds
|
||||
echo "setenv bootcmd '${NO_LIMIT}run test_fastboot; if test -n \${fel_booted} && test -n \${scriptaddr}; then echo (FEL boot); source \${scriptaddr}; fi; for path in \${bootpaths}; do run boot_\$path; done'" >> $ubootcmds
|
||||
echo "setenv boot_initrd 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/$DTB_NAME; ubifsload 0x44000000 /boot/initrd.uimage; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r 0x44000000 \$fdt_addr_r'" >> $ubootcmds
|
||||
echo "setenv boot_noinitrd 'mtdparts; ubi part UBI; ubifsmount ubi0:rootfs; ubifsload \$fdt_addr_r /boot/$DTB_NAME; ubifsload \$kernel_addr_r /boot/zImage; bootz \$kernel_addr_r - \$fdt_addr_r'" >> $ubootcmds
|
||||
echo "setenv dip_addr_r 0x43400000" >> $ubootcmds
|
||||
echo "setenv dip_overlay_dir /lib/firmware/nextthingco/chip/early" >> $ubootcmds
|
||||
echo "setenv dip_overlay_cmd 'if test -n \"\${dip_overlay_name}\"; then ubifsload \$dip_addr_r \$dip_overlay_dir/\$dip_overlay_name; fi'" >> $ubootcmds
|
||||
|
||||
echo "setenv video-mode sunxi:640x480-24@60,monitor=composite-ntsc,overscan_x=40,overscan_y=20" >> $ubootcmds
|
||||
fi
|
||||
|
||||
echo "saveenv" >> $ubootcmds
|
||||
|
||||
echo "echo going to fastboot mode" >> $ubootcmds
|
||||
echo "fastboot 0" >> $ubootcmds
|
||||
|
||||
if [ -z $RESET_COMMAND ]; then
|
||||
RESET_COMMAND="while true; do; sleep 10; done;"
|
||||
fi
|
||||
|
||||
echo "$RESET_COMMAND" >> $ubootcmds
|
||||
|
||||
${MKIMAGE} -A arm -T script -C none -n "flash $FLAVOR" -d $ubootcmds $ubootscr || RC=1
|
||||
|
||||
export FLASH_VID_PID=1f3aefe8
|
||||
if ! wait_for_fel; then
|
||||
echo "ERROR: please make sure CHIP is connected and jumpered in FEL mode"
|
||||
RC=1
|
||||
fi
|
||||
|
||||
$FEL spl $IMAGESDIR/sunxi-spl.bin || RC=1
|
||||
# wait for DRAM initialization to complete
|
||||
sleep 1
|
||||
|
||||
$FEL write $UBOOTMEMADDR $IMAGESDIR/uboot-$nand_erasesize.bin || RC=1
|
||||
$FEL write $SPLMEMADDR $IMAGESDIR/spl-$nand_erasesize-$nand_writesize-$nand_oobsize.bin || RC=1
|
||||
$FEL write $UBOOTSCRMEMADDR $ubootscr || RC=1
|
||||
$FEL exe $UBOOTMEMADDR || RC=1
|
||||
|
||||
export FLASH_VID_PID=1f3a1010
|
||||
if wait_for_fastboot; then
|
||||
${FASTBOOT} -i 0x1f3a -u flash UBI $IMAGESDIR/chip-$nand_erasesize-$nand_writesize-$nand_oobsize.ubi.sparse || RC=1
|
||||
${FASTBOOT} -i 0x1f3a continue > /dev/null
|
||||
else
|
||||
echo "failed to flash the UBI image"
|
||||
RC=1
|
||||
fi
|
||||
|
||||
rm -rf $tmpdir
|
||||
|
||||
return $RC
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
wait_for_linuxboot() {
|
||||
local TIMEOUT=100
|
||||
echo -n "flashing...";
|
||||
for ((i=$TIMEOUT; i>0; i--)) {
|
||||
if lsusb |grep -q "0525:a4a7" ||
|
||||
lsusb |grep -q "0525:a4aa"; then
|
||||
echo "OK"
|
||||
return 0;
|
||||
fi
|
||||
echo -n ".";
|
||||
sleep 3
|
||||
}
|
||||
|
||||
echo "TIMEOUT";
|
||||
return 1
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
ready_to_roll() {
|
||||
|
||||
echo -e "\n\nFLASH VERIFICATION COMPLETE.\n\n"
|
||||
|
||||
echo " # # #"
|
||||
echo " #########"
|
||||
echo "### ###"
|
||||
echo " # {#} #"
|
||||
echo "### '%######"
|
||||
echo " # #"
|
||||
echo "### ###"
|
||||
echo " ########"
|
||||
echo " # # #"
|
||||
|
||||
echo -e "\n\nCHIP is ready to roll!\n\n"
|
||||
|
||||
return 0
|
||||
}
|
55
verify.sh
Executable file
55
verify.sh
Executable file
@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
SCRIPT_NAME="$(basename $0)"
|
||||
CHAT_SCRIPT="${SCRIPT_DIR}/${SCRIPT_NAME}.chat"
|
||||
CHAT_BIN="$(which chat)"
|
||||
CHAT_BIN="${CHAT_BIN:-/usr/sbin/chat}"
|
||||
|
||||
|
||||
UART_DEVICE=ttyACM0
|
||||
GETTY_UART_SERVICE="serial-getty@${UART_DEVICE}.service"
|
||||
GETTY_DISABLED=0
|
||||
|
||||
export TIMEOUT=3
|
||||
|
||||
#echo "DUT_UART_RUN=$DUT_UART_RUN"
|
||||
|
||||
while getopts "t:" opt; do
|
||||
case $opt in
|
||||
t)
|
||||
TIMEOUT="${OPTARG}"
|
||||
echo "timeout set to ${TIMEOUT}"
|
||||
;;
|
||||
\?)
|
||||
echo "Invalid option: -$OPTARG" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
export DUT_UART_PARAMETER="$@"
|
||||
|
||||
|
||||
if [[ "$(systemctl is-active $GETTY_UART_SERVICE)" == "active" ]]; then
|
||||
echo "stopping $GETTY_UART_SERVICE"
|
||||
systemctl stop $GETTY_UART_SERVICE
|
||||
GETTY_DISABLED=1
|
||||
fi
|
||||
|
||||
[[ -r "${CHAT_SCRIPT}" ]] || (echo "ERROR: can not read ${CHAT_SCRIPT}" && exit 1)
|
||||
[[ -r "${CHAT_BIN}" ]] || (echo -e "ERROR: ${CHAT_BIN} not found\n -- 'sudo apt-get install ppp'" && exit 1)
|
||||
|
||||
for i in `seq 1 3`;
|
||||
do
|
||||
echo -e "Waiting for serial gadget...Attempt(${i}/3)"
|
||||
/usr/sbin/chat -t $TIMEOUT -E -V -f "${CHAT_SCRIPT}" </dev/${UART_DEVICE} >/dev/${UART_DEVICE}\
|
||||
&& break\
|
||||
|| (echo -e "ERROR: failed to verify\n" && exit 1)
|
||||
done
|
||||
echo "SUCCESS: CHIP is powering down"
|
||||
|
||||
if [[ ${GETTY_DISABLED} == 1 ]]; then
|
||||
echo "starting $GETTY_UART_SERVICE"
|
||||
systemctl start $GETTY_UART_SERVICE
|
||||
fi
|
8
verify.sh.chat
Normal file
8
verify.sh.chat
Normal file
@ -0,0 +1,8 @@
|
||||
SAY "\n [ACM] Trying to login..."
|
||||
TIMEOUT 40
|
||||
'' \n ogin:-\n-login: root\n assword: chip\n '# ' ''
|
||||
SAY "\n [ACM] Successfully logged in"
|
||||
TIMEOUT 40
|
||||
'# ' '/sbin/poweroff'
|
||||
SAY "\n [ACM] Powering off..."
|
||||
TIMEOUT 40
|
Reference in New Issue
Block a user