最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【部分解决】Partially written block xxx detected

工作和技术 crifan 2846浏览 0评论

【问题】

板子上用的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,无从得知,既然作者加了,就有其道理。

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

3。如果想彻底解决这个问题,那只有有空去研究一下yaffs2了。或者哪位高手已经搞懂了,找到解决办法了,麻烦告诉偶一下。

转载请注明:在路上 » 【部分解决】Partially written block xxx detected

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 回复david826:以前网上随便下的,有这个问题,现在用的这个 yaffs2-af1e66bdb6be00b49d8500d01813cb207b930282[1].tar.gz
    空下这个座14年前 (2011-05-07)回复
  2. 回复空下这个座:我用的升级过了  但还是会出现上述问题
    david82614年前 (2011-04-17)回复
  3. 升级yaffs2可以解决
    空下这个座14年前 (2010-09-16)回复
82 queries in 0.210 seconds, using 22.09MB memory