summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nanddump.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/nanddump.c b/nanddump.c
index 70b78f0..8b3d4a1 100644
--- a/nanddump.c
+++ b/nanddump.c
@@ -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)");