releasetools: Better firmware update handling

Change-Id: Ie3d9d965e6452bfbd8a9296d603fa973582b9471
This commit is contained in:
Aaron Kling committed 2021-06-26 23:33:38 +02:00
1 parent 3f86caa8a7
commit 32acb9585b
2 files changed
+233 -35

No files matched your search

+3 -2
View File
@@ -54,8 +54,9 @@ BOARD_KERNEL_IMAGE_NAME := Image.gz
endif
# Recovery
TARGET_RECOVERY_FSTAB := device/nvidia/foster/initfiles/fstab.foster
BOARD_SUPPRESS_EMMC_WIPE := true
TARGET_RECOVERY_FSTAB := device/nvidia/foster/initfiles/fstab.foster
BOARD_SUPPRESS_EMMC_WIPE := true
TARGET_RECOVERY_UPDATER_LIBS := librecoveryupdater_tegra
TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888
# Releasetools
+230 -33
View File
@@ -19,11 +19,26 @@ import common
import re
import os
TARGET_DIR = os.getenv('OUT')
APP_PART = '/dev/block/by-name/APP'
DTB_PART = '/dev/block/by-name/DTB'
STAGING_PART = '/dev/block/by-name/USP'
APP_PART = '/dev/block/by-name/APP'
VENDOR_PART = '/dev/block/by-name/vendor'
ICOSA_SD = '/external_sd/switchroot/android/'
VENDOR_PART = '/dev/block/by-name/vendor'
PUBLIC_KEY_PATH = '/sys/devices/7000f800.efuse/7000f800.efuse:efuse-burn/public_key'
FUSED_PATH = '/sys/devices/7000f800.efuse/7000f800.efuse:efuse-burn/odm_production_mode'
DTSFILENAME_PATH = '/proc/device-tree/nvidia,dtsfilename'
MODE_UNFUSED = '0x00000000\n'
MODE_FUSED = '0x00000001\n'
FOSTER_E_PUBLIC_KEY = '0x0256ff42f60a5159edad8029772f1d5f848477fb9d33cd2b2e8f0b4d85c8d78a\n'
FOSTER_E_BL_VERSION = '32.00.2019.50-t210-62176168'
LOKI_E_PUBLIC_KEY = '0x4261f1714a7d71c7e810c9b33769878128cc54ae3c5736646496104b643aed09\n'
LOKI_E_BL_VERSION = '24.00.2015.42-t210-39c6cadc' # the last released signed bootloader
DARCY_PUBLIC_KEY = '0x435a807e9187c53eae50e2dcab521e0ea41458a9b18d31db553ceb711c21fb52\n'
DARCY_BL_VERSION = '32.00.2019.50-t210-79558a05'
def FullOTA_PostValidate(info):
if 'INSTALL/bin/resize2fs_static' in info.input_zip.namelist():
@@ -57,32 +72,214 @@ def AddBootloaderAssertion(info, input_zip):
info.metadata["pre-bootloader"] = m.group(1)
def AddBootloaderFlash(info, input_zip):
android_info = input_zip.read("OTA/android-info.txt").decode('utf-8')
m = re.search(r"require\s+version-bootloader\s*=\s*(\S+)", android_info)
if m:
bootloaders = m.group(1).split("|")
info.metadata["pre-bootloader"] = m.group(1)
if "*" not in bootloaders:
info.script.AppendExtra('ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "foster_e" || getprop("ro.hardware") == "foster_e_hdd" || getprop("ro.hardware") == "darcy" || getprop("ro.hardware") == "icosa",')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' ' + ' || '.join(['getprop("ro.bootloader") == "%s"' % (b,) for b in bootloaders]) + ',')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Flashing updated bootloader");')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "icosa",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' package_extract_file("firmware-update/coreboot.rom", "' + ICOSA_SD + 'coreboot.rom");')
info.script.AppendExtra(' package_extract_file("firmware-update/boot.scr", "' + ICOSA_SD + 'boot.scr");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' package_extract_file("firmware-update/" + getprop(ro.hardware) + ".blob", "' + STAGING_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' assert(' + ' || '.join(['getprop("ro.bootloader") == "%s"' % (b,) for b in bootloaders]) +
' || abort("This package supports bootloader(s): ' + ', '.join(["%s" % (b,) for b in bootloaders]) +
'; this device has bootloader " + getprop("ro.bootloader") + ".");' + ');')
info.script.AppendExtra(');')
""" If device is fused """
info.script.AppendExtra('ifelse(')
info.script.AppendExtra(' read_file("' + FUSED_PATH + '") == "' + MODE_FUSED + '",')
info.script.AppendExtra(' (')
""" Fused foster_e or foster_e_hdd """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "foster_e" || getprop("ro.hardware") == "foster_e_hdd",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for fused " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' read_file("' + PUBLIC_KEY_PATH + '") == "' + FOSTER_E_PUBLIC_KEY + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Flashing updated bootloader for fused " + getprop(ro.hardware));')
info.script.AppendExtra(' package_extract_file("firmware-update/" + getprop(ro.hardware) + ".blob", "' + STAGING_PART + '");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Unknown public key " + read_file("' + PUBLIC_KEY_PATH + '") + " for " + getprop("ro.hardware") + " detected.");')
info.script.AppendExtra(' ui_print("This is not supported. Please report to LineageOS Maintainer.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Fused darcy """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "darcy",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' is_substring("tegra210b01", read_file("' + DTSFILENAME_PATH + '")),')
""" mdarcy """
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("MDarcy is not supported in this build.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' ),')
""" darcy """
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + DARCY_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for fused darcy");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' read_file("' + PUBLIC_KEY_PATH + '") == "' + DARCY_PUBLIC_KEY + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Flashing updated bootloader for fused darcy");')
info.script.AppendExtra(' package_extract_file("firmware-update/darcy.blob", "' + STAGING_PART + '");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Unknown public key " + read_file("' + PUBLIC_KEY_PATH + '") + " for darcy detected.");')
info.script.AppendExtra(' ui_print("This is not supported. Please report to LineageOS Maintainer.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Fused loki_e """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "loki_e_base" || getprop("ro.hardware") == "loki_e_lte" || getprop("ro.hardware") == "loki_e_wifi",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for fused " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' read_file("' + PUBLIC_KEY_PATH + '") == "' + LOKI_E_PUBLIC_KEY + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Fused " + getprop(ro.hardware) + " is not currently supported.");')
info.script.AppendExtra(' ui_print("There has not been a signed bootloader update since rel-24.");')
info.script.AppendExtra(' ui_print("The newer kernel will not boot on the old bootloader.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Unknown public key " + read_file("' + PUBLIC_KEY_PATH + '") + " for " + getprop("ro.hardware") + " detected.");')
info.script.AppendExtra(' ui_print("This is not supported. Please report to LineageOS Maintainer.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Fused jetson """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "jetson_cv",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for fused " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("You fused your Jetson TX1?!? Seriously, why would you do this?");')
info.script.AppendExtra(' ui_print("You are on your own. The LineageOS Maintainer does not want to hear about this.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' ),')
""" If not fused """
info.script.AppendExtra(' (')
""" Unfused foster_e or foster_e_hdd """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "foster_e" || getprop("ro.hardware") == "foster_e_hdd",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for unfused " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("This is an unfused foster_e or foster_e_hdd.");')
info.script.AppendExtra(' ui_print("This is not supported. Please report to LineageOS Maintainer.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Unfused darcy """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "darcy",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' is_substring("tegra210b01", read_file("' + DTSFILENAME_PATH + '")),')
""" mdarcy """
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("MDarcy is not supported in this build.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' ),')
""" darcy """
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + DARCY_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for unfused darcy");')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("This is an unfused darcy.");')
info.script.AppendExtra(' ui_print("This is not supported. Please report to LineageOS Maintainer.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Unfused loki_e """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "loki_e_base" || getprop("ro.hardware") == "loki_e_lte" || getprop("ro.hardware") == "loki_e_wifi",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for unfused " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("This is an unfused " + getprop(ro.hardware) + ".");')
info.script.AppendExtra(' ui_print("Updating the bootloader is not currently supported.");')
info.script.AppendExtra(' ui_print("There has not been a working bootloader since rel-29.");')
info.script.AppendExtra(' abort();')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
""" Unfused jetson """
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.hardware") == "jetson_cv",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ifelse(')
info.script.AppendExtra(' getprop("ro.bootloader") == "' + FOSTER_E_BL_VERSION + '",')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Correct bootloader already installed for " + getprop(ro.hardware));')
info.script.AppendExtra(' ),')
info.script.AppendExtra(' (')
info.script.AppendExtra(' ui_print("Flashing updated bootloader for unfused Jetson TX1");')
info.script.AppendExtra(' package_extract_file("firmware-update/jetson_cv.blob", "' + STAGING_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' package_extract_file("install/" + tegra_get_dtbname(), "' + DTB_PART + '");')
info.script.AppendExtra(' )')
info.script.AppendExtra(' );')
info.script.AppendExtra(' )')
info.script.AppendExtra(');')