diff options
-rw-r--r-- | nanddump.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -50,6 +50,7 @@ static void display_help (void) "-f file --file=file Dump to file\n" "-l length --length=length Length\n" "-n --noecc Read without error correction\n" +"-N --nobad Read without bad block skipping\n" "-o --omitoob Omit oob data\n" "-b --omitbad Omit bad blocks from the dump\n" "-p --prettyprint Print nice (hexdump)\n" @@ -76,6 +77,7 @@ static void display_version (void) static bool pretty_print = false; // print nice static bool noecc = false; // don't error correct +static bool nobad = false; // don't skip bad blocks static bool omitoob = false; // omit oob data static unsigned long start_addr; // start address static unsigned long length; // dump length @@ -92,7 +94,7 @@ static void process_options (int argc, char * const argv[]) for (;;) { int option_index = 0; - static const char *short_options = "bs:f:l:opqnca"; + static const char *short_options = "bs:f:l:opqnNca"; static const struct option long_options[] = { {"help", no_argument, 0, 0}, {"version", no_argument, 0, 0}, @@ -105,6 +107,7 @@ static void process_options (int argc, char * const argv[]) {"startaddress", required_argument, 0, 's'}, {"length", required_argument, 0, 'l'}, {"noecc", no_argument, 0, 'n'}, + {"nobad", no_argument, 0, 'N'}, {"quiet", no_argument, 0, 'q'}, {0, 0, 0, 0}, }; @@ -158,6 +161,9 @@ static void process_options (int argc, char * const argv[]) case 'n': noecc = true; break; + case 'N': + nobad = true; + break; case '?': error++; break; @@ -390,7 +396,9 @@ int main(int argc, char * const argv[]) for (ofs = start_addr; ofs < end_addr ; ofs+=bs) { // new eraseblock , check for bad block - if (blockstart != (ofs & (~meminfo.erasesize + 1))) { + if (nobad) { + badblock = 0; + } else if (blockstart != (ofs & (~meminfo.erasesize + 1))) { blockstart = ofs & (~meminfo.erasesize + 1); if ((badblock = ioctl(fd, MEMGETBADBLOCK, &blockstart)) < 0) { perror("ioctl(MEMGETBADBLOCK)"); |