From fa4ed5a7425d14a88d3b01fe373c1009bf87250c Mon Sep 17 00:00:00 2001 From: Rohit Sekhar Date: Mon, 6 Jan 2025 10:46:50 +0530 Subject: [PATCH 1/2] flash: Source from a common script --- flash/Android.mk | 1 + flash/FP3/flash_FP3_factory.sh | 255 +------------------------ flash/FP4/flash_FP4_factory.sh | 231 ++-------------------- flash/FP5/flash_FP5_factory.sh | 228 ++-------------------- flash/axolotl/flash_axolotl_factory.sh | 228 ++-------------------- flash/factory.common | 252 ++++++++++++++++++++++++ flash/two/flash_two_factory.sh | 221 ++------------------- 7 files changed, 308 insertions(+), 1108 deletions(-) create mode 100755 flash/factory.common diff --git a/flash/Android.mk b/flash/Android.mk index 5b6ae4a..a4a836d 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 2a601ae..355b3f0 100755 --- a/flash/FP3/flash_FP3_factory.sh +++ b/flash/FP3/flash_FP3_factory.sh @@ -1,254 +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 completly 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 -} - -# Check if the device is properly unlocked -check_unlock_status() { - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 -} - -# 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 - -# 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_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 data wipe check -data_wipe_check +# Target flash process behavior +CLEAN_FLASH=true +VIRTUAL_AB=true -# Check if the device is properly unlocked -check_unlock_status +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 3078fc6..0ec7e37 100755 --- a/flash/FP4/flash_FP4_factory.sh +++ b/flash/FP4/flash_FP4_factory.sh @@ -1,229 +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 completely 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 -} - -# Check if the device is properly unlocked -check_unlock_status() { - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 -} - -# 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 slots of a 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" - ;; - Darwin) - echo "INFO: You are using MacOS." - FASTBOOT_BIN="${ROOT_DIR}/bin-darwin/fastboot" - ;; - *) - echo "ERROR: Unsupported operating system (${OSTYPE})." - echo "ERROR: Only GNU/Linux, MacOS, 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 - -# 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_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" -# Check if the device is properly unlocked -check_unlock_status +# 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/FP5/flash_FP5_factory.sh b/flash/FP5/flash_FP5_factory.sh index 1a28d82..cad5a5d 100755 --- a/flash/FP5/flash_FP5_factory.sh +++ b/flash/FP5/flash_FP5_factory.sh @@ -1,226 +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 completely wipes the device. -# -########## - -set -e -set -u - # Target device info PRODUCT="Fairphone 5" PRODUCT_ID="FP5" -# 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 -} - -# Check if the device is properly unlocked -check_unlock_status() { - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 phone is still locked." - echo "Did you execute 'fastboot flashing unlock'?" - 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 -} - -# 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}" dtbo "${IMAGES_DIR}/dtbo.img" - flash_image_ab_or_abort "${sn}" vendor_boot "${IMAGES_DIR}/vendor_boot.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}" cpucp "${IMAGES_DIR}/cpucp.img" - flash_image_ab_or_abort "${sn}" shrm "${IMAGES_DIR}/shrm.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 slots of a 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 ${PRODUCT} 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 cpucp shrm" +FLASH_AB_IMGS="boot dtbo vendor_boot 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 -# Check if the device is properly unlocked -check_unlock_status +source factory.common -# Flash the device -flash_device -# Reboot device -reboot_device +# Common flashing function +flash_factory diff --git a/flash/axolotl/flash_axolotl_factory.sh b/flash/axolotl/flash_axolotl_factory.sh index dd40d2b..93da325 100755 --- a/flash/axolotl/flash_axolotl_factory.sh +++ b/flash/axolotl/flash_axolotl_factory.sh @@ -1,226 +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 completely wipes the device. -# -########## - -set -e -set -u - -CLEAN_FLASH="true" # Control data wipe behavior. Default is "true". - # Target device info PRODUCT="SHIFT6mq" -# Bootloader identifies as generic "sdm845" instead of "axolotl" while Fastbootd identifies as "axolotl" PRODUCT_ID="sdm845" -# 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}" ImageFv "${IMAGES_DIR}/ImageFv.img" - flash_image_ab_or_abort "${sn}" aop "${IMAGES_DIR}/aop.img" - flash_image_ab_or_abort "${sn}" bluetooth "${IMAGES_DIR}/bluetooth.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}" devcfg "${IMAGES_DIR}/devcfg.img" - flash_image_ab_or_abort "${sn}" dsp "${IMAGES_DIR}/dsp.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}" modem "${IMAGES_DIR}/modem.img" - flash_image_ab_or_abort "${sn}" qupfw "${IMAGES_DIR}/qupfw.img" - flash_image_ab_or_abort "${sn}" storsec "${IMAGES_DIR}/storsec.img" - flash_image_ab_or_abort "${sn}" tz "${IMAGES_DIR}/tz.img" - flash_image_ab_or_abort "${sn}" xbl "${IMAGES_DIR}/xbl.img" - flash_image_ab_or_abort "${sn}" xbl_config "${IMAGES_DIR}/xbl_config.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}" recovery "${IMAGES_DIR}/recovery.img" - flash_image_or_abort "${sn}" super super.img - flash_image_ab_or_abort "${sn}" vbmeta "${IMAGES_DIR}/vbmeta.img" - flash_image_ab_or_abort "${sn}" vbmeta_system "${IMAGES_DIR}/vbmeta_system.img" - flash_image_ab_or_abort "${sn}" vbmeta_vendor "${IMAGES_DIR}/vbmeta_vendor.img" - - if [ "${CLEAN_FLASH}" = "true" ] - then - flash_image_or_abort "${sn}" userdata "${IMAGES_DIR}/userdata.img" - "$FASTBOOT_BIN" -s "${sn}" erase metadata - fi - - "$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 "" -} - -# 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_AB_FW_IMGS="ImageFv aop bluetooth cmnlib cmnlib64 devcfg dsp hyp keymaster modem qupfw storsec tz xbl xbl_config" +FLASH_AB_IMGS="boot dtbo recovery vbmeta vbmeta_system vbmeta_vendor" +FLASH_A_IMGS="super userdata" +ERASE_IMGS="metadata" -# Call function to look for data wipe check -data_wipe_check +# 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/factory.common b/flash/factory.common new file mode 100755 index 0000000..db87d38 --- /dev/null +++ b/flash/factory.common @@ -0,0 +1,252 @@ +#!/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 +} + +# 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 +} + +# 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 + + # 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" + ;; + Darwin) + echo "INFO: You are using MacOS." + FASTBOOT_BIN="${ROOT_DIR}/bin-darwin/fastboot" + ;; + *) + echo "ERROR: Unsupported operating system (${OSTYPE})." + echo "ERROR: Only GNU/Linux, MacOS 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/two/flash_two_factory.sh b/flash/two/flash_two_factory.sh index 8a1f902..2480962 100755 --- a/flash/two/flash_two_factory.sh +++ b/flash/two/flash_two_factory.sh @@ -1,218 +1,21 @@ #!/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 Two" PRODUCT_ID="k71v1_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_ab_or_abort "${sn}" boot boot.img - flash_image_ab_or_abort "${sn}" dtbo dtbo.img - flash_image_ab_or_abort "${sn}" cam_vpu1 cam_vpu1.img - flash_image_ab_or_abort "${sn}" cam_vpu2 cam_vpu2.img - flash_image_ab_or_abort "${sn}" cam_vpu3 cam_vpu3.img - flash_image_ab_or_abort "${sn}" dtbo dtbo.img - flash_image_ab_or_abort "${sn}" gz gz.img - flash_image_ab_or_abort "${sn}" lk lk.img - flash_image_or_abort "${sn}" logo logo.bin - flash_image_ab_or_abort "${sn}" md1img md1img.img - flash_image_ab_or_abort "${sn}" preloader preloader_k71v1_64_bsp.bin - flash_image_ab_or_abort "${sn}" scp scp.img - flash_image_ab_or_abort "${sn}" spmfw spmfw.img - flash_image_ab_or_abort "${sn}" sspm sspm.img - flash_image_or_abort "${sn}" super super.img - flash_image_ab_or_abort "${sn}" tee tee.img - flash_image_ab_or_abort "${sn}" vbmeta_vendor vbmeta_vendor.img - flash_image_ab_or_abort "${sn}" vbmeta_system vbmeta_system.img - flash_image_ab_or_abort "${sn}" vbmeta vbmeta.img - - if [ "${CLEAN_FLASH}" = "true" ] - then - "$FASTBOOT_BIN" -s "${sn}" erase userdata - "$FASTBOOT_BIN" -s "${sn}" format md_udc - 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_AB_FW_IMGS="cam_vpu1 cam_vpu2 cam_vpu3 gz lk md1img preloader:preloader_k71v1_64_bsp.bin scp spmfw sspm tee" +FLASH_A_FW_IMGS="logo:logo.bin" +FLASH_AB_IMGS="boot dtbo vbmeta vbmeta_system vbmeta_vendor" +FLASH_A_IMGS="super" +ERASE_IMGS="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 -- GitLab From 3d57323e4f9708f0a1d435540035469af6b01628 Mon Sep 17 00:00:00 2001 From: Ahmed Harhash Date: Fri, 2 Aug 2024 08:40:59 +0300 Subject: [PATCH 2/2] factory.common: Check if phone is unlocked --- flash/factory.common | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/flash/factory.common b/flash/factory.common index db87d38..7a0ed8b 100755 --- a/flash/factory.common +++ b/flash/factory.common @@ -13,6 +13,36 @@ abort_now() { 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() { @@ -125,6 +155,9 @@ flash_factory() { # If only one device is found $sn will store its serial number find_device + # Check if the device is properly unlocked + check_unlock_status + # Flash the device flash_device -- GitLab