Partially written block *** detected解决方案

板子上用的nand Flash,加上yaffs2文件系统,使用一段时间后,

每次开机出现类似如下错误:

Partially written block 176 detected

【解决办法】

1。后来去看代码搞懂了,是yaffs2文件系统,在关闭之前,要将dirty数据写入nand flash,否则下一次开机yaffs2 scan的时候,就会发现这些block是Partially written 部分写入的,所以就会提示。

解决办法就是,每次要关机之前,要去做一次:

sync

让yaffs2将dirty的数据写入到nand flash里面。

同理地,每次关机之前要通过系统去关机,这样会调用到poweroff等工具,其底层实现也是会调用到sync,去写数据。

不过这个办法也存在缺陷,那就是,如果是意外断电,那就还是会遇到同样问题。

2。一般情况下,自己断电之前去sync一下,是可以避免那个警告的,但是,后来经过长时间使用发现,sync只能表面地去解决数据写回,而不能清除那些Partially written 的块,这种错误,是累积性的,也就是,比如第一次意外断电是提示:

Partially written block 176 detected

....

而第二次又意外断电了,那么可能破外到别的block了,比如是175,那么下次警告的信息又会多很多:

Partially written block 175 detected

所以,随着不能正常sync而关机,会导致这些yaffs2的警告累积性地增加。

我此刻就遇到从175到104(中间部分block没有这些提示),一直打印这些警告,很是烦人。而实际上,rootfs是可以正常使用的。去看了下代码,是在

fs/yaffs2/yaffs_guts.c中:

static int yaffs_ScanBackwards(yaffs_Device *dev)
{
..

       } else {
        /* This is a partially written block that is not
        * the current allocation block.
        */

        T(YAFFS_TRACE_ALWAYS,
        (TSTR("Partially written block %d detected" TENDSTR),
        blk));
       }
      }
...

}

而虽然rootfs可以使用,但是为何还会有这个属性为YAFFS_TRACE_ALWAYS,即无论如何都始终提示的警告,没有详细去研究yaffs2,无从得知,既然作者加了,就有其道理。

所以,直接注释掉,肯定不是好办法,当然如果只是为了开发调试,只能自己去手动注释掉,也是可以的

 

你可能感兴趣的:(技术手册,嵌入式ARM+Linux,ARM-Linux驱动移植)