summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Cerqueira <cyanogenmod@cerqueira.org>2014-06-18 18:28:43 +0100
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2014-07-01 23:12:02 +0100
commit07ee05c2c1da2dbb3500d672fd28c32b335ee49c (patch)
treee9ed369a3d3b25dd0b81dc92a85ecdfabb6dcfdf
parent7317614554f54657da3e37526cafbb5338cd2170 (diff)
recovery: Add a loki script as a recovery transformation step
This is required to support generated-from-boot recovery installations Change-Id: I739c99d8beb01110920ed3539d92cf053623c757
-rw-r--r--loki/Android.mk9
-rw-r--r--loki/loki-recovery.sh33
2 files changed, 41 insertions, 1 deletions
diff --git a/loki/Android.mk b/loki/Android.mk
index 327cd0e..180b817 100644
--- a/loki/Android.mk
+++ b/loki/Android.mk
@@ -19,7 +19,7 @@ LOCAL_PATH := $(call my-dir)
# build static binary
include $(CLEAR_VARS)
LOCAL_SRC_FILES := loki_flash.c loki_patch.c loki_find.c loki_unlok.c main.c
-LOCAL_MODULE := loki_tool_static
+LOCAL_MODULE := loki_tool_static_gproj
LOCAL_MODULE_STEM := loki_tool
LOCAL_MODULE_TAGS := eng
# LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
@@ -33,3 +33,10 @@ LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
LOCAL_SRC_FILES := loki.sh
include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := recovery-transform.sh
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT)/etc
+LOCAL_SRC_FILES := loki-recovery.sh
+include $(BUILD_PREBUILT)
diff --git a/loki/loki-recovery.sh b/loki/loki-recovery.sh
new file mode 100644
index 0000000..79d94cf
--- /dev/null
+++ b/loki/loki-recovery.sh
@@ -0,0 +1,33 @@
+#!/system/bin/sh
+#
+# This leverages the loki_patch utility created by djrbliss
+# See here for more information on loki: https://github.com/djrbliss/loki
+#
+
+export C=/data/local/tmp/loki_tmpdir
+RECSIZE=$1
+RECSHA1=$2
+BOOTSIZE=$3
+BOOTSHA1=$4
+
+rm -rf $C
+mkdir -p $C
+
+dd if=/dev/block/platform/msm_sdcc.1/by-name/recovery of=$C/recovery.lok
+/system/bin/loki_tool unlok $C/recovery.lok $C/recovery.img
+
+if ! applypatch -c EMMC:$C/recovery.img:$RECSIZE:$RECSHA1; then
+ log -t recovery "recovery is outdated. unloki-ing all the things"
+ dd if=/dev/block/platform/msm_sdcc.1/by-name/boot of=$C/boot.lok
+ dd if=/dev/block/platform/msm_sdcc.1/by-name/aboot of=$C/aboot.img
+ /system/bin/loki_tool unlok $C/boot.lok $C/boot.img
+ log -t recovery "Installing new recovery image"
+ applypatch -b /system/etc/recovery-resource.dat EMMC:$C/boot.img:$BOOTSIZE:$BOOTSHA1 EMMC:$C/recovery.img $RECSHA1 $RECSIZE $BOOTSHA1:/system/recovery-from-boot.p || exit 1
+ /system/bin/loki_tool patch recovery $C/aboot.img $C/recovery.img $C/recovery.lok || exit 1
+ /system/bin/loki_tool flash recovery $C/recovery.lok || exit 1
+else
+ log -t recovery "Recovery image already installed"
+fi
+
+rm -rf $C
+exit 0