Hi ,
I have mips board au1200 with a Samsung
K9f1208V 64MB NAND flash which
is 528bytes/page and nor flash with
32M. i have established a jffs2
filesystem as root filesystem
in nor flash with 32M ,my sytem is ok if
only use nor flash . now i plan to mount nand flash under
jffs2 filesystem . I downloaded the
newest yaffs2 code from "http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs"
and place it to linux kernel 2.6.11. I
select yafss and mtd support from muneconfig. After make,
I got the error
messages
at the
end:
all of transport is
passed
1. i boot my board using jffs2 filesystem as
root filesystem
# cat /proc/mtd
dev: size erasesize name
mtd0: 03c00000 00020000 "User11
FS"
mtd1: 00100000 00020000
"YAMON"
mtd2: 002c0000 00020000 "raw
kernel"
mtd3: 00800000 00004000 "NAND FSa
0"
mtd4: 03800000 00004000 "NAND FSa
1"
2. using the tools "flash_eraseall
/dev/mtd6 ",passed
3. # mount
-tyaffs /dev/mtdblock4 /mnt/
yaffs: dev is 32505860 name is
"mtdblock4"
yaffs: Attempting MTD mount on 31.4,
"mtdblock4"
4. then there are erros when copying data to mnt's directory
the questions :
when copy less 120k data , no errors,and
the data is correct after i reboot
however , copying more 100k data ,there
are the following errors:
.........................................
**>>mtd ecc error unfixed on chunk
113984:0
**>>mtd ecc error unfixed on chunk
113984:1
**>>Block 3562 marked for
retirement
**>> yaffs chunk 114016 was not
erased
**>> Erasure failed
3563
**>> Block 3563
retired
......
**>> yaffs chunk 416 was not
erased
**>> Erasure failed
13
......
yaffs tragedy: no more eraased
blocks
!!!!!!!!! Allocator out
!!!!!!!!!!!!!!!!!
......
**>>mtd ecc error unfixed on chunk
1375:0
**>>mtd ecc error unfixed on chunk
1375:1
**>>Block 42 marked for
retirement
yaffs tragedy: no more eraased
blocks
!!!!!!!!! Allocator out
!!!!!!!!!!!!!!!!!
.........................................
then i try to exc command
"df"
/mnt #
df
Filesystem
1k-blocks
Used Available Use% Mounted on
/dev/mtdblock0
61440
27308
34132 44%
/
tmpfs
512
60
452 12%
/var
/dev/loop1
1244
1244
0 100% /root/test
/dev/mtdblock4
57344
57344
0 100% /mnt
exc command "reboot"
/mnt
#df
Filesystem
1k-blocks
Used Available Use% Mounted on
/dev/mtdblock0
61440
27308 34132 44%
/
tmpfs
512
60
452 12%
/var
/dev/loop1
1244
1244
0 100% /root/test
/dev/mtdblock4
57344
57344
0 2% /mnt
why ...
what is somthing wrong
?
according to some suggustion , I changed my oob placement as
following :
/* Define default oob placement schemes for large and small page devices
*/
static struct nand_oobinfo nand_oob_8 =
{
.useecc = MTD_NANDECC_AUTOPLACE,
.eccbytes = 3,
.eccpos = {0, 1, 2},
.oobfree = { {3, 2}, {6, 2} }
};
static struct nand_oobinfo nand_oob_16 =
{
.useecc = MTD_NANDECC_AUTOPLACE,
.eccbytes = 6,
.eccpos = {0, 1, 2, 3, 6, 7},
.oobfree = { {8, 8} }
};
static struct nand_oobinfo nand_oob_64 =
{
.useecc = MTD_NANDECC_AUTOPLACE,
.eccbytes = 24,
.eccpos = {
40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63},
.oobfree = { {2, 38} }
};
--------------------------------------------------------------------------
While oob placements definition in
yaffs_mtdif.c
static struct nand_oobinfo yaffs_oobinfo
= {
.useecc =
1,
.eccbytes =
6,
.eccpos = {8, 9, 10, 13, 14,
15}
};
then i change the struct " nand_oobinfo
nand_oob_16" into
static struct nand_oobinfo nand_oob_16 =
{
.useecc =
1,
.eccbytes =
6,
.eccpos = {8, 9, 10, 13, 14,
15},
};
but the errors is the same as before. Anyclues
what
could be wrong
..
Any help will be highly
appreciated.
regards
please help me out ...