[Yaffs] Bad eraseblocks and NAND / ECC layouts

トップ ページ
添付ファイル:
Eメールのメッセージ
+ (text/plain)
このメッセージを削除
このメッセージに返信
著者: Noah Fontes
日付:  
To: yaffs
題目: [Yaffs] Bad eraseblocks and NAND / ECC layouts
Hi everyone,

This is more of a support question about NAND chips than anything, so I
hope I'm not too out-of-scope here. Here goes...

I have a RouterBOARD RB600 with a Hynix NAND chip and two partitions.
I've been trying to hack it to run Debian (on a newer kernel) as opposed
to RouterOS, which is the supported (Linux-based) operating system for it.

Until today, I've been booting it from a CompactFlash card. Several
months ago, when I was first getting it to work, I attempted to mount
the RouterOS partition on the NAND chip using yaffs, but something about
the ECC layout wasn't set properly (there was an incongruence between
MTD, the NAND driver, and yaffs somewhere; the device uses the "old"
Yaffs1 layout).

I fixed the problem today by digging through some mailing lists and
finally found a working ECC layout from another RouterBOARD device. It
works perfectly now. I can mount the filesystem read/write and make
changes to it.

So, background out of the way, here's the real question: Since I did the
initial incorrect mount, I've been getting these errors on boot:

[    0.659656] NAND device: Manufacturer ID: 0xad, Chip ID: 0x76 (Hynix
NAND 64MiB 3,3V 8-bit)
[    0.668095] Scanning device for bad blocks
[    0.672761] Bad eraseblock 9 at 0x000000024000
[    0.677874] Bad eraseblock 21 at 0x000000054000
[    0.708165] Bad eraseblock 481 at 0x000000784000
[    0.721850] Bad eraseblock 643 at 0x000000a0c000
[    0.738999] Bad eraseblock 867 at 0x000000d8c000
[    0.755586] Bad eraseblock 1081 at 0x0000010e4000
[    0.760680] Bad eraseblock 1088 at 0x000001100000
[    0.772493] Bad eraseblock 1215 at 0x0000012fc000
[    0.788061] Bad eraseblock 1409 at 0x000001604000
[    0.797237] Bad eraseblock 1489 at 0x000001744000
[    0.808830] Bad eraseblock 1612 at 0x000001930000
[    0.818971] Bad eraseblock 1709 at 0x000001ab4000
[    0.835082] Bad eraseblock 1913 at 0x000001de4000
[    0.843475] Bad eraseblock 1979 at 0x000001eec000
[    0.848905] Bad eraseblock 1992 at 0x000001f20000
[    0.886509] Bad eraseblock 2580 at 0x000002850000
[    0.954872] Bad eraseblock 3718 at 0x000003a18000
[    0.980691] Creating 2 MTD partitions on "NAND 64MiB 3,3V 8-bit":
[    0.986827] 0x000000000000-0x000000400000 : "RouterBOARD NAND Boot"
[    1.080314] uncorrectable error : <3>uncorrectable error :
<5>0x000000400000-0x000004000000 : "RouterBOARD NAND Main"


and later, during init:
[    4.773349] uncorrectable error : <3>uncorrectable error :
<3>end_request: I/O error, dev mtdblock0, sector 288
[    4.783548] Buffer I/O error on device mtdblock0, logical block 36
[    4.789862] uncorrectable error : <3>uncorrectable error :
<3>end_request: I/O error, dev mtdblock0, sector 296
[    4.800030] Buffer I/O error on device mtdblock0, logical block 37
[    4.806346] uncorrectable error : <3>uncorrectable error :
<3>end_request: I/O error, dev mtdblock0, sector 304
[    4.816515] Buffer I/O error on device mtdblock0, logical block 38
[    4.822827] uncorrectable error : <3>uncorrectable error :
<3>end_request: I/O error, dev mtdblock0, sector 312
[    4.832982] Buffer I/O error on device mtdblock0, logical block 39


The blocks aren't random; they're always the same value. The problem is
that I can't remember whether they occurred prior to my attempting to
mount the device incorrectly. The chip itself was only a few months old
at the time. Do these look like "authentic" bad blocks? Or is this
corruption due to the mismatch I described earlier?

I found a thread[1] that suggests that wiping the flash completely would
fix the problem if it were the latter. Is this worth trying, or should I
just live with the errors?

Any advice is most appreciated.

Thanks and regards,

Noah

[1]:
http://lists.aleph1.co.uk/lurker/message/20050607.085302.0f9d2926.en.html

- --
Noah Fontes
Cynigram
http://www.cynigram.com/
Phone: +1 919 349 9826