aboutsummaryrefslogtreecommitdiffstats
path: root/mtdutils
diff options
context:
space:
mode:
authorMagnus Eriksson <packetlss@gmail.com>2010-03-10 18:29:38 +0100
committerKoushik K. Dutta <koushd@gmail.com>2010-03-19 13:35:20 -0700
commit75b930f39633282acf5c5692e8f6df25b4c3e97a (patch)
tree0a2ab1cd63ab59c4e1e033ef962fac452b40d2f4 /mtdutils
parent5899ac9ca0eb871887e01644ba5b0d004597a98c (diff)
downloadbootable_recovery-75b930f39633282acf5c5692e8f6df25b4c3e97a.zip
bootable_recovery-75b930f39633282acf5c5692e8f6df25b4c3e97a.tar.gz
bootable_recovery-75b930f39633282acf5c5692e8f6df25b4c3e97a.tar.bz2
added erase_flash, utility to erase mtd partition
primarily for platforms without engineering SPL or native fastboot support
Diffstat (limited to 'mtdutils')
-rw-r--r--mtdutils/Android.mk9
-rw-r--r--mtdutils/erase_flash.c82
2 files changed, 91 insertions, 0 deletions
diff --git a/mtdutils/Android.mk b/mtdutils/Android.mk
index 06ba854..e83cbf3 100644
--- a/mtdutils/Android.mk
+++ b/mtdutils/Android.mk
@@ -29,6 +29,14 @@ LOCAL_SHARED_LIBRARIES := libcutils libc
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
+LOCAL_SRC_FILES := erase_flash.c
+LOCAL_MODULE := erase_flash
+LOCAL_MODULE_TAGS := eng
+LOCAL_STATIC_LIBRARIES := libmtdutils
+LOCAL_SHARED_LIBRARIES := libcutils libc
+include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
LOCAL_SRC_FILES := flash_image.c
LOCAL_MODULE := libflash_image
LOCAL_CFLAGS += -Dmain=flash_image_main
@@ -46,6 +54,7 @@ LOCAL_MODULE_PATH := $(TARGET_OUT)/utilities
LOCAL_STATIC_LIBRARIES := libmtdutils libcutils libc
include $(BUILD_EXECUTABLE)
+
include $(CLEAR_VARS)
LOCAL_SRC_FILES := dump_image.c
LOCAL_MODULE := libdump_image
diff --git a/mtdutils/erase_flash.c b/mtdutils/erase_flash.c
new file mode 100644
index 0000000..111e637
--- /dev/null
+++ b/mtdutils/erase_flash.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * Portions Copyright (C) 2010 Magnus Eriksson <packetlss@gmail.com>
+ *
+ * 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 <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <fcntl.h>
+#include <mtd/mtd-user.h>
+
+#include "cutils/log.h"
+#include "mtdutils.h"
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "erase_flash"
+
+void die(const char *msg, ...) {
+ int err = errno;
+ va_list args;
+ va_start(args, msg);
+ char buf[1024];
+ vsnprintf(buf, sizeof(buf), msg, args);
+ va_end(args);
+
+ if (err != 0) {
+ strlcat(buf, ": ", sizeof(buf));
+ strlcat(buf, strerror(err), sizeof(buf));
+ }
+
+ fprintf(stderr, "%s\n", buf);
+ LOGE("%s\n", buf);
+ exit(1);
+}
+
+/* Erase a mtd partition */
+
+int main(int argc, char **argv) {
+ MtdWriteContext *out;
+ size_t erased;
+ size_t total_size;
+ size_t erase_size;
+
+ if (argc != 2) {
+ fprintf(stderr, "usage: %s <partition>\n", argv[0]);
+ return 2;
+ }
+
+ if (mtd_scan_partitions() <= 0) die("error scanning partitions");
+ const MtdPartition *partition = mtd_find_partition_by_name(argv[1]);
+ if (partition == NULL) die("can't find %s partition", argv[1]);
+
+ out = mtd_write_partition(partition);
+ if (out == NULL) die("could not estabilish write context for %s", argv[1]);
+
+ // do the actual erase, -1 = full partition erase
+ erased = mtd_erase_blocks(out, -1);
+
+ // erased = bytes erased, if zero, something borked
+ if (!erased) die("error erasing %s", argv[1]);
+
+ return 0;
+}