* Fix the bug that nandwrite can't write the yaffs2 image correctly @ 2010-05-18 12:23 Stanley.Miao 2010-05-18 12:23 ` [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND Stanley.Miao 0 siblings, 1 reply; 7+ messages in thread From: Stanley.Miao @ 2010-05-18 12:23 UTC (permalink / raw) To: linux-mtd; +Cc: yaffs Many people encountered this problerm, creating a image by mkyaffs2image, then write it into a nand falsh with nandwrite, then mounted failed. This is because mkyaffs2image didn't know the oob layout of a NAND flash, so it put the yaffs2 tags at the offset 0 of oob area, nandwrite didn't put it at right position when writing oobdata. Stanley. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND 2010-05-18 12:23 Fix the bug that nandwrite can't write the yaffs2 image correctly Stanley.Miao @ 2010-05-18 12:23 ` Stanley.Miao 2010-05-18 12:23 ` [PATCH 2/2] check if the start address is page-aligned Stanley.Miao 2010-05-20 2:17 ` [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND stanley.miao 0 siblings, 2 replies; 7+ messages in thread From: Stanley.Miao @ 2010-05-18 12:23 UTC (permalink / raw) To: linux-mtd; +Cc: yaffs The tool mkyaffs2image doesn't know the oob layout of a NAND flash, so it puts the yaffs2 tags at the offset 0 of oob area, as a result, the image generated by mkyaffs2image is different with the image dumped by nanddump. Now adding a parameter "-r" for nandwrite to differentiate these images. Write a image generated by mkyaffs2image: $> nandwrite -a -o /dev/mtd3 yaffs2.bin Write a image dumped by nanddump: $> nandwrite -a -r /dev/mtd3 image.bin Signed-off-by: Stanley.Miao <stanley.miao@windriver.com> --- nandwrite.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-) diff --git a/nandwrite.c b/nandwrite.c index b77edd6..1e30ad1 100644 --- a/nandwrite.c +++ b/nandwrite.c @@ -80,6 +80,7 @@ static void display_help (void) " -m, --markbad Mark blocks bad if write fails\n" " -n, --noecc Write without ecc\n" " -o, --oob Image contains oob data\n" +" -r, --raw Image contains the raw oob data dumped by nanddump\n" " -s addr, --start=addr Set start address (default is 0)\n" " -p, --pad Pad to page size\n" " -b, --blockalign=1|2|4 Set multiple of eraseblocks to align to\n" @@ -110,6 +111,7 @@ static const char *mtd_device, *img; static int mtdoffset = 0; static bool quiet = false; static bool writeoob = false; +static bool rawoob = false; static bool autoplace = false; static bool markbad = false; static bool forcejffs2 = false; @@ -125,7 +127,7 @@ static void process_options (int argc, char * const argv[]) for (;;) { int option_index = 0; - static const char *short_options = "ab:fjmnopqs:y"; + static const char *short_options = "ab:fjmnopqrs:y"; static const struct option long_options[] = { {"help", no_argument, 0, 0}, {"version", no_argument, 0, 0}, @@ -138,6 +140,7 @@ static void process_options (int argc, char * const argv[]) {"oob", no_argument, 0, 'o'}, {"pad", no_argument, 0, 'p'}, {"quiet", no_argument, 0, 'q'}, + {"raw", no_argument, 0, 'r'}, {"start", required_argument, 0, 's'}, {"yaffs", no_argument, 0, 'y'}, {0, 0, 0, 0}, @@ -187,6 +190,10 @@ static void process_options (int argc, char * const argv[]) case 'p': pad = true; break; + case 'r': + rawoob = true; + writeoob = true; + break; case 's': mtdoffset = strtol (optarg, NULL, 0); break; @@ -583,6 +590,7 @@ int main(int argc, char * const argv[]) oob.ptr = oobreadbuf; } else { int i, start, len; + int tags_pos = 0; /* * We use autoplacement and have the oobinfo with the autoplacement * information from the kernel available @@ -595,9 +603,13 @@ int main(int argc, char * const argv[]) /* Set the reserved bytes to 0xff */ start = old_oobinfo.oobfree[i][0]; len = old_oobinfo.oobfree[i][1]; - memcpy(oobbuf + start, - oobreadbuf + start, - len); + if (rawoob) + memcpy(oobbuf + start, + oobreadbuf + start, len); + else + memcpy(oobbuf + start, + oobreadbuf + tags_pos, len); + tags_pos += len; } } else { /* Set at least the ecc byte positions to 0xff */ -- 1.5.4.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] check if the start address is page-aligned. 2010-05-18 12:23 ` [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND Stanley.Miao @ 2010-05-18 12:23 ` Stanley.Miao 2010-05-22 5:39 ` Artem Bityutskiy 2010-05-20 2:17 ` [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND stanley.miao 1 sibling, 1 reply; 7+ messages in thread From: Stanley.Miao @ 2010-05-18 12:23 UTC (permalink / raw) To: linux-mtd; +Cc: yaffs Only page-aligned address is permitted in NAND subsystem. Signed-off-by: Stanley.Miao <stanley.miao@windriver.com> --- nandwrite.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/nandwrite.c b/nandwrite.c index 1e30ad1..fbb1153 100644 --- a/nandwrite.c +++ b/nandwrite.c @@ -306,6 +306,14 @@ int main(int argc, char * const argv[]) close(fd); exit (EXIT_FAILURE); } + + if (mtdoffset & (meminfo.writesize - 1)) { + fprintf(stderr, "The start address is not page-aligned !\n" + "The pagesize of this NAND Flash is 0x%x.\n", + meminfo.writesize); + close(fd); + exit(EXIT_FAILURE); + } if (autoplace) { /* Read the current oob info */ -- 1.5.4.3 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] check if the start address is page-aligned. 2010-05-18 12:23 ` [PATCH 2/2] check if the start address is page-aligned Stanley.Miao @ 2010-05-22 5:39 ` Artem Bityutskiy 0 siblings, 0 replies; 7+ messages in thread From: Artem Bityutskiy @ 2010-05-22 5:39 UTC (permalink / raw) To: Stanley.Miao; +Cc: linux-mtd, yaffs On Tue, 2010-05-18 at 20:23 +0800, Stanley.Miao wrote: > Only page-aligned address is permitted in NAND subsystem. > > Signed-off-by: Stanley.Miao <stanley.miao@windriver.com> Pushed both patches to the mtd-utils repo, thanks. However, I had to fix a tiny white-space damage for you: Applying: nandwrite: check if the start address is page-aligned. /home/dedekind/git/mtd-utils/.git/rebase-apply/patch:13: trailing whitespace. -- Best Regards, Artem Bityutskiy (Артём Битюцкий) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND 2010-05-18 12:23 ` [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND Stanley.Miao 2010-05-18 12:23 ` [PATCH 2/2] check if the start address is page-aligned Stanley.Miao @ 2010-05-20 2:17 ` stanley.miao 2010-05-24 5:51 ` Artem Bityutskiy 1 sibling, 1 reply; 7+ messages in thread From: stanley.miao @ 2010-05-20 2:17 UTC (permalink / raw) To: Artem.Bityutskiy; +Cc: linux-mtd, yaffs Hi, Artem, Any comments ? Stanley. Stanley.Miao wrote: > The tool mkyaffs2image doesn't know the oob layout of a NAND flash, so it > puts the yaffs2 tags at the offset 0 of oob area, as a result, the image > generated by mkyaffs2image is different with the image dumped by nanddump. > Now adding a parameter "-r" for nandwrite to differentiate these images. > > Write a image generated by mkyaffs2image: > $> nandwrite -a -o /dev/mtd3 yaffs2.bin > > Write a image dumped by nanddump: > $> nandwrite -a -r /dev/mtd3 image.bin > > Signed-off-by: Stanley.Miao <stanley.miao@windriver.com> > --- > nandwrite.c | 20 ++++++++++++++++---- > 1 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/nandwrite.c b/nandwrite.c > index b77edd6..1e30ad1 100644 > --- a/nandwrite.c > +++ b/nandwrite.c > @@ -80,6 +80,7 @@ static void display_help (void) > " -m, --markbad Mark blocks bad if write fails\n" > " -n, --noecc Write without ecc\n" > " -o, --oob Image contains oob data\n" > +" -r, --raw Image contains the raw oob data dumped by nanddump\n" > " -s addr, --start=addr Set start address (default is 0)\n" > " -p, --pad Pad to page size\n" > " -b, --blockalign=1|2|4 Set multiple of eraseblocks to align to\n" > @@ -110,6 +111,7 @@ static const char *mtd_device, *img; > static int mtdoffset = 0; > static bool quiet = false; > static bool writeoob = false; > +static bool rawoob = false; > static bool autoplace = false; > static bool markbad = false; > static bool forcejffs2 = false; > @@ -125,7 +127,7 @@ static void process_options (int argc, char * const argv[]) > > for (;;) { > int option_index = 0; > - static const char *short_options = "ab:fjmnopqs:y"; > + static const char *short_options = "ab:fjmnopqrs:y"; > static const struct option long_options[] = { > {"help", no_argument, 0, 0}, > {"version", no_argument, 0, 0}, > @@ -138,6 +140,7 @@ static void process_options (int argc, char * const argv[]) > {"oob", no_argument, 0, 'o'}, > {"pad", no_argument, 0, 'p'}, > {"quiet", no_argument, 0, 'q'}, > + {"raw", no_argument, 0, 'r'}, > {"start", required_argument, 0, 's'}, > {"yaffs", no_argument, 0, 'y'}, > {0, 0, 0, 0}, > @@ -187,6 +190,10 @@ static void process_options (int argc, char * const argv[]) > case 'p': > pad = true; > break; > + case 'r': > + rawoob = true; > + writeoob = true; > + break; > case 's': > mtdoffset = strtol (optarg, NULL, 0); > break; > @@ -583,6 +590,7 @@ int main(int argc, char * const argv[]) > oob.ptr = oobreadbuf; > } else { > int i, start, len; > + int tags_pos = 0; > /* > * We use autoplacement and have the oobinfo with the autoplacement > * information from the kernel available > @@ -595,9 +603,13 @@ int main(int argc, char * const argv[]) > /* Set the reserved bytes to 0xff */ > start = old_oobinfo.oobfree[i][0]; > len = old_oobinfo.oobfree[i][1]; > - memcpy(oobbuf + start, > - oobreadbuf + start, > - len); > + if (rawoob) > + memcpy(oobbuf + start, > + oobreadbuf + start, len); > + else > + memcpy(oobbuf + start, > + oobreadbuf + tags_pos, len); > + tags_pos += len; > } > } else { > /* Set at least the ecc byte positions to 0xff */ > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND 2010-05-20 2:17 ` [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND stanley.miao @ 2010-05-24 5:51 ` Artem Bityutskiy 2010-05-24 6:21 ` stanley.miao 0 siblings, 1 reply; 7+ messages in thread From: Artem Bityutskiy @ 2010-05-24 5:51 UTC (permalink / raw) To: stanley.miao; +Cc: Artem.Bityutskiy, linux-mtd, yaffs On Thu, 2010-05-20 at 10:17 +0800, stanley.miao wrote: > Hi, Artem, > > Any comments ? > > Stanley. Sorry, but what else kind of comments would you like to see in addition to these: http://lists.infradead.org/pipermail/linux-mtd/2010-May/030280.html ? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND 2010-05-24 5:51 ` Artem Bityutskiy @ 2010-05-24 6:21 ` stanley.miao 0 siblings, 0 replies; 7+ messages in thread From: stanley.miao @ 2010-05-24 6:21 UTC (permalink / raw) To: dedekind1; +Cc: Artem.Bityutskiy, linux-mtd, yaffs Sorry, I didn't receive your email. There must be some problems with our mail server. Stanley. Artem Bityutskiy wrote: > On Thu, 2010-05-20 at 10:17 +0800, stanley.miao wrote: > >> Hi, Artem, >> >> Any comments ? >> >> Stanley. >> > > Sorry, but what else kind of comments would you like to see in addition > to these: > > http://lists.infradead.org/pipermail/linux-mtd/2010-May/030280.html > > ? > > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-05-24 6:11 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-05-18 12:23 Fix the bug that nandwrite can't write the yaffs2 image correctly Stanley.Miao 2010-05-18 12:23 ` [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND Stanley.Miao 2010-05-18 12:23 ` [PATCH 2/2] check if the start address is page-aligned Stanley.Miao 2010-05-22 5:39 ` Artem Bityutskiy 2010-05-20 2:17 ` [Yaffs] [PATCH 1/2] Fix the bug of writing a yaffs2 image to NAND stanley.miao 2010-05-24 5:51 ` Artem Bityutskiy 2010-05-24 6:21 ` stanley.miao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).