141 lines
3.5 KiB
Bash
Executable File
141 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
haveSerial=false
|
|
shouldWipe=false
|
|
serial=""
|
|
used_serial=""
|
|
forbidden_serials="b06474cb"
|
|
|
|
function usage {
|
|
echo -e "Usage: $(basename $0) [OPTIONS] [FILES]"
|
|
echo -e " Flash Android images"
|
|
echo -e ""
|
|
echo -e "Available options:"
|
|
echo -e " -s Specify the serial number of the device to flash"
|
|
echo -e " If not provided, only one device should be connected in fastboot mode or in adb mode"
|
|
echo -e " -w Wipe cache and data partition after flashing"
|
|
echo -e ""
|
|
echo -e "FILES is a list of file in .img separated by space"
|
|
echo -e "If no FILES provied all the .img in the current directory will be flashed"
|
|
echo -e "e.g. $(basename $0) -s 132456789 out/target/device/boot.img out/target/device/system.img"
|
|
}
|
|
|
|
function check_forbidden_serial {
|
|
if [[ $forbidden_serials =~ $1 ]]; then
|
|
echo "Error: You should not flash this device !"
|
|
echo " Goodbye!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_fastboot_serial {
|
|
serials=$(fastboot devices | grep "fastboot" | awk '{print $1}')
|
|
nb_device=$(fastboot devices | grep "fastboot" | wc -l)
|
|
if $haveSerial; then
|
|
if [[ ! $serials =~ $serial ]]; then
|
|
echo "Cannot find provided serial $serial: Expecting the device to be rebooting in fastboot mode "
|
|
fi
|
|
used_serial=$serial
|
|
else
|
|
if [[ $nb_device != 1 ]]; then
|
|
echo "Error: Too much or no device connected!"
|
|
echo " Provide a serial number with -s option or disconnect a device"
|
|
exit 1
|
|
fi
|
|
used_serial=$serials
|
|
fi
|
|
check_forbidden_serial $used_serial
|
|
}
|
|
|
|
function reboot_and_wait_for_device {
|
|
check_forbidden_serial $1
|
|
adb -s $1 reboot bootloader;
|
|
fastboot devices | grep $1 >/dev/null 2>&1
|
|
while [ $? == 1 ]; do
|
|
sleep 1;
|
|
echo "Waiting for $1 in fastboot mode..."
|
|
fastboot devices | grep $1 >/dev/null 2>&1
|
|
done
|
|
}
|
|
|
|
function check_presence {
|
|
if $haveSerial ; then
|
|
fastboot devices | grep $serial >/dev/null 2>&1
|
|
if [[ $? == 1 ]] ; then
|
|
adb devices | grep $serial >/dev/null 2>&1
|
|
if [[ $? == 0 ]] ; then
|
|
reboot_and_wait_for_device $serial
|
|
else
|
|
echo "Error: Cannot found device $serial"
|
|
exit 1;
|
|
fi
|
|
fi
|
|
else
|
|
nb_dev=$(fastboot devices | grep "fastboot" | wc -l)
|
|
if [[ $nb_dev == 0 ]]; then
|
|
nb_dev=$(adb devices | grep "\<device\>"| wc -l )
|
|
if [[ $nb_dev == 0 ]]; then
|
|
echo "Error: Cannot found any device in fastboot or adb mode"
|
|
exit 1;
|
|
elif [[ $nb_dev == 1 ]]; then
|
|
dev=$(adb devices | grep "\<device\>" | awk '{print $1}')
|
|
echo "Reboot device $dev in fastboot mode"
|
|
serial=$dev
|
|
haveSerial=true
|
|
reboot_and_wait_for_device $serial
|
|
else
|
|
echo "Too much adb devices connected. Select one with -s or disconnect a device or reboot one in fastboot mode"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
while getopts ":s:w" opt; do
|
|
case $opt in
|
|
s) echo "Using Serial $OPTARG"
|
|
serial=$OPTARG
|
|
haveSerial=true
|
|
;;
|
|
w)
|
|
shouldWipe=true
|
|
;;
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $(( OPTIND - 1 ))
|
|
|
|
if $haveSerial ; then
|
|
check_forbidden_serial $serial
|
|
fi
|
|
|
|
if [ $# -eq 0 ];
|
|
then
|
|
imgList=$(ls *.img 2>/dev/null)
|
|
else
|
|
imgList=$@
|
|
fi
|
|
echo "Images to flash: $imgList"
|
|
|
|
|
|
if [ -z "$imgList" ];
|
|
then
|
|
echo "No img to Flash"
|
|
exit 1
|
|
else
|
|
check_presence
|
|
check_fastboot_serial
|
|
echo "Flashing images"
|
|
for img in $imgList; do
|
|
imageName=$(basename $img)
|
|
imageName=${imageName%.img}
|
|
fastboot -s $used_serial -S 256M flash ${imageName} $img;
|
|
if $shouldWipe; then
|
|
fastboot -s $used_serial -w
|
|
fi
|
|
done && fastboot reboot
|
|
fi
|