From a8f265dd6f764188d07ea2637d5638b8c64e4a6b Mon Sep 17 00:00:00 2001 From: Donovan Bartish Date: Thu, 10 Nov 2011 12:55:22 -0600 Subject: [PATCH 1/3] Add RFS format support Change-Id: Ifd1e5ce9875c3eaacc1cec1759b67e672894e279 --- bmlutils/bmlutils.c | 34 ++++++++++++++++++++++++++++++++++ bmlutils/bmlutils.h | 6 ++++++ extendedcommands.c | 13 +++++++++++++ utilities/Android.mk | 13 +++++++++++++ utilities/fat.format | Bin 0 -> 80180 bytes 5 files changed, 66 insertions(+) create mode 100644 bmlutils/bmlutils.h create mode 100755 utilities/fat.format diff --git a/bmlutils/bmlutils.c b/bmlutils/bmlutils.c index a6b5415..c5de8b9 100644 --- a/bmlutils/bmlutils.c +++ b/bmlutils/bmlutils.c @@ -171,3 +171,37 @@ int cmd_bml_get_partition_device(const char *partition, char *device) { return -1; } + +int run_exec_process ( char **argv); + +int format_rfs_device (const char *device, const char *path) { + const char *fatsize = "32"; + const char *sectorsize = "1"; + + if (strcmp(path, "/datadata") == 0 || strcmp(path, "/cache") == 0) { + fatsize = "16"; + } + + // Just in case /data sector size needs to be altered + else if (strcmp(path, "/data") == 0 ) { + sectorsize = "1"; + } + + // dump 10KB of zeros to partition before format due to fat.format bug + char ofdevice[PATH_MAX]; + snprintf(ofdevice, sizeof(ofdevice), "of=%s", device); + const char *rfszerodump[] = {"/sbin/dd", "if=/dev/zero", ofdevice, "bs=4096", "count=10", NULL}; + if(run_exec_process((char **)rfszerodump)) { + printf("failure while running rfszerodump\n"); + return -1; + } + + // Run fat.format + const char *fatformat[] = {"/sbin/fat.format", "-F", fatsize, "-S", "4096", "-s", sectorsize, device, NULL}; + if(run_exec_process((char **)fatformat)) { + printf("failure while running fat.format\n"); + return -1; + } + + return 0; +} diff --git a/bmlutils/bmlutils.h b/bmlutils/bmlutils.h new file mode 100644 index 0000000..e6ffeee --- /dev/null +++ b/bmlutils/bmlutils.h @@ -0,0 +1,6 @@ +#ifndef BMLUTILS_H_ +#define BMLUTILS_H_ + +int format_rfs_device (const char *device, const char *path); + +#endif // BMLUTILS_H_ diff --git a/extendedcommands.c b/extendedcommands.c index dfd196c..8e9ee54 100644 --- a/extendedcommands.c +++ b/extendedcommands.c @@ -41,6 +41,7 @@ #include "edify/expr.h" #include #include "mtdutils/mtdutils.h" +#include "bmlutils/bmlutils.h" int signature_check_enabled = 1; @@ -450,6 +451,18 @@ int format_device(const char *device, const char *path, const char *fs_type) { return -1; } + if (strcmp(fs_type, "rfs") == 0) { + if (ensure_path_unmounted(path) != 0) { + LOGE("format_volume failed to unmount \"%s\"\n", v->mount_point); + return -1; + } + if (0 != format_rfs_device(device, path)) { + LOGE("format_volume: format_rfs_device failed on %s\n", device); + return -1; + } + return 0; + } + if (strcmp(v->mount_point, path) != 0) { return format_unknown_device(v->device, path, NULL); } diff --git a/utilities/Android.mk b/utilities/Android.mk index ffaf0e7..14dace0 100755 --- a/utilities/Android.mk +++ b/utilities/Android.mk @@ -61,3 +61,16 @@ include $(BUILD_PREBUILT) endif + +ifdef BOARD_HAS_RFS_FILESYSTEM + +include $(CLEAR_VARS) +LOCAL_MODULE := fat.format +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +endif + diff --git a/utilities/fat.format b/utilities/fat.format new file mode 100755 index 0000000000000000000000000000000000000000..6a743e777c6cd20f3e22fbb8663e3a72bf5dccfd GIT binary patch literal 80180 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 literal 0 HcmV?d00001 From 7ef88155e0310549b739064c96db401165f363d6 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Fri, 11 Nov 2011 00:26:32 -0800 Subject: [PATCH 2/3] fix advanced restore Change-Id: I0805799343800912f8ea2caf9d06be4d59e9f4bf --- extendedcommands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extendedcommands.c b/extendedcommands.c index dfd196c..3c0fac0 100644 --- a/extendedcommands.c +++ b/extendedcommands.c @@ -732,7 +732,7 @@ void show_nandroid_advanced_restore_menu(const char* path) }; char tmp[PATH_MAX]; - sprintf(tmp, "%s/clockworkmod/backup", path); + sprintf(tmp, "%s/clockworkmod/backup/", path); char* file = choose_file_menu(tmp, NULL, advancedheaders); if (file == NULL) return; From 88a233d5faa82e51050bdfacfebaf9624b073797 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Fri, 11 Nov 2011 00:41:57 -0800 Subject: [PATCH 3/3] Fix up bmlutils to include fat.format automatically if rfs is found in the recovery.fstab. Use __system rather than run_exec_process. Change-Id: I669bfb75cf0cc00364b815b54130c01786866406 --- bmlutils/bmlutils.c | 16 +++++++--------- utilities/Android.mk | 10 +++------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/bmlutils/bmlutils.c b/bmlutils/bmlutils.c index c5de8b9..a7b09b4 100644 --- a/bmlutils/bmlutils.c +++ b/bmlutils/bmlutils.c @@ -172,8 +172,6 @@ int cmd_bml_get_partition_device(const char *partition, char *device) return -1; } -int run_exec_process ( char **argv); - int format_rfs_device (const char *device, const char *path) { const char *fatsize = "32"; const char *sectorsize = "1"; @@ -188,17 +186,17 @@ int format_rfs_device (const char *device, const char *path) { } // dump 10KB of zeros to partition before format due to fat.format bug - char ofdevice[PATH_MAX]; - snprintf(ofdevice, sizeof(ofdevice), "of=%s", device); - const char *rfszerodump[] = {"/sbin/dd", "if=/dev/zero", ofdevice, "bs=4096", "count=10", NULL}; - if(run_exec_process((char **)rfszerodump)) { - printf("failure while running rfszerodump\n"); + char cmd[PATH_MAX]; + + sprintf(cmd, "/sbin/dd if=/dev/zero of=%s bs=4096 count=10", device); + if(__system(cmd)) { + printf("failure while zeroing rfs partition.\n"); return -1; } // Run fat.format - const char *fatformat[] = {"/sbin/fat.format", "-F", fatsize, "-S", "4096", "-s", sectorsize, device, NULL}; - if(run_exec_process((char **)fatformat)) { + sprintf(cmd, "/sbin/fat.format -F %s -S 4096 -s %s %s", fatsize, sectorsize, device); + if(__system(cmd)) { printf("failure while running fat.format\n"); return -1; } diff --git a/utilities/Android.mk b/utilities/Android.mk index 14dace0..7d95449 100755 --- a/utilities/Android.mk +++ b/utilities/Android.mk @@ -58,12 +58,10 @@ else LOCAL_SRC_FILES := ../../../$(BOARD_MKE2FS) endif include $(BUILD_PREBUILT) - - endif -ifdef BOARD_HAS_RFS_FILESYSTEM - +BOARD_RECOVERY_RFS_CHECK := $(shell grep rfs $(TARGET_DEVICE_DIR)/recovery.fstab) +ifneq ($(BOARD_RECOVERY_RFS_CHECK),) include $(CLEAR_VARS) LOCAL_MODULE := fat.format LOCAL_MODULE_TAGS := eng @@ -71,6 +69,4 @@ LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) - -endif - +endif \ No newline at end of file