使用yaffs文件系统一段时间后,串口输出大量 "Partially written block X detected" !
主要原因在于yaffs2文件系统在关闭之前,要将dirty 数据写入nand flash。否则下一次开机yaffs2 scan 的时候,就会发现这些block 是Partially written 部分写入的,所以就会提示。这种提示是yaff2文件系统常见的错误!
如下所示:
Partially written block 170 detected
Partially written block 170 detected
Partially written block 170 detected
Partially written block 170 detected
Partially written block 170 detected
Partially written block 170 detected
Partially written block 170 detected
解决办法:
1、方法一(也是最重要的办法)
每次关机前要使用 poweroff 命令关机!
使用 poweroff 命令关机,系统会自动调用sync 进行处理。让yaffs2文件系统 将dirty 的数据写入到nand flash 里面。但这个错误是可以积累的,所以随着不能正常sync而关机,会导致这些yaffs2的警告累积性地增加。
[root@MINI2440 /]# poweroff
save exit: isCheckpointed 1
The system is going down NOW!
Sending SIGTERM to all processes
Sending SIGKILL to all processes
Requesting system poweroff
s3c-sdi s3c2440-sdi: powered down.
System halted.
2、方法二
修改 yaffs_fs.c 中yaffs_auto_checkpoint 的值改成2。
3、方法三
修改fs/yaffs2/yaffs_guts.cstatic int yaffs_ScanBackwards(yaffs_Device * dev)函数中(大概6668行左右)
static intyaffs_ScanBackwards(yaffs_Device *dev)
{
...
} else {
T(YAFFS_TRACE_SCAN,
(TSTR("Partially written block %d detected" TENDSTR),
blk));
}
}
...
}
报错是由于YAFFS_TRACE_ALWAYS造成的,只要把它改成YAFFS_TRACE_SCAN 就OK了。
但这肯定不是好办法,当然如果只是为了开发调试,只能自己去手动注释掉,也是可以的。