* Fix the dump of xloader and secondary.bin
- Looks like they protect these blocks by marking this section as badblocks. - We just ignore badblock marks when dumping the bootloader * Handle feof (^D) on the prompt
This commit is contained in:
1 parent
579dbe9837
commit
c1d909c415
1 file changed
+15
-17
+15
-17
@@ -241,7 +241,7 @@ closeall:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char *dumpfile)
|
int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char *dumpfile, int isbl)
|
||||||
{
|
{
|
||||||
unsigned char readbuf[2048];
|
unsigned char readbuf[2048];
|
||||||
int oobinfochanged = 0 ;
|
int oobinfochanged = 0 ;
|
||||||
@@ -332,9 +332,6 @@ int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char
|
|||||||
|
|
||||||
/* Dump the flash contents */
|
/* Dump the flash contents */
|
||||||
for (ofs = start_addr; ofs < end_addr ; ofs+=bs) {
|
for (ofs = start_addr; ofs < end_addr ; ofs+=bs) {
|
||||||
|
|
||||||
progressbar(ofs, end_addr);
|
|
||||||
|
|
||||||
// new eraseblock , check for bad block
|
// new eraseblock , check for bad block
|
||||||
if (blockstart != (ofs & (~meminfo.erasesize + 1))) {
|
if (blockstart != (ofs & (~meminfo.erasesize + 1))) {
|
||||||
blockstart = ofs & (~meminfo.erasesize + 1);
|
blockstart = ofs & (~meminfo.erasesize + 1);
|
||||||
@@ -344,7 +341,7 @@ int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (badblock) {
|
if (!isbl && badblock) {
|
||||||
if (omitbad)
|
if (omitbad)
|
||||||
continue;
|
continue;
|
||||||
memset (readbuf, 0xff, bs);
|
memset (readbuf, 0xff, bs);
|
||||||
@@ -376,10 +373,14 @@ int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char
|
|||||||
|
|
||||||
/* Write out page data */
|
/* Write out page data */
|
||||||
//if (pretty_print) dump_bytes(readbuf, bs);
|
//if (pretty_print) dump_bytes(readbuf, bs);
|
||||||
write(ofd, readbuf, bs);
|
progressbar(ofs, end_addr);
|
||||||
|
|
||||||
if (badblock) {
|
// OOB STUFF //
|
||||||
printf("Oops badblock %d at 0x%lx !\n", badblocks++, ofs);
|
if (omitoob)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!isbl&&badblock) {
|
||||||
|
printf("Oops badblock %d *ignored* at 0x%lx !\n", badblocks++, ofs);
|
||||||
memset (readbuf, 0xff, meminfo.oobsize);
|
memset (readbuf, 0xff, meminfo.oobsize);
|
||||||
} else {
|
} else {
|
||||||
/* Read OOB data and exit on failure */
|
/* Read OOB data and exit on failure */
|
||||||
@@ -390,9 +391,6 @@ int nanddump(char *mtddev, unsigned long start_addr, unsigned long length, char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (omitoob)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* Write out OOB data */
|
/* Write out OOB data */
|
||||||
D dump_bytes(oobbuf, meminfo.oobsize);
|
D dump_bytes(oobbuf, meminfo.oobsize);
|
||||||
write(ofd, oobbuf, meminfo.oobsize);
|
write(ofd, oobbuf, meminfo.oobsize);
|
||||||
@@ -539,20 +537,20 @@ int reverse_extract_pieces(char *dir)
|
|||||||
// TODO: get values from /proc/mtd ???
|
// TODO: get values from /proc/mtd ???
|
||||||
|
|
||||||
//rf_extract("/dev/mtd0", is_n800()?0x200:0, 0x003600, "xloader.bin");
|
//rf_extract("/dev/mtd0", is_n800()?0x200:0, 0x003600, "xloader.bin");
|
||||||
nanddump("/dev/mtd0", is_n800()?0x200:0, 0, "xloader.bin");
|
nanddump("/dev/mtd0", is_n800()?0x200:0, 0x4000, "xloader.bin", 1); // 0x3600 size?
|
||||||
//rf_extract("/dev/mtd0", 0x004000, 0x01ffff, "secondary.bin");
|
//rf_extract("/dev/mtd0", 0x004000, 0x01ffff, "secondary.bin");
|
||||||
nanddump("/dev/mtd0", 0x004000, 0, "secondary.bin");
|
nanddump("/dev/mtd0", 0x004000, 0, "secondary.bin", 1);
|
||||||
nanddump("/dev/mtd1", 0x060000, 0, "config.bin");
|
nanddump("/dev/mtd1", 0, 0, "config.bin", 0);
|
||||||
//rf_extract("/dev/mtd2", 0x000800, 0x200000, "zImage");
|
//rf_extract("/dev/mtd2", 0x000800, 0x200000, "zImage");
|
||||||
nanddump("/dev/mtd2", 0x000800, 0, "zImage");
|
nanddump("/dev/mtd2", 0x000800, 0, "zImage", 0);
|
||||||
//rf_extract("/dev/mtd3", 0x000000, 0x1D00000, "initfs.jffs2");
|
//rf_extract("/dev/mtd3", 0x000000, 0x1D00000, "initfs.jffs2");
|
||||||
nanddump("/dev/mtd3", 0x000000, 0, "initfs.jffs2");
|
nanddump("/dev/mtd3", 0x000000, 0, "initfs.jffs2", 0);
|
||||||
|
|
||||||
printf("\n\nExtract rootfs? (y/N): "); fflush(stdout);
|
printf("\n\nExtract rootfs? (y/N): "); fflush(stdout);
|
||||||
read(0, &reply, 1);
|
read(0, &reply, 1);
|
||||||
if (reply=='y'||reply=='Y') {
|
if (reply=='y'||reply=='Y') {
|
||||||
//rf_extract("/dev/mtd4", 0x000000, 0x6000000, "rootfs.jffs2");
|
//rf_extract("/dev/mtd4", 0x000000, 0x6000000, "rootfs.jffs2");
|
||||||
nanddump("/dev/mtd4", 0x000000, 0, "rootfs.jffs2");
|
nanddump("/dev/mtd4", 0x000000, 0, "rootfs.jffs2", 0);
|
||||||
} else printf("*** Ignoring rootfs\n");
|
} else printf("*** Ignoring rootfs\n");
|
||||||
|
|
||||||
printf("\n\nStrip dumped files? (y/N): "); fflush(stdout);
|
printf("\n\nStrip dumped files? (y/N): "); fflush(stdout);
|
||||||
|
|||||||
Reference in new issue
Block a user