galaxys
diff --git a/Android.mk b/Android.mk
index 7c843b2..1de07d6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -13,13 +13,27 @@
legacy.c \
commands.c \
recovery.c \
- bootloader.c \
- firmware.c \
install.c \
roots.c \
ui.c \
verifier.c
+ifndef BOARD_HAS_NO_MISC_PARTITION
+ LOCAL_SRC_FILES += \
+ firmware.c \
+ bootloader.c
+else
+ LOCAL_CFLAGS += -DBOARD_HAS_NO_MISC_PARTITION
+endif
+
+ifdef BOARD_USES_FFORMAT
+ LOCAL_CFLAGS += -DBOARD_USES_FFORMAT
+endif
+
+ifdef BOARD_RECOVERY_IGNORE_BOOTABLES
+ LOCAL_CLFAGS += -DBOARD_RECOVERY_IGNORE_BOOTABLES
+endif
+
LOCAL_SRC_FILES += test_roots.c
LOCAL_MODULE := recovery
@@ -27,7 +41,7 @@
LOCAL_FORCE_STATIC_EXECUTABLE := true
RECOVERY_VERSION := ClockworkMod Recovery v2.5.0.1
-LOCAL_CFLAGS := -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
+LOCAL_CFLAGS += -DRECOVERY_VERSION="$(RECOVERY_VERSION)"
RECOVERY_API_VERSION := 2
LOCAL_CFLAGS += -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION)
@@ -59,6 +73,14 @@
LOCAL_CFLAGS += -DDATA_FILESYSTEM=\"$(BOARD_DATA_FILESYSTEM)\"
endif
+ifdef BOARD_DATADATA_DEVICE
+ LOCAL_CFLAGS += -DDATADATA_DEVICE=\"$(BOARD_DATADATA_DEVICE)\"
+endif
+
+ifdef BOARD_DATADATA_FILESYSTEM
+ LOCAL_CFLAGS += -DDATADATA_FILESYSTEM=\"$(BOARD_DATADATA_FILESYSTEM)\"
+endif
+
ifdef BOARD_CACHE_DEVICE
LOCAL_CFLAGS += -DCACHE_DEVICE=\"$(BOARD_CACHE_DEVICE)\"
endif
@@ -67,6 +89,14 @@
LOCAL_CFLAGS += -DCACHE_FILESYSTEM=\"$(BOARD_CACHE_FILESYSTEM)\"
endif
+ifdef BOARD_SYSTEM_DEVICE
+ LOCAL_CFLAGS += -DSYSTEM_DEVICE=\"$(BOARD_SYSTEM_DEVICE)\"
+endif
+
+ifdef BOARD_SYSTEM_FILESYSTEM
+ LOCAL_CFLAGS += -DSYSTEM_FILESYSTEM=\"$(BOARD_SYSTEM_FILESYSTEM)\"
+endif
+
ifdef BOARD_HAS_DATADATA
LOCAL_CFLAGS += -DHAS_DATADATA
endif
@@ -93,6 +123,7 @@
include $(BUILD_EXECUTABLE)
RECOVERY_LINKS := amend busybox flash_image dump_image mkyaffs2image unyaffs erase_image nandroid
+
# nc is provided by external/netcat
SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(RECOVERY_LINKS))
$(SYMLINKS): RECOVERY_BINARY := $(LOCAL_MODULE)
@@ -132,6 +163,16 @@
LOCAL_SRC_FILES := killrecovery.sh
include $(BUILD_PREBUILT)
+ifdef BOARD_USES_FFORMAT
+include $(CLEAR_VARS)
+LOCAL_MODULE := fformat
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+LOCAL_SRC_FILES := prebuilt/fformat
+include $(BUILD_PREBUILT)
+endif
+
include $(commands_recovery_local_path)/amend/Android.mk
include $(commands_recovery_local_path)/minui/Android.mk
include $(commands_recovery_local_path)/minzip/Android.mk
diff --git a/commands.c b/commands.c
index 40c4461..8db0aba 100644
--- a/commands.c
+++ b/commands.c
@@ -626,11 +626,13 @@
return 1;
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
if (remember_firmware_update(type, context.data, context.total_bytes)) {
LOGE("Can't store %s image\n", type);
free(context.data);
return 1;
}
+#endif
return 0;
}
diff --git a/default_recovery_ui.c b/default_recovery_ui.c
index 8ee1239..09bf19c 100644
--- a/default_recovery_ui.c
+++ b/default_recovery_ui.c
@@ -50,10 +50,12 @@
int device_handle_key(int key_code, int visible) {
if (visible) {
switch (key_code) {
+ case KEY_CAPSLOCK:
case KEY_DOWN:
case KEY_VOLUMEDOWN:
return HIGHLIGHT_DOWN;
+ case KEY_LEFTSHIFT:
case KEY_UP:
case KEY_VOLUMEUP:
return HIGHLIGHT_UP;
@@ -65,6 +67,7 @@
if (!get_allow_toggle_display())
return GO_BACK;
break;
+ case KEY_LEFTBRACE:
case KEY_ENTER:
case BTN_MOUSE:
case KEY_CENTER:
diff --git a/extendedcommands.c b/extendedcommands.c
index 9310305..fe7de6a 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -61,7 +61,9 @@
int install_zip(const char* packagefilepath)
{
ui_print("\n-- Installing: %s\n", packagefilepath);
+#ifndef BOARD_HAS_NO_MISC_PARTITION
set_sdcard_update_bootloader_message();
+#endif
int status = install_package(packagefilepath);
ui_reset_progress();
if (status != INSTALL_SUCCESS) {
@@ -69,9 +71,11 @@
ui_print("Installation aborted.\n");
return 1;
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
if (firmware_update_pending()) {
ui_print("\nReboot via menu to complete\ninstallation.\n");
}
+#endif
ui_set_background(BACKGROUND_ICON_NONE);
ui_print("\nInstall from sdcard complete.\n");
return 0;
diff --git a/install.c b/install.c
index bbdb854..de3ec73 100644
--- a/install.c
+++ b/install.c
@@ -90,11 +90,13 @@
fclose(f);
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
if (remember_firmware_update(type, data, data_size)) {
LOGE("Can't store %s image\n", type);
free(data);
return INSTALL_ERROR;
}
+#endif
free(filename);
return INSTALL_SUCCESS;
diff --git a/killrecovery.sh b/killrecovery.sh
index f215250..2052ef9 100755
--- a/killrecovery.sh
+++ b/killrecovery.sh
@@ -5,4 +5,6 @@
touch /tmp/.ignorebootmessage
kill $(ps | grep /sbin/adbd)
kill $(ps | grep /sbin/recovery)
+
+/sbin/recovery
exit 1
\ No newline at end of file
diff --git a/nandroid.c b/nandroid.c
index 00afbd9..33899d1 100644
--- a/nandroid.c
+++ b/nandroid.c
@@ -133,6 +133,7 @@
sprintf(tmp, "mkdir -p %s", backup_path);
__system(tmp);
+#ifndef BOARD_RECOVERY_IGNORE_BOOTABLES
ui_print("Backing up boot...\n");
sprintf(tmp, "%s/%s", backup_path, "boot.img");
ret = dump_image("boot", tmp, NULL);
@@ -143,7 +144,8 @@
sprintf(tmp, "%s/%s", backup_path, "recovery.img");
ret = dump_image("recovery", tmp, NULL);
if (0 != ret)
- return print_and_error("Error while dumping boot image!\n");
+ return print_and_error("Error while dumping recovery image!\n");
+#endif
if (0 != (ret = nandroid_backup_partition(backup_path, "SYSTEM:")))
return ret;
@@ -198,13 +200,28 @@
typedef int (*format_function)(char* root);
+static void ensure_directory(const char* dir) {
+ char tmp[PATH_MAX];
+ sprintf(tmp, "mkdir -p %s", dir);
+ __system(tmp);
+}
+
int nandroid_restore_partition_extended(const char* backup_path, const char* root, int umount_when_finished) {
int ret = 0;
char mount_point[PATH_MAX];
translate_root_path(root, mount_point, PATH_MAX);
char* name = basename(mount_point);
+ char tmp[PATH_MAX];
+ sprintf(tmp, "%s/%s.img", backup_path, name);
struct stat file_info;
+ if (0 != (ret = statfs(tmp, &file_info))) {
+ ui_print("%s.img not found. Skipping restore of /sd-ext.", name);
+ return 0;
+ }
+
+ ensure_directory(mount_point);
+
unyaffs_callback callback = NULL;
if (0 != stat("/sdcard/clockworkmod/.hidenandroidprogress", &file_info)) {
callback = yaffs_callback;
@@ -225,8 +242,6 @@
return ret;
}
- char tmp[PATH_MAX];
- sprintf(tmp, "%s/%s.img", backup_path, name);
if (0 != (ret = unyaffs(tmp, mount_point, callback))) {
ui_print("Error while restoring %s!\n", mount_point);
return ret;
@@ -260,6 +275,7 @@
return print_and_error("MD5 mismatch!\n");
int ret;
+#ifndef BOARD_RECOVERY_IGNORE_BOOTABLES
if (restore_boot)
{
ui_print("Erasing boot before restore...\n");
@@ -272,6 +288,7 @@
return ret;
}
}
+#endif
if (restore_system && 0 != (ret = nandroid_restore_partition(backup_path, "SYSTEM:")))
return ret;
@@ -284,34 +301,14 @@
return ret;
#endif
- if (restore_data)
- {
- struct statfs s;
- sprintf(tmp, "%s/.android_secure.img", backup_path);
- if (0 != (ret = statfs(tmp, &s)))
- {
- ui_print(".android_secure.img not found. Skipping restore of applications on external storage.");
- }
- else
- {
- __system("mkdir -p /sdcard/.android_secure");
- if (0 != (ret = nandroid_restore_partition_extended(backup_path, "SDCARD:/.android_secure", 0)))
- return ret;
- }
- }
+ if (restore_data && 0 != (ret = nandroid_restore_partition_extended(backup_path, "SDCARD:/.android_secure", 0)))
+ return ret;
if (restore_cache && 0 != (ret = nandroid_restore_partition_extended(backup_path, "CACHE:", 0)))
return ret;
- if (restore_sdext)
- {
- struct statfs s;
- sprintf(tmp, "%s/sd-ext.img", backup_path);
- if (0 != (ret = statfs(tmp, &s)))
- ui_print("sd-ext.img not found. Skipping restore of /sd-ext.");
- else if (0 != (ret = nandroid_restore_partition(backup_path, "SDEXT:")))
- return ret;
- }
+ if (restore_sdext && 0 != (ret = nandroid_restore_partition(backup_path, "SDEXT:")))
+ return ret;
sync();
ui_set_background(BACKGROUND_ICON_NONE);
diff --git a/recovery.c b/recovery.c
index b0123db..fea1e7d 100644
--- a/recovery.c
+++ b/recovery.c
@@ -157,7 +157,9 @@
get_args(int *argc, char ***argv) {
struct bootloader_message boot;
memset(&boot, 0, sizeof(boot));
+#ifndef BOARD_HAS_NO_MISC_PARTITION
get_bootloader_message(&boot); // this may fail, leaving a zeroed structure
+#endif
if (boot.command[0] != 0 && boot.command[0] != 255) {
LOGI("Boot command: %.*s\n", sizeof(boot.command), boot.command);
@@ -214,9 +216,12 @@
strlcat(boot.recovery, (*argv)[i], sizeof(boot.recovery));
strlcat(boot.recovery, "\n", sizeof(boot.recovery));
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
set_bootloader_message(&boot);
+#endif
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
void
set_sdcard_update_bootloader_message()
{
@@ -226,6 +231,7 @@
strlcpy(boot.recovery, "recovery\n", sizeof(boot.recovery));
set_bootloader_message(&boot);
}
+#endif
// clear the recovery command and prepare to boot a (hopefully working) system,
// copy our log file to cache as well (for the system to read), and
@@ -260,10 +266,12 @@
check_and_fclose(log, LOG_FILE);
}
+#ifndef BOARD_HAS_NO_MISC_PARTITION
// Reset the bootloader message to revert to a normal main system boot.
struct bootloader_message boot;
memset(&boot, 0, sizeof(boot));
set_bootloader_message(&boot);
+#endif
// Remove the command file, so recovery won't repeat indefinitely.
char path[PATH_MAX] = "";
@@ -464,7 +472,9 @@
if (confirm_selection("Confirm install?", "Yes - Install /sdcard/update.zip"))
{
ui_print("\n-- Install from sdcard...\n");
+#ifndef BOARD_HAS_NO_MISC_PARTITION
set_sdcard_update_bootloader_message();
+#endif
int status = install_package(SDCARD_PACKAGE_FILE);
if (status != INSTALL_SUCCESS) {
ui_set_background(BACKGROUND_ICON_ERROR);
@@ -472,12 +482,16 @@
} else if (!ui_text_visible()) {
return; // reboot if logs aren't visible
} else {
+#ifndef BOARD_HAS_NO_MISC_PARTITION
if (firmware_update_pending()) {
ui_print("\nReboot via menu to complete\n"
"installation.\n");
} else {
ui_print("\nInstall from sdcard complete.\n");
}
+#else
+ ui_print("\nInstall from sdcard complete.\n");
+#endif
}
}
break;
@@ -524,8 +538,8 @@
return nandroid_main(argc, argv);
return busybox_driver(argc, argv);
}
- create_fstab();
__system("/sbin/postrecoveryboot.sh");
+ create_fstab();
int is_user_initiated_recovery = 0;
time_t start = time(NULL);
@@ -614,8 +628,10 @@
if (status != INSTALL_SUCCESS && !is_user_initiated_recovery) ui_set_background(BACKGROUND_ICON_ERROR);
if (status != INSTALL_SUCCESS || ui_text_visible()) prompt_and_wait();
+#ifndef BOARD_HAS_NO_MISC_PARTITION
// If there is a radio image pending, reboot now to install it.
maybe_install_firmware_update(send_intent);
+#endif
// Otherwise, get ready to boot the main system...
finish_recovery(send_intent);
diff --git a/roots.c b/roots.c
index da10ee7..fc2d177 100644
--- a/roots.c
+++ b/roots.c
@@ -50,7 +50,7 @@
{ "RECOVERY:", g_mtd_device, NULL, "recovery", "/", g_raw },
{ "SDCARD:", SDCARD_DEVICE_PRIMARY, SDCARD_DEVICE_SECONDARY, NULL, "/sdcard", "vfat" },
{ "SDEXT:", SDEXT_DEVICE, NULL, NULL, "/sd-ext", SDEXT_FILESYSTEM },
- { "SYSTEM:", g_mtd_device, NULL, "system", "/system", "yaffs2" },
+ { "SYSTEM:", SYSTEM_DEVICE, NULL, "system", "/system", SYSTEM_FILESYSTEM },
{ "MBM:", g_mtd_device, NULL, "mbm", NULL, g_raw },
{ "TMP:", NULL, NULL, NULL, "/tmp", NULL },
};
@@ -378,5 +378,13 @@
}
}
+#ifdef BOARD_USES_FFORMAT
+ if (info->filesystem != NULL && strcmp("rfs", info->filesystem) == 0) {
+ char cmd[PATH_MAX];
+ sprintf("/sbin/fformat %s", info->device);
+ return __system(cmd);
+ }
+#endif
+
return format_non_mtd_device(root);
}
diff --git a/roots.h b/roots.h
index e777093..a75de9c 100644
--- a/roots.h
+++ b/roots.h
@@ -60,6 +60,14 @@
#define CACHE_FILESYSTEM "yaffs2"
#endif
+#ifndef SYSTEM_DEVICE
+#define SYSTEM_DEVICE g_mtd_device
+#endif
+
+#ifndef SYSTEM_FILESYSTEM
+#define SYSTEM_FILESYSTEM "yaffs2"
+#endif
+
/* Any of the "root_path" arguments can be paths with relative
* components, like "SYSTEM:a/b/c".
*/