yaffs格式的nand会自动更改文件大小,怎么办?

k_ewell 2008-07-10 10:35:43
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之类的操作,就是修改文件内容,太郁闷了


那位高手遇到过此类问题的吗
...全文
303 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
k_ewell 2008-07-14
  • 打赏
  • 举报
回复
是交叉编译器的问题,至少我用arm-linux-gcc编出来的版本可以正常使用,arm-linux-uclibc-gcc编出来的版本就有上面的问题
air_snake 2008-07-11
  • 打赏
  • 举报
回复
up

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧