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 ...
howhowwork
2007-01-15