From 4cf2d0e3ab944b74e8d9673d1adb9d19aeccefd1 Mon Sep 17 00:00:00 2001 From: Tim Zimmermann Date: Mon, 17 Sep 2001 00:00:00 +0200 Subject: [PATCH] sm7125-common: squashed import of releasetools * Require T firmware Change-Id: I5ab3744ec2a61249d6d7dd5380b40f0ad3e7e7ba --- BoardConfigCommon.mk | 5 ++++ board-info.txt | 1 + recovery/Android.bp | 28 ++++++++++++++++++ recovery/recovery_updater.cpp | 51 +++++++++++++++++++++++++++++++++ releasetools.py | 53 +++++++++++++++++++++++++++++++++++ 5 files changed, 138 insertions(+) create mode 100644 board-info.txt create mode 100644 recovery/Android.bp create mode 100644 recovery/recovery_updater.cpp create mode 100644 releasetools.py diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index bb5b11a..d63b5d6 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -198,6 +198,11 @@ BOARD_INCLUDE_RECOVERY_DTBO := true TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888 TARGET_USES_MKE2FS := true TARGET_RECOVERY_FSTAB := $(COMMON_PATH)/rootdir/etc/fstab.default +TARGET_BOARD_INFO_FILE := $(COMMON_PATH)/board-info.txt + +# Releasetools +TARGET_RECOVERY_UPDATER_LIBS := librecovery_updater_samsung_sm7125 +TARGET_RELEASETOOLS_EXTENSIONS := $(COMMON_PATH)/releasetools # SePolicy include device/qcom/sepolicy_vndr/SEPolicy.mk diff --git a/board-info.txt b/board-info.txt new file mode 100644 index 0000000..05cef84 --- /dev/null +++ b/board-info.txt @@ -0,0 +1 @@ +require version-bootloader-min=C diff --git a/recovery/Android.bp b/recovery/Android.bp new file mode 100644 index 0000000..30a3c80 --- /dev/null +++ b/recovery/Android.bp @@ -0,0 +1,28 @@ +// +// Copyright (C) 2022 The LineageOS Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +cc_library_static { + name: "librecovery_updater_samsung_sm7125", + srcs: [ + "recovery_updater.cpp", + ], + include_dirs: [ + "system/libbase/include", + "bootable/recovery", + "bootable/recovery/edify/include", + "bootable/recovery/otautil/include" + ], +} diff --git a/recovery/recovery_updater.cpp b/recovery/recovery_updater.cpp new file mode 100644 index 0000000..892eb36 --- /dev/null +++ b/recovery/recovery_updater.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2022, The LineageOS Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "edify/expr.h" +#include "otautil/error_code.h" + +Value *VerifyBootloader(const char *name, State *state, + const std::vector> &argv) { + int ret = 0; + std::string bootloader = android::base::GetProperty("ro.boot.bootloader", ""); + if (bootloader.empty()) { + return ErrorAbort(state, kFileGetPropFailure, + "%s() failed to read current bootloader version", name); + } + + std::string min_supported_bootloader_arg; + if (argv.empty() || !Evaluate(state, argv[0], &min_supported_bootloader_arg)) { + return ErrorAbort(state, kArgsParsingFailure, + "%s() error parsing arguments", name); + } + int min_supported_bootloader = int(min_supported_bootloader_arg[0]); + + int version = 0; + if (bootloader.length() >= 4) + version = int(bootloader[bootloader.length() - 4]); + + if (version >= min_supported_bootloader) { + ret = 1; + } + + return StringValue(std::to_string(ret)); +} + +void Register_librecovery_updater_samsung_sm7125() { + RegisterFunction("samsung_sm7125.verify_bootloader_min", VerifyBootloader); +} diff --git a/releasetools.py b/releasetools.py new file mode 100644 index 0000000..c30c191 --- /dev/null +++ b/releasetools.py @@ -0,0 +1,53 @@ +#!/bin/env python3 +# +# Copyright (C) 2021 The LineageOS Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import common +import re + +def FullOTA_Assertions(info): + OTA_Assertions(info) + return + +def FullOTA_InstallEnd(info): + OTA_InstallEnd(info) + return + +def IncrementalOTA_Assertions(info): + OTA_Assertions(info) + return + +def IncrementalOTA_InstallEnd(info): + OTA_InstallEnd(info) + return + +def OTA_Assertions(info): + android_info = info.input_zip.read("OTA/android-info.txt") + m = re.search(r'require\s+version-bootloader-min\s*=\s*(\S+)', android_info.decode('utf-8')) + if m: + bootloader_version = m.group(1) + cmd = ('assert(samsung_sm7125.verify_bootloader_min("{}") == "1" || abort("ERROR: This package requires Android 13 based firmware. Please upgrade firmware and retry!"););').format(bootloader_version) + info.script.AppendExtra(cmd) + return + +def AddImage(info, basename, dest): + data = info.input_zip.read("IMAGES/" + basename) + common.ZipWriteStr(info.output_zip, basename, data) + info.script.Print("Patching {} image unconditionally...".format(dest.split('/')[-1])) + info.script.AppendExtra('package_extract_file("%s", "%s");' % (basename, dest)) + +def OTA_InstallEnd(info): + AddImage(info, "dtbo.img", "/dev/block/by-name/dtbo") + return