yaffs格式的nand会自动更改文件大小,怎么办?
yaffs格式的nand会自动更改文件大小,怎么办?
以前用的jffs2, 现在改用yaff2,其实也就是用的yaff,我的Nand也只有512k/CHUNK
我的根文件系统是一个camfs,烧录在nand 上的一个mtdblock上,我的内核支持yaffs \ yaffs2
现在我进去文件系统后,把nand上的其它block 以yaffs的格式mount到文件系统上来,没有错误
mount -w -o sync -o noatime -t yaffs /dev/mtdblock/6 /apps
mount -w -o sync -o noatime -t yaffs /dev/mtdblock/7 /logs
但是下次重启后文件大小会改变,改变的原则大概是'四舍五入', 1.1K的文件塔会把你缩减点变成1K , 1.8K的文件它会加点乱码"@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@",以凑成一个整数大小的文件--2.0K
下面复制的是重启前后的文件大小对比
>: ls -lhat
-rwxr-xr-x 1 root root 15.7k Dec 2 06:02 .fcp
-rwxr-xr-x 1 root root 22.9k Dec 2 06:02 .ifenslave
>: du -sh
540.0k .
=================================================================================
>: ls -lhat
-rwxr-xr-x 1 root root 16.0k Dec 2 06:02 .fcp
-rwxr-xr-x 1 root root 23.0k Dec 2 06:02 .ifenslave
>: du -sh /logs/
534.0k /logs
说明:
我没有在内核中选 " Lets Yaffs do its own ECC "的选项,所以我仍然是driver/mtd/nand/at91_nand.c中的ECC效验 (即直接在Nand的驱动中实现写入读出的ECC效验)
因为选上 "Lets Yaffs do its own ECC " 而屏蔽驱动自己的ECC效验时,在文件系统中可以mount成功,但是不能操作,错误是
**>> Block 136 retired
**>> Block 137 needs retiring
**>> Block 137 retired
**>> Block 138 needs retiring
**>> Block 138 retired
**>> Block 139 needs retiring
**>> Block 139 retired
**>> Block 140 needs retiring
看代码意思大概是我的Nand有很多的坏块,都让他休眠了而没有地方可以操作 , 直接用MTD中的ECC可以COPY之类的操作,就是修改文件内容,太郁闷了
那位高手遇到过此类问题的吗