]> www.infradead.org Git - mtd-utils.git/commitdiff
flashcp: Add option -A/--erase-all
authorAndrij Abyzov <drolevar@gmail.com>
Mon, 21 Oct 2019 10:10:37 +0000 (12:10 +0200)
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>
Mon, 28 Oct 2019 06:52:35 +0000 (07:52 +0100)
Sometimes there's a need to erase the whole device when
programming an image, and not just the area under the
image itself.

Therefore, option -A/--erase-all has been added which
erases the whole device before writing the image.

Signed-off-by: Andrij Abyzov <drolevar@gmail.com>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
misc-utils/flashcp.c

index c46a5b45ea5c913b70a7b4e53aac52d217e0910d..b6ad2f9be9c3c673b3e2a2dad957bb1cf88a4e7d 100644 (file)
@@ -66,6 +66,7 @@
 #define FLAG_HELP              0x02
 #define FLAG_FILENAME  0x04
 #define FLAG_DEVICE            0x08
+#define FLAG_ERASE_ALL 0x10
 
 /* error levels */
 #define LOG_NORMAL     1
@@ -89,12 +90,13 @@ static NORETURN void showusage(bool error)
                        "\n"
                        "Flash Copy - Written by Abraham van der Merwe <abraham@2d3d.co.za>\n"
                        "\n"
-                       "usage: %1$s [ -v | --verbose ] <filename> <device>\n"
+                       "usage: %1$s [ -v | --verbose | -A | --erase-all ] <filename> <device>\n"
                        "       %1$s -h | --help\n"
                        "       %1$s -V | --version\n"
                        "\n"
                        "   -h | --help      Show this help message\n"
                        "   -v | --verbose   Show progress reports\n"
+                       "   -A | --erase-all Erases the whole device regardless of the image size\n"
                        "   -V | --version   Show version information and exit\n"
                        "   <filename>       File which you want to copy to flash\n"
                        "   <device>         Flash device to write to (e.g. /dev/mtd0, /dev/mtd1, etc.)\n"
@@ -179,10 +181,11 @@ int main (int argc,char *argv[])
 
        for (;;) {
                int option_index = 0;
-               static const char *short_options = "hvV";
+               static const char *short_options = "hvAV";
                static const struct option long_options[] = {
                        {"help", no_argument, 0, 'h'},
                        {"verbose", no_argument, 0, 'v'},
+                       {"erase-all", no_argument, 0, 'A'},
                        {"version", no_argument, 0, 'V'},
                        {0, 0, 0, 0},
                };
@@ -202,6 +205,10 @@ int main (int argc,char *argv[])
                                flags |= FLAG_VERBOSE;
                                DEBUG("Got FLAG_VERBOSE\n");
                                break;
+                       case 'A':
+                               flags |= FLAG_ERASE_ALL;
+                               DEBUG("Got FLAG_ERASE_ALL\n");
+                               break;
                        case 'V':
                                common_print_version();
                                exit(EXIT_SUCCESS);
@@ -257,8 +264,16 @@ int main (int argc,char *argv[])
 #warning "Check for smaller erase regions"
 
        erase.start = 0;
-       erase.length = (filestat.st_size + mtd.erasesize - 1) / mtd.erasesize;
-       erase.length *= mtd.erasesize;
+
+       if (flags & FLAG_ERASE_ALL)
+       {
+               erase.length = mtd.size;
+       }
+       else
+       {
+               erase.length = (filestat.st_size + mtd.erasesize - 1) / mtd.erasesize;
+               erase.length *= mtd.erasesize;
+       }
 
        if (flags & FLAG_VERBOSE)
        {