diff --git a/flash/Android.mk b/flash/Android.mk index f6e471191cc671cb350d61867d5a188c6dc0b91d..5d28d241222918880b299dd0b932a1535eacee54 100644 --- a/flash/Android.mk +++ b/flash/Android.mk @@ -19,6 +19,7 @@ INSTALLED_HLOS_IMAGES_TARGET := $(addprefix $(PRODUCT_OUT)/,$(HLOS_IMAGES_TARGET INCLUDE_IN_IMG_PACKAGE += $(INSTALLED_HLOS_IMAGES_TARGET) ifneq (,$(wildcard $(LOCAL_PATH)/$(TARGET_DEVICE)/flash_$(TARGET_DEVICE)_factory.sh)) +INCLUDE_IN_IMG_PACKAGE += $(LOCAL_PATH)/factory.common INCLUDE_IN_IMG_PACKAGE += $(LOCAL_PATH)/$(TARGET_DEVICE)/flash_$(TARGET_DEVICE)_factory.sh INCLUDE_IN_IMG_PACKAGE += $(LOCAL_PATH)/fastboot/bin-msys INCLUDE_IN_IMG_PACKAGE += $(LOCAL_PATH)/fastboot/bin-linux-x86 diff --git a/flash/FP3/flash_FP3_factory.sh b/flash/FP3/flash_FP3_factory.sh index 71c9b995137f9a9ab21237ae5a9840a83daac31f..355b3f0c3435015b530ec13d99455f0ec91d3950 100755 --- a/flash/FP3/flash_FP3_factory.sh +++ b/flash/FP3/flash_FP3_factory.sh @@ -1,221 +1,19 @@ #!/usr/bin/env bash -########## -# This script is created and maintained by -# Bharath(@teamb58).org -# Feel free to connect for any queries or suggestions. -########## - -########## -# This script flashes a software release and complete wipes the device. -# -# The script wipes both user data and the Google factory reset protection -# information. It will unlock the phone, delete the data, and re-lock it. -########## - -set -e -set -u - -CLEAN_FLASH="true" # Control data wipe behavior. Default is "true". - # Target device info PRODUCT="Fairphone 3" PRODUCT_ID="FP3" -# Paths/files -ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -IMAGES_DIR="${ROOT_DIR}" - -# Abort the script (and wait for a key to be pressed). -abort_now() { - echo "" - read -rp "ERROR: Aborting now (press Enter to terminate)." a - exit 1 -} - -# Check for connected phone -find_device() { - echo "INFO: Looking for connected device(s)..." - DEVICE_FOUND="false" - while [ ${DEVICE_FOUND} = "false" ] - do - serial_numbers= - - for sn in $("${FASTBOOT_BIN}" devices | grep fastboot | grep -oE '^[[:alnum:]]+') - do - # Checking the product ID - PRODUCT_STRING=$("${FASTBOOT_BIN}" -s "${sn}" getvar product 2>&1) - # Add serial, if product matches - if [[ ${PRODUCT_STRING} == *"${PRODUCT_ID}"* ]] || [[ ${PRODUCT_STRING} == *"${PRODUCT_ID_OLD}"* ]] - then - serial_numbers="${serial_numbers} $sn" - fi - done - - case $(echo "${serial_numbers}" | wc -w | grep -oE '[0-9]+') in - 0) - echo "" - echo "WARNING: No ${PRODUCT} found in fastboot mode." - echo "WARNING: Make sure that a ${PRODUCT} is connected." - ;; - 1) - echo "INFO: One ${PRODUCT} in fastboot mode found (serial number: ${sn})." - - DEVICE_FOUND="true" - break - ;; - *) - echo "" - echo "WARNING: Several ${PRODUCT}'s in fastboot mode connected." - echo "WARNING: Please connect only one ${PRODUCT}." - ;; - esac - - echo "" - while true - do - read -rp "Do you want to look for a ${PRODUCT} again? [(Y)es/(n)o]: " a - if [ -z "${a}" ] || [ "${a}" = 'y' ] || [ "${a}" = 'Y' ] - then - break - elif [ "${a}" = 'n' ] || [ "${a}" = 'N' ] - then - exit 0 - fi - done - done -} - -# Flash (or manipulate) relevant partitions -flash_device() { - - flash_image_ab_or_abort "${sn}" modem "${IMAGES_DIR}/modem.img" - flash_image_ab_or_abort "${sn}" sbl1 "${IMAGES_DIR}/sbl1.img" - flash_image_ab_or_abort "${sn}" rpm "${IMAGES_DIR}/rpm.img" - flash_image_ab_or_abort "${sn}" tz "${IMAGES_DIR}/tz.img" - flash_image_ab_or_abort "${sn}" devcfg "${IMAGES_DIR}/devcfg.img" - flash_image_ab_or_abort "${sn}" dsp "${IMAGES_DIR}/dsp.img" - flash_image_ab_or_abort "${sn}" aboot "${IMAGES_DIR}/aboot.img" - - flash_image_ab_or_abort "${sn}" boot "${IMAGES_DIR}/boot.img" - flash_image_ab_or_abort "${sn}" dtbo "${IMAGES_DIR}/dtbo.img" - flash_image_ab_or_abort "${sn}" system "${IMAGES_DIR}/system.img" - flash_image_ab_or_abort "${sn}" vbmeta "${IMAGES_DIR}/vbmeta.img" - flash_image_ab_or_abort "${sn}" vendor "${IMAGES_DIR}/vendor.img" - flash_image_ab_or_abort "${sn}" mdtp "${IMAGES_DIR}/mdtp.img" - flash_image_ab_or_abort "${sn}" lksecapp "${IMAGES_DIR}/lksecapp.img" - flash_image_ab_or_abort "${sn}" cmnlib "${IMAGES_DIR}/cmnlib.img" - flash_image_ab_or_abort "${sn}" cmnlib64 "${IMAGES_DIR}/cmnlib64.img" - flash_image_ab_or_abort "${sn}" keymaster "${IMAGES_DIR}/keymaster.img" - - - if [ "${CLEAN_FLASH}" = "true" ] - then - flash_image_or_abort "${sn}" userdata "${IMAGES_DIR}/userdata.img" - fi - - "$FASTBOOT_BIN" -s "${sn}" --set-active=a - - echo "INFO: Locking bootloader" - "${FASTBOOT_BIN}" -s "${sn}" oem lock - echo - echo "****** READ CAREFULLY ******" - echo "" - echo "INFO: The device is waiting for you to lock the bootloader." - echo " You can do so on the device itself. Use the volume buttons" - echo " to choose the correct option, then the power button to select." - echo " The device will then reboot." - read -rp " Press any key to close this script." a - exit 0 - -} - -# Flash an image to a partition. Abort on failure. -# Arguments: -flash_image_or_abort() { - local retval=0 - "$FASTBOOT_BIN" -s "${1}" flash "${2}" "${3}" || retval=$? - - if [ "${retval}" -ne 0 ] - then - echo "" - echo "ERROR: Could not flash the ${2} partition on device ${1}." - echo "" - echo "ERROR: Please unplug the phone, take the battery out, boot the device into" - echo "ERROR: fastboot mode, and start this script again." - echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" - echo "ERROR: (cable until the fastboot menu appears.)" - abort_now - fi -} - -# Flash an image to both A and B slot of partition. Abort on failure. -# Arguments: -flash_image_ab_or_abort() { - flash_image_or_abort "${1}" "${2}_a" "${3}" - flash_image_or_abort "${1}" "${2}_b" "${3}" -} - -# Operating system checks and variable definition -os_checks() { - case "$(uname -s 2> /dev/null)" in - Linux|GNU/Linux) - echo "INFO: You are using a Linux distribution." - FASTBOOT_BIN="${ROOT_DIR}/bin-linux-x86/fastboot" - ;; - msys|MINGW*) - echo "INFO: You are using MinGW on Windows" - FASTBOOT_BIN="${ROOT_DIR}/bin-msys/fastboot.exe" - ;; - *) - echo "ERROR: Unsupported operating system (${OSTYPE})." - echo "ERROR: Only GNU/Linux, and MinGW on Windows are currently supported." - abort_now - ;; - esac -} - -# Warn about data wipe, and ask for confirmation -data_wipe_check() { - if [ "${CLEAN_FLASH}" = "true" ] - then - echo "" - echo "WARNING: Flashing this image wipes all user data and settings on the phone." - echo " Are you sure you want to wipe data and continue?" - echo "" - # Read user's input - read -rp " Type \"Yes\" (case sensitive) and press enter to wipe data and continue. Else, just press enter: " a - echo "" - if [ "_${a:-"No"}" != '_Yes' ] - # NOTE: $a is being set by the read command above, - # so the check for a to be set is mostly redundant - then - echo "WARNING: You DID NOT type \"Yes\", proceeding without data wipe." - echo "" - CLEAN_FLASH="false" - else - echo "WARNING: You typed \"Yes\", proceeding with data wipe." - CLEAN_FLASH="true" - fi - fi -} - -echo "" -echo "*** ${PRODUCT} flashing script ***" -echo "" -echo "INFO: The procedure will start soon. Please wait..." -echo "Note that this will detect and flash only on FP3 or FP3+ devices." -sleep 2 - -# Begin with some OS checks and variable definition -os_checks +# Target Flashing Images info +FLASH_AB_FW_IMGS="modem sbl1 rpm tz devcfg dsp aboot mdtp lksecapp cmnlib cmnlib64 keymaster" +FLASH_AB_IMGS="boot dtbo system vbmeta vendor" +FLASH_A_IMGS="userdata" -# Call function to look for device(s) -# If only one device is found $sn will store its serial number -find_device +# Target flash process behavior +CLEAN_FLASH=true +VIRTUAL_AB=true -# Call function to look for data wipe check -data_wipe_check +source factory.common -# Flash the device -flash_device +# Common flashing function +flash_factory diff --git a/flash/FP4/flash_FP4_factory.sh b/flash/FP4/flash_FP4_factory.sh index fa35ef46f4929880ad02c2778040085732d591e6..0ec7e37c435a0434704095b9c69918c22ab513a7 100755 --- a/flash/FP4/flash_FP4_factory.sh +++ b/flash/FP4/flash_FP4_factory.sh @@ -1,195 +1,20 @@ #!/usr/bin/env bash -########## -# This script is created and maintained by -# Bharath(@teamb58).org -# Feel free to connect for any queries or suggestions. -########## - -########## -# This script flashes a software release and complete wipes the device. -# -########## - -set -e -set -u - # Target device info PRODUCT="Fairphone 4" PRODUCT_ID="FP4" -# Paths/files -ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -IMAGES_DIR="${ROOT_DIR}" - -# Abort the script (and wait for a key to be pressed). -abort_now() { - echo "" - read -rp "ERROR: Aborting now (press Enter to terminate)." a - exit 1 -} - -# Check for connected phone -find_device() { - echo "INFO: Looking for connected device(s)..." - DEVICE_FOUND="false" - while [ ${DEVICE_FOUND} = "false" ] - do - serial_numbers= - - for sn in $("${FASTBOOT_BIN}" devices | grep fastboot | grep -oE '^[[:alnum:]]+') - do - # Checking the product ID - PRODUCT_STRING=$("${FASTBOOT_BIN}" -s "${sn}" getvar product 2>&1) - # Add serial, if product matches - if [[ ${PRODUCT_STRING} == *"${PRODUCT_ID}"* ]] || [[ ${PRODUCT_STRING} == *"${PRODUCT_ID_OLD}"* ]] - then - serial_numbers="${serial_numbers} $sn" - fi - done - - case $(echo "${serial_numbers}" | wc -w | grep -oE '[0-9]+') in - 0) - echo "" - echo "WARNING: No ${PRODUCT} found in fastboot mode." - echo "WARNING: Make sure that a ${PRODUCT} is connected." - ;; - 1) - echo "INFO: One ${PRODUCT} in fastboot mode found (serial number: ${sn})." - - DEVICE_FOUND="true" - break - ;; - *) - echo "" - echo "WARNING: Several ${PRODUCT}'s in fastboot mode connected." - echo "WARNING: Please connect only one ${PRODUCT}." - ;; - esac - - echo "" - while true - do - read -rp "Do you want to look for a ${PRODUCT} again? [(Y)es/(n)o]: " a - if [ -z "${a}" ] || [ "${a}" = 'y' ] || [ "${a}" = 'Y' ] - then - break - elif [ "${a}" = 'n' ] || [ "${a}" = 'N' ] - then - exit 0 - fi - done - done -} - -# Flash (or manipulate) relevant partitions -flash_device() { - - flash_image_ab_or_abort "${sn}" bluetooth "${IMAGES_DIR}/bluetooth.img" - flash_image_ab_or_abort "${sn}" devcfg "${IMAGES_DIR}/devcfg.img" - flash_image_ab_or_abort "${sn}" dsp "${IMAGES_DIR}/dsp.img" - flash_image_ab_or_abort "${sn}" modem "${IMAGES_DIR}/modem.img" - flash_image_ab_or_abort "${sn}" xbl "${IMAGES_DIR}/xbl.img" - flash_image_ab_or_abort "${sn}" tz "${IMAGES_DIR}/tz.img" - flash_image_ab_or_abort "${sn}" hyp "${IMAGES_DIR}/hyp.img" - flash_image_ab_or_abort "${sn}" keymaster "${IMAGES_DIR}/keymaster.img" - - flash_image_ab_or_abort "${sn}" abl "${IMAGES_DIR}/abl.img" - flash_image_ab_or_abort "${sn}" boot "${IMAGES_DIR}/boot.img" - flash_image_ab_or_abort "${sn}" recovery "${IMAGES_DIR}/recovery.img" - flash_image_ab_or_abort "${sn}" dtbo "${IMAGES_DIR}/dtbo.img" - flash_image_ab_or_abort "${sn}" vbmeta_system "${IMAGES_DIR}/vbmeta_system.img" - flash_image_ab_or_abort "${sn}" vbmeta "${IMAGES_DIR}/vbmeta.img" - flash_image_or_abort "${sn}" super "${IMAGES_DIR}/super.img" - - flash_image_ab_or_abort "${sn}" aop "${IMAGES_DIR}/aop.img" - flash_image_ab_or_abort "${sn}" featenabler "${IMAGES_DIR}/featenabler.img" - flash_image_ab_or_abort "${sn}" imagefv "${IMAGES_DIR}/imagefv.img" - flash_image_ab_or_abort "${sn}" multiimgoem "${IMAGES_DIR}/multiimgoem.img" - flash_image_ab_or_abort "${sn}" qupfw "${IMAGES_DIR}/qupfw.img" - flash_image_ab_or_abort "${sn}" uefisecapp "${IMAGES_DIR}/uefisecapp.img" - flash_image_ab_or_abort "${sn}" xbl_config "${IMAGES_DIR}/xbl_config.img" - flash_image_ab_or_abort "${sn}" core_nhlos "${IMAGES_DIR}/core_nhlos.img" - - "$FASTBOOT_BIN" -s "${sn}" erase userdata - "$FASTBOOT_BIN" -s "${sn}" erase metadata - - "$FASTBOOT_BIN" -s "${sn}" --set-active=a - -} - -# Flash an image to a partition. Abort on failure. -# Arguments: -flash_image_or_abort() { - local retval=0 - "$FASTBOOT_BIN" -s "${1}" flash "${2}" "${3}" || retval=$? - - if [ "${retval}" -ne 0 ] - then - echo "" - echo "ERROR: Could not flash the ${2} partition on device ${1}." - echo "" - echo "ERROR: Please unplug the phone, take the battery out, boot the device into" - echo "ERROR: fastboot mode, and start this script again." - echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" - echo "ERROR: (cable until the fastboot menu appears.)" - abort_now - fi -} - -# Flash an image to both A and B slot of partition. Abort on failure. -# Arguments: -flash_image_ab_or_abort() { - flash_image_or_abort "${1}" "${2}_a" "${3}" - flash_image_or_abort "${1}" "${2}_b" "${3}" -} - -# Operating system checks and variable definition -os_checks() { - case "$(uname -s 2> /dev/null)" in - Linux|GNU/Linux) - echo "INFO: You are using a Linux distribution." - FASTBOOT_BIN="${ROOT_DIR}/bin-linux-x86/fastboot" - ;; - msys|MINGW*) - echo "INFO: You are using MinGW on Windows" - FASTBOOT_BIN="${ROOT_DIR}/bin-msys/fastboot.exe" - ;; - *) - echo "ERROR: Unsupported operating system (${OSTYPE})." - echo "ERROR: Only GNU/Linux, and MinGW on Windows are currently supported." - abort_now - ;; - esac -} - -# Control the reboot sequence -reboot_device() { - echo "-----------" - echo "" - echo "INFO: Done. The device will reboot now." - "${FASTBOOT_BIN}" -s "${sn}" reboot - echo "" - echo "INFO: You can unplug the USB cable now." - echo "" -} - -echo "" -echo "*** ${PRODUCT} flashing script ***" -echo "" -echo "INFO: The procedure will start soon. Please wait..." -echo "Note that this will detect and flash only on FP4 device." -sleep 2 - -# Begin with some OS checks and variable definition -os_checks +# Target Flashing Images info +FLASH_AB_FW_IMGS="bluetooth devcfg dsp modem xbl tz hyp keymaster abl aop featenabler imagefv multiimgoem qupfw uefisecapp xbl_config core_nhlos" +FLASH_AB_IMGS="boot dtbo recovery vbmeta vbmeta_system" +FLASH_A_IMGS="super" +ERASE_IMGS="userdata metadata" -# Call function to look for device(s) -# If only one device is found $sn will store its serial number -find_device +# Target flash process behavior +CLEAN_FLASH=true +VIRTUAL_AB=true -# Flash the device -flash_device +source factory.common -# Reboot device -reboot_device +# Common flashing function +flash_factory diff --git a/flash/GS290/flash_GS290_factory.sh b/flash/GS290/flash_GS290_factory.sh index 9219fdbfd1c9c6d331c10918784ddf9a87d907b8..7d310db16bda810fe30df5f4c3348b16e4aeffce 100644 --- a/flash/GS290/flash_GS290_factory.sh +++ b/flash/GS290/flash_GS290_factory.sh @@ -1,214 +1,18 @@ #!/usr/bin/env bash -########## -# This script is created and maintained by -# Bharath(@teamb58).org -# Feel free to connect for any queries or suggestions. -########## - -########## -# This script flashes a software release and complete wipes the device. -# -########## - -set -e -set -u - -CLEAN_FLASH="true" # Control data wipe behavior. Default is "true". - # Target device info PRODUCT="Gigaset GS290" PRODUCT_ID="k63v2_64_bsp" -# Paths/files -ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -IMAGES_DIR="${ROOT_DIR}" - -# Abort the script (and wait for a key to be pressed). -abort_now() { - echo "" - read -rp "ERROR: Aborting now (press Enter to terminate)." a - exit 1 -} - -# Check for connected phone -find_device() { - echo "INFO: Looking for connected device(s)..." - DEVICE_FOUND="false" - while [ ${DEVICE_FOUND} = "false" ] - do - serial_numbers= - - for sn in $("${FASTBOOT_BIN}" devices | grep fastboot | grep -oE '^[[:alnum:]]+') - do - # Checking the product ID - PRODUCT_STRING=$("${FASTBOOT_BIN}" -s "${sn}" getvar product 2>&1) - # Add serial, if product matches - if [[ ${PRODUCT_STRING} == *"${PRODUCT_ID}"* ]] || [[ ${PRODUCT_STRING} == *"${PRODUCT_ID_OLD}"* ]] - then - serial_numbers="${serial_numbers} $sn" - fi - done - - case $(echo "${serial_numbers}" | wc -w | grep -oE '[0-9]+') in - 0) - echo "" - echo "WARNING: No ${PRODUCT} found in fastboot mode." - echo "WARNING: Make sure that a ${PRODUCT} is connected." - ;; - 1) - echo "INFO: One ${PRODUCT} in fastboot mode found (serial number: ${sn})." - - DEVICE_FOUND="true" - break - ;; - *) - echo "" - echo "WARNING: Several ${PRODUCT}'s in fastboot mode connected." - echo "WARNING: Please connect only one ${PRODUCT}." - ;; - esac - - echo "" - while true - do - read -rp "Do you want to look for a ${PRODUCT} again? [(Y)es/(n)o]: " a - if [ -z "${a}" ] || [ "${a}" = 'y' ] || [ "${a}" = 'Y' ] - then - break - elif [ "${a}" = 'n' ] || [ "${a}" = 'N' ] - then - exit 0 - fi - done - done -} - -# Flash (or manipulate) relevant partitions -flash_device() { - flash_image_or_abort "${sn}" system system.img - flash_image_or_abort "${sn}" vendor vendor.img - flash_image_or_abort "${sn}" boot boot.img - flash_image_or_abort "${sn}" dtbo dtbo.img - flash_image_or_abort "${sn}" recovery recovery.img - flash_image_or_abort "${sn}" logo logo.img - flash_image_or_abort "${sn}" md1dsp md1dsp.img - flash_image_or_abort "${sn}" md1img md1img.img - flash_image_or_abort "${sn}" spmfw spmfw.img - flash_image_or_abort "${sn}" lk lk.img - flash_image_or_abort "${sn}" lk2 lk.img - flash_image_or_abort "${sn}" sspm_1 sspm.img - flash_image_or_abort "${sn}" sspm_2 sspm.img - flash_image_or_abort "${sn}" tee1 trustzone1.bin - flash_image_or_abort "${sn}" tee2 trustzone2.bin - flash_image_or_abort "${sn}" preloader preloader.img - - if [ "${CLEAN_FLASH}" = "true" ] - then - "$FASTBOOT_BIN" -s "${sn}" -w - fi -} - -# Flash an image to a partition. Abort on failure. -# Arguments: -flash_image_or_abort() { - local retval=0 - "$FASTBOOT_BIN" -s "${1}" flash "${2}" "${IMAGES_DIR}"/"${3}" || retval=$? - - if [ "${retval}" -ne 0 ] - then - echo "" - echo "ERROR: Could not flash the ${2} partition on device ${1}." - echo "" - echo "ERROR: Please unplug the phone and boot the device into" - echo "ERROR: fastboot mode, and start this script again." - echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" - echo "ERROR: (cable until the fastboot menu appears.)" - abort_now - fi -} - -# Flash an image to both A and B slot of partition. Abort on failure. -# Arguments: -flash_image_ab_or_abort() { - flash_image_or_abort "${1}" "${2}_a" "${3}" - flash_image_or_abort "${1}" "${2}_b" "${3}" -} - -# Operating system checks and variable definition -os_checks() { - case "$(uname -s 2> /dev/null)" in - Linux|GNU/Linux) - echo "INFO: You are using a Linux distribution." - FASTBOOT_BIN="${ROOT_DIR}/bin-linux-x86/fastboot" - ;; - msys|MINGW*) - echo "INFO: You are using MinGW on Windows" - FASTBOOT_BIN="${ROOT_DIR}/bin-msys/fastboot.exe" - ;; - *) - echo "ERROR: Unsupported operating system (${OSTYPE})." - echo "ERROR: Only GNU/Linux, and MinGW on Windows are currently supported." - abort_now - ;; - esac -} - -# Control the reboot sequence -reboot_device() { - echo "-----------" - echo "" - echo "INFO: Done. The device will reboot now." - "${FASTBOOT_BIN}" -s "${sn}" reboot - echo "" - echo "INFO: You can unplug the USB cable now." - echo "" -} - -# Warn about data wipe, and ask for confirmation -data_wipe_check() { - if [ "${CLEAN_FLASH}" = "true" ] - then - echo "" - echo "WARNING: Flashing this image wipes all user data and settings on the phone." - echo " Are you sure you want to wipe data and continue?" - echo "" - # Read user's input - read -rp " Type \"Yes\" (case sensitive) and press enter to wipe data and continue. Else, just press enter: " a - echo "" - if [ "_${a:-"No"}" != '_Yes' ] - # NOTE: $a is being set by the read command above, - # so the check for a to be set is mostly redundant - then - echo "WARNING: You DID NOT type \"Yes\", proceeding without data wipe." - echo "" - CLEAN_FLASH="false" - else - echo "WARNING: You typed \"Yes\", proceeding with data wipe." - CLEAN_FLASH="true" - fi - fi -} - -echo "" -echo "*** ${PRODUCT} flashing script ***" -echo "" -echo "INFO: The procedure will start soon. Please wait..." -echo "Note that this will detect and flash only on ${PRODUCT} device." -sleep 2 - -# Begin with some OS checks and variable definition -os_checks - -# Call function to look for device(s) -# If only one device is found $sn will store its serial number -find_device +# Target Flashing Images info +FLASH_A_FW_IMGS="logo md1dsp md1img spmfw lk lk2:lk.img sspm_1:sspm.img sspm_2:sspm.img tee1:trustzone1.bin tee2:trustzone2.bin preloader" +FLASH_A_IMGS="boot dtbo recovery system vendor" +FORMAT_IMGS="userdata metadata cache" -# Call function to look for data wipe check -data_wipe_check +# Target flash process behavior +CLEAN_FLASH=true -# Flash the device -flash_device +source factory.common -# Reboot device -reboot_device +# Common flashing function +flash_factory diff --git a/flash/avicii/config.mk b/flash/avicii/config.mk new file mode 100644 index 0000000000000000000000000000000000000000..73837cd47686c8dd40e92a3f203d97438f244acf --- /dev/null +++ b/flash/avicii/config.mk @@ -0,0 +1,10 @@ +HLOS_IMAGES_TARGET := boot.img \ + dtbo.img \ + odm.img \ + product.img \ + recovery.img \ + system.img \ + system_ext.img \ + vbmeta.img \ + vbmeta_system.img \ + vendor.img diff --git a/flash/avicii/flash_avicii_factory.sh b/flash/avicii/flash_avicii_factory.sh new file mode 100644 index 0000000000000000000000000000000000000000..e3f9a38361cb987fcf7b9d2a09a5c4c55aedf59e --- /dev/null +++ b/flash/avicii/flash_avicii_factory.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# Target device info +PRODUCT="OnePlus Nord" +PRODUCT_ID="lito" + +# Target Flashing Images info +FLASH_AB_FW_IMGS="abl aop bluetooth devcfg dsp featenabler hyp imagefv keymaster logo modem qupfw storsec tz uefisecapp xbl_config xbl" +FLASH_AB_IMGS="boot dtbo recovery vbmeta vbmeta_system" +FLASH_A_IMGS="odm product system system_ext vendor" +ERASE_IMGS="userdata metadata" + +# Target flash process behavior +CLEAN_FLASH=true +VIRTUAL_AB=false +USE_FASTBOOTD=true + +# Source common functions +source ./factory.common || { echo "ERROR: Failed to source factory.common"; exit 1; } + +# Common flashing function +flash_factory diff --git a/flash/factory.common b/flash/factory.common new file mode 100755 index 0000000000000000000000000000000000000000..9587ab215d812f161fd3ba2b0051899a71ade980 --- /dev/null +++ b/flash/factory.common @@ -0,0 +1,296 @@ +#!/usr/bin/env bash + +set -e + +# Paths/files +ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +IMAGES_DIR="${ROOT_DIR}" + +# Abort the script (and wait for a key to be pressed). +abort_now() { + echo "" + read -rp "ERROR: Aborting now (press Enter to terminate)." a + exit 1 +} + +# Check if the device is properly unlocked +check_unlock_status() { + local PHONE_IS_READY=true + if ("${FASTBOOT_BIN}" getvar is-userspace 2>&1 | grep -q yes); then + echo "Info: Your phone is in fastbootD mode." + if ("${FASTBOOT_BIN}" getvar unlocked 2>&1 | grep -q no); then + echo "Error: Your device's bootloader is still locked." + echo "Please follow the instructions to unlock the bootloader!" + PHONE_IS_READY=false + fi + else + echo "Info: Your phone is in regular bootloader mode." + if ("${FASTBOOT_BIN}" getvar unlocked 2>&1 | grep -q no); then + echo "Error: Your device's bootloader is still locked." + echo "Please follow the instructions to unlock the bootloader!" + PHONE_IS_READY=false + fi + if ("${FASTBOOT_BIN}" oem device-info 2>&1 | grep -q "critical unlocked: false"); then + echo "Error: Critical partitions are still locked." + echo "Did you execute 'fastboot flashing unlock_critical'?" + PHONE_IS_READY=false + fi + fi + + if [ "$PHONE_IS_READY" = "false" ]; then + echo "Error: Your phone is not ready for flashing yet (see above), aborting..." + exit 1 + fi +} + +# Erase a list of partitions. Abort on failure. +# Arguments: +erase_images_or_abort() { +if [ -n "${2}" ] +then + for PARTITION in $2; + do + local retval=0 + "${FASTBOOT_BIN}" -s "${1}" erase "${PARTITION}" || retval=$? + if [ "${retval}" -ne 0 ] + then + echo "" + echo "ERROR: Could not erase the ${PARTITION} partition on device ${1}." + echo "" + echo "ERROR: Please unplug the phone, take the battery out, boot the device into" + echo "ERROR: fastboot mode, and start this script again." + echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" + echo "ERROR: (cable until the fastboot menu appears.)" + abort_now + fi + done +fi +} + +# Check for connected phone +find_device() { + echo "INFO: Looking for connected device(s)..." + DEVICE_FOUND="false" + while [ ${DEVICE_FOUND} = "false" ] + do + serial_numbers= + + for sn in $("${FASTBOOT_BIN}" devices | grep fastboot | grep -oE '^[[:alnum:]]+') + do + # Checking the product ID + PRODUCT_STRING=$("${FASTBOOT_BIN}" -s "${sn}" getvar product 2>&1) + # Add serial, if product matches + if [[ ${PRODUCT_STRING} == *"${PRODUCT_ID}"* ]] || [[ ${PRODUCT_STRING} == *"${PRODUCT_ID_OLD}"* ]] + then + serial_numbers="${serial_numbers} $sn" + fi + done + + case $(echo "${serial_numbers}" | wc -w | grep -oE '[0-9]+') in + 0) + echo "" + echo "WARNING: No ${PRODUCT} found in fastboot mode." + echo "WARNING: Make sure that a ${PRODUCT} is connected." + ;; + 1) + echo "INFO: One ${PRODUCT} in fastboot mode found (serial number: ${sn})." + + DEVICE_FOUND="true" + break + ;; + *) + echo "" + echo "WARNING: Several ${PRODUCT}'s in fastboot mode connected." + echo "WARNING: Please connect only one ${PRODUCT}." + ;; + esac + + echo "" + while true + do + read -rp "Do you want to look for a ${PRODUCT} again? [(Y)es/(n)o]: " a + if [ -z "${a}" ] || [ "${a}" = 'y' ] || [ "${a}" = 'Y' ] + then + break + elif [ "${a}" = 'n' ] || [ "${a}" = 'N' ] + then + exit 0 + fi + done + done +} + +# Switch to fastbootd +switch_to_fastbootd() { + echo "INFO: Switching device to fastbootd mode..." + "${FASTBOOT_BIN}" -s "${sn}" reboot fastboot || { + echo "ERROR: Unable to switch to fastbootd mode." + abort_now + } + sleep 5 # Wait for the device to reboot into fastbootd + echo "INFO: Device is now in fastbootd mode." +} + + +# Flash (or manipulate) relevant partitions +flash_device() { + flash_images_ab_or_abort "${sn}" "${FLASH_AB_FW_IMGS}" + flash_images_a_or_abort "${sn}" "${FLASH_A_FW_IMGS}" + +if [ "${FW_BL_RESTART}" = "true" ] +then + echo "INFO: Firmware images flashed. The device will reboot to bootloader again to continue." + "${FASTBOOT_BIN}" -s "${sn}" reboot bootloader +fi + + flash_images_ab_or_abort "${sn}" "${FLASH_AB_IMGS}" + flash_images_a_or_abort "${sn}" "${FLASH_A_IMGS}" + +if [ "${CLEAN_FLASH}" = "true" ] +then + erase_images_or_abort "${sn}" "${ERASE_IMGS}" + format_images_or_abort "${sn}" "${FORMAT_IMGS}" +fi + +if [ "${VIRTUAL_AB}" = "true" ] +then + "${FASTBOOT_BIN}" -s "${sn}" --set-active=a +fi +} + +# Common flash function to be called from device flash script +flash_factory() { + # Begin with some OS checks and variable definition + os_checks + + # Call function to look for device(s) + # If only one device is found $sn will store its serial number + find_device + + if [ "${USE_FASTBOOTD}" = "true" ]; then + switch_to_fastbootd + fi + + # Check if the device is properly unlocked + check_unlock_status + + # Flash the device + flash_device + + # Reboot device + reboot_device +} + +# Flash an image to a partition. Abort on failure. +# Arguments: +flash_image_or_abort() { + local retval=0 + "$FASTBOOT_BIN" -s "${1}" flash "${2}" "${3}" || retval=$? + + if [ "${retval}" -ne 0 ] + then + echo "" + echo "ERROR: Could not flash the ${2} partition on device ${1}." + echo "" + echo "ERROR: Please unplug the phone, take the battery out, boot the device into" + echo "ERROR: fastboot mode, and start this script again." + echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" + echo "ERROR: (cable until the fastboot menu appears.)" + abort_now + fi +} + +# Flash an image to both A and B slot of partition. Abort on failure. +# Arguments: +flash_image_ab_or_abort() { + flash_image_or_abort "${1}" "${2}_a" "${3}" + flash_image_or_abort "${1}" "${2}_b" "${3}" +} + +# Flash a list of images to partitions. Abort on failure. +# Arguments: +flash_images_a_or_abort() { +if [ -n "${2}" ] +then + for BLOB in $2; + do + PARTITION="${BLOB%%:*}" + IMAGE=$(echo $BLOB | cut -s -d : -f 2) + + if [[ "$PARTITION" = "userdata" && "${CLEAN_FLASH}" != "true" ]] + then + continue + fi + flash_image_or_abort "${1}" "${PARTITION}" "${IMAGES_DIR}/${IMAGE:-$PARTITION.img}" + done +fi +} + +# Flash a list of images to A and B slot of partitions. Abort on failure. +# Arguments: +flash_images_ab_or_abort() { +if [ -n "${2}" ] +then + for BLOB in $2; + do + PARTITION="${BLOB%%:*}" + IMAGE=$(echo $BLOB | cut -s -d : -f 2) + + flash_image_ab_or_abort "${1}" "${PARTITION}" "${IMAGES_DIR}/${IMAGE:-$PARTITION.img}" + done +fi +} + +# Erase a list of partitions. Abort on failure. +# Arguments: +format_images_or_abort() { +if [ -n "${2}" ] +then + for PARTITION in $2; + do + local retval=0 + "${FASTBOOT_BIN}" -s "${1}" format "${PARTITION}" || retval=$? + if [ "${retval}" -ne 0 ] + then + echo "" + echo "ERROR: Could not format the ${PARTITION} partition on device ${1}." + echo "" + echo "ERROR: Please unplug the phone, take the battery out, boot the device into" + echo "ERROR: fastboot mode, and start this script again." + echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" + echo "ERROR: (cable until the fastboot menu appears.)" + abort_now + fi + done +fi +} + +# Operating system checks and variable definition +os_checks() { + case "$(uname -s 2> /dev/null)" in + Linux|GNU/Linux) + echo "INFO: You are using a Linux distribution." + FASTBOOT_BIN="${ROOT_DIR}/bin-linux-x86/fastboot" + ;; + msys|MINGW*) + echo "INFO: You are using MinGW on Windows" + FASTBOOT_BIN="${ROOT_DIR}/bin-msys/fastboot.exe" + ;; + *) + echo "ERROR: Unsupported operating system (${OSTYPE})." + echo "ERROR: Only GNU/Linux, and MinGW on Windows are currently supported." + abort_now + ;; + esac +} + +# Control the reboot sequence +reboot_device() { + echo "-----------" + echo "" + echo "INFO: Done. The device will reboot now." + "${FASTBOOT_BIN}" -s "${sn}" reboot + echo "" + echo "INFO: You can unplug the USB cable now." + echo "" +} diff --git a/flash/one/flash_one_factory.sh b/flash/one/flash_one_factory.sh index 709bec0a6f82c4dad2d6fa073a8dc6e89ebc290b..6f2b853b81e820a2dc71761f7dc52c6f0c02968d 100755 --- a/flash/one/flash_one_factory.sh +++ b/flash/one/flash_one_factory.sh @@ -1,226 +1,18 @@ #!/usr/bin/env bash -########## -# This script is created and maintained by -# Bharath(@teamb58).org -# Feel free to connect for any queries or suggestions. -########## - -########## -# This script flashes a software release and complete wipes the device. -# -########## - -set -e -set -u - -CLEAN_FLASH="true" # Control data wipe behavior. Default is "true". - # Target device info PRODUCT="Murena One" PRODUCT_ID="g1970upt_v2_gk_p60c_oj_r" -# Paths/files -ROOT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" -IMAGES_DIR="${ROOT_DIR}" - -# Abort the script (and wait for a key to be pressed). -abort_now() { - echo "" - read -rp "ERROR: Aborting now (press Enter to terminate)." a - exit 1 -} - -# Check for connected phone -find_device() { - echo "INFO: Looking for connected device(s)..." - DEVICE_FOUND="false" - while [ ${DEVICE_FOUND} = "false" ] - do - serial_numbers= - - for sn in $("${FASTBOOT_BIN}" devices | grep fastboot | grep -oE '^[[:alnum:]]+') - do - # Checking the product ID - PRODUCT_STRING=$("${FASTBOOT_BIN}" -s "${sn}" getvar product 2>&1) - # Add serial, if product matches - if [[ ${PRODUCT_STRING} == *"${PRODUCT_ID}"* ]] || [[ ${PRODUCT_STRING} == *"${PRODUCT_ID_OLD}"* ]] - then - serial_numbers="${serial_numbers} $sn" - fi - done - - case $(echo "${serial_numbers}" | wc -w | grep -oE '[0-9]+') in - 0) - echo "" - echo "WARNING: No ${PRODUCT} found in fastboot mode." - echo "WARNING: Make sure that a ${PRODUCT} is connected." - ;; - 1) - echo "INFO: One ${PRODUCT} in fastboot mode found (serial number: ${sn})." - - DEVICE_FOUND="true" - break - ;; - *) - echo "" - echo "WARNING: Several ${PRODUCT}'s in fastboot mode connected." - echo "WARNING: Please connect only one ${PRODUCT}." - ;; - esac - - echo "" - while true - do - read -rp "Do you want to look for a ${PRODUCT} again? [(Y)es/(n)o]: " a - if [ -z "${a}" ] || [ "${a}" = 'y' ] || [ "${a}" = 'Y' ] - then - break - elif [ "${a}" = 'n' ] || [ "${a}" = 'N' ] - then - exit 0 - fi - done - done -} - -# Flash (or manipulate) relevant partitions -flash_device() { - flash_image_or_abort "${sn}" boot boot.img - flash_image_or_abort "${sn}" cache cache.img - flash_image_or_abort "${sn}" cam_vpu1 cam_vpu1.img - flash_image_or_abort "${sn}" cam_vpu2 cam_vpu2.img - flash_image_or_abort "${sn}" cam_vpu3 cam_vpu3.img - flash_image_or_abort "${sn}" dtbo dtbo.img - flash_image_or_abort "${sn}" gz1 gz.img - flash_image_or_abort "${sn}" gz2 gz.img - flash_image_or_abort "${sn}" lk2 lk.img - flash_image_or_abort "${sn}" lk lk.img - flash_image_or_abort "${sn}" logo logo.bin - flash_image_or_abort "${sn}" md1img md1img.img - flash_image_or_abort "${sn}" preloader preloader_ufs.img - flash_image_or_abort "${sn}" recovery recovery.img - flash_image_or_abort "${sn}" scp2 scp.img - flash_image_or_abort "${sn}" scp1 scp.img - flash_image_or_abort "${sn}" spmfw spmfw.img - flash_image_or_abort "${sn}" sspm_2 sspm.img - flash_image_or_abort "${sn}" sspm_1 sspm.img - flash_image_or_abort "${sn}" super super.img - flash_image_or_abort "${sn}" tee2 tee.img - flash_image_or_abort "${sn}" tee1 tee.img - flash_image_or_abort "${sn}" teksunhw teksunhw.bin - flash_image_or_abort "${sn}" vbmeta_vendor vbmeta_vendor.img - flash_image_or_abort "${sn}" vbmeta_system vbmeta_system.img - flash_image_or_abort "${sn}" vbmeta vbmeta.img - - if [ "${CLEAN_FLASH}" = "true" ] - then - "$FASTBOOT_BIN" -s "${sn}" erase userdata - "$FASTBOOT_BIN" -s "${sn}" format md_udc - flash_image_or_abort "${sn}" userdata userdata.img - fi -} - -# Flash an image to a partition. Abort on failure. -# Arguments: -flash_image_or_abort() { - local retval=0 - "$FASTBOOT_BIN" -s "${1}" flash "${2}" "${IMAGES_DIR}"/"${3}" || retval=$? - - if [ "${retval}" -ne 0 ] - then - echo "" - echo "ERROR: Could not flash the ${2} partition on device ${1}." - echo "" - echo "ERROR: Please unplug the phone and boot the device into" - echo "ERROR: fastboot mode, and start this script again." - echo "ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)" - echo "ERROR: (cable until the fastboot menu appears.)" - abort_now - fi -} - -# Flash an image to both A and B slot of partition. Abort on failure. -# Arguments: -flash_image_ab_or_abort() { - flash_image_or_abort "${1}" "${2}_a" "${3}" - flash_image_or_abort "${1}" "${2}_b" "${3}" -} - -# Operating system checks and variable definition -os_checks() { - case "$(uname -s 2> /dev/null)" in - Linux|GNU/Linux) - echo "INFO: You are using a Linux distribution." - FASTBOOT_BIN="${ROOT_DIR}/bin-linux-x86/fastboot" - ;; - msys|MINGW*) - echo "INFO: You are using MinGW on Windows" - FASTBOOT_BIN="${ROOT_DIR}/bin-msys/fastboot.exe" - ;; - *) - echo "ERROR: Unsupported operating system (${OSTYPE})." - echo "ERROR: Only GNU/Linux, and MinGW on Windows are currently supported." - abort_now - ;; - esac -} - -# Control the reboot sequence -reboot_device() { - echo "-----------" - echo "" - echo "INFO: Done. The device will reboot now." - "${FASTBOOT_BIN}" -s "${sn}" reboot - echo "" - echo "INFO: You can unplug the USB cable now." - echo "" -} - -# Warn about data wipe, and ask for confirmation -data_wipe_check() { - if [ "${CLEAN_FLASH}" = "true" ] - then - echo "" - echo "WARNING: Flashing this image wipes all user data and settings on the phone." - echo " Are you sure you want to wipe data and continue?" - echo "" - # Read user's input - read -rp " Type \"Yes\" (case sensitive) and press enter to wipe data and continue. Else, just press enter: " a - echo "" - if [ "_${a:-"No"}" != '_Yes' ] - # NOTE: $a is being set by the read command above, - # so the check for a to be set is mostly redundant - then - echo "WARNING: You DID NOT type \"Yes\", proceeding without data wipe." - echo "" - CLEAN_FLASH="false" - else - echo "WARNING: You typed \"Yes\", proceeding with data wipe." - CLEAN_FLASH="true" - fi - fi -} - -echo "" -echo "*** ${PRODUCT} flashing script ***" -echo "" -echo "INFO: The procedure will start soon. Please wait..." -echo "Note that this will detect and flash only on ${PRODUCT} device." -sleep 2 - -# Begin with some OS checks and variable definition -os_checks - -# Call function to look for device(s) -# If only one device is found $sn will store its serial number -find_device +# Target Flashing Images info +FLASH_A_FW_IMGS="cam_vpu1 cam_vpu2 cam_vpu3 gz1:gz.img gz2:gz.img lk2:lk.img lk logo:logo.bin md1img preloader:preloader_ufs.img scp2:scp.img scp1:scp.img spmfw sspm_2:sspm.img sspm_1:sspm.img tee2:tee.img tee1:tee.img teksunhw:teksunhw.bin" +FLASH_A_IMGS="boot cache dtbo recovery super vbmeta vbmeta_system vbmeta_vendor userdata" +FORMAT_IMGS="md_udc" -# Call function to look for data wipe check -data_wipe_check +# Target flash process behavior +CLEAN_FLASH=true -# Flash the device -flash_device +source factory.common -# Reboot device -reboot_device +# Common flashing function +flash_factory