Chinaunix首页 | 论坛 | 博客
  • 博客访问: 568860
  • 博文数量: 114
  • 博客积分: 1620
  • 博客等级: 上尉
  • 技术积分: 1104
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 09:16
文章分类

全部博文(114)

文章存档

2016年(1)

2015年(2)

2014年(4)

2013年(9)

2012年(20)

2011年(78)

分类: 嵌入式

2011-03-16 16:47:36

原文地址:http://hi.baidu.com/serial_story/blog/item/4811e8ca51e2954af31fe77c.html

【问题】

板子上用的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了。或者哪位高手已经搞懂了,找到解决办法了,麻烦告诉偶一下。


阅读(1043) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~