diff options
author | Andrij Abyzov <drolevar@gmail.com> | 2019-10-21 12:10:37 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-10-28 07:52:35 +0100 |
commit | 413b3c919c2c96d6e0224f86eb6d3d7ce3b79238 (patch) | |
tree | 951593fb6e8c8802947982aef12355465366b26f | |
parent | e0fecfef3463f9585fef878aba60b0b92b9ffc08 (diff) |
flashcp: Add option -A/--erase-all
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>
-rw-r--r-- | misc-utils/flashcp.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/misc-utils/flashcp.c b/misc-utils/flashcp.c index c46a5b4..b6ad2f9 100644 --- a/misc-utils/flashcp.c +++ b/misc-utils/flashcp.c @@ -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) { |