diff options
author | Magnus Eriksson <packetlss@gmail.com> | 2010-03-10 18:29:38 +0100 |
---|---|---|
committer | Koushik K. Dutta <koushd@gmail.com> | 2010-03-19 13:35:20 -0700 |
commit | 75b930f39633282acf5c5692e8f6df25b4c3e97a (patch) | |
tree | 0a2ab1cd63ab59c4e1e033ef962fac452b40d2f4 /mtdutils | |
parent | 5899ac9ca0eb871887e01644ba5b0d004597a98c (diff) | |
download | bootable_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.mk | 9 | ||||
-rw-r--r-- | mtdutils/erase_flash.c | 82 |
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; +} |