打印

yaff2文件系统问题

[复制链接]
2881|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llz3h|  楼主 | 2013-1-16 16:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
yaffs2文件系统是不是没有对页数据进行ecc校验啊?只看到在oob区域对文件系统的tag有相应的ecc校验,但是没看到对页进行校验。如果有进行校验,也肯定是在yaffs_ecc.c文件下吧?看了这个文件,其中有两个校验函数,yaffs_ecc_correct和yaffs_ecc_calc_other,在这两个函数中添加打印信息,最终在板子上只有第二个是打印了信息,而第二个是用于系统本身的tag的校验,不是对页的数据校验,那么这么说,若使用yaffs2文件系统,又不使用mtd的校验的话,是不是就没有对数据进行校验了呢?求大侠解惑!!!谢谢!!!感激不尽!!!

相关帖子

沙发
jlass| | 2013-1-18 09:15 | 只看该作者
ecc校验是nandflash保证数据可靠性的一种功能,和使用什么文件系统没有什么关系,ecc校验可以在内核中配置是否使用,如果你有能力也可直接修改源代码,所以不存在你所说的问题。

使用特权

评论回复
板凳
llz3h|  楼主 | 2013-1-22 14:24 | 只看该作者
谢谢回复!是否选用ecc校验时可以在内核配置项中选择的,一般我从网上查看到都说使用yaffs2文件系统时,要把nand的ecc功能关闭,因为yaffs2文件系统本身带有ecc校验。我将nand的ecc校验关闭,使用传说中的yaffs2 ecc校验,这样系统启动没有问题,我开启nand的软件ecc,则启动后报错。我就去yaffs2源码中查找相应的传说中的ecc校验函数,但我在这个校验函数中添加了打印信息,但没打印出来,那它到底是在哪里做校验呢,怀疑压根没有对页数据进行ecc校验,那么我在不使用nand ecc情况下,就没有对数据进行交易了吗?如果没有校验,为什么开启nand soft ecc情况下又会出错呢?看了很久源码,也添加了很多打印信息,但还是没有找到相应的yaffs2校验地方,请大神给点指点,多谢!!!!我用的是linux 2.6.30源码,yaffs2文件系统源码也是最新的。

使用特权

评论回复
地板
jlass| | 2013-1-22 14:31 | 只看该作者
本帖最后由 jlass 于 2013-1-22 14:52 编辑

nand soft ecc这是软件校检

应该选nand hard ecc


使用特权

评论回复
5
jlass| | 2013-1-22 14:38 | 只看该作者
你可以搜一下hard ecc

另外:你的文件系统使用makeyaffs2做的吗,你可以直接看它的源代码,可以看到ecc是怎么做的。

使用特权

评论回复
6
llz3h|  楼主 | 2013-1-22 15:27 | 只看该作者
我们一直用的是软件校验,没用过硬件校验,不知道这个硬件校验如何?atmel提供的内核源码中就是用软件校验的,之前用挂载,现在打算用mkyaffs2image,看了这个源码,发现没有ecc校验,只要文件系统的tag进行ecc校验,使用了网上的,发现它在这个工具里添加了ecc校验,使用的是与uboot里的nand soft ecc相同的校验方法,我用这个制作,烧写能正常启动,所以很疑惑!

使用特权

评论回复
7
jlass| | 2013-1-22 17:00 | 只看该作者
按你的描述,你的ecc肯定已经使用了,至于有没有对页数据进行ecc校验的问题,你可以看uboot的代码,如果uboot中没有就是没有做。因为这是要对应的,uboot中没有做但是内核中做了,应该是起不来的。

使用特权

评论回复
8
llz3h|  楼主 | 2013-1-23 18:01 | 只看该作者
谢谢回复!uboot中使用的是nand soft ecc,我将它设置为no ecc。修改过的yaffs2镜像制作工具mkyaffs2image在制作image时候进行了ecc校验,这样在uboot中直接将已经校验好的写到nandflash就可以了。
看了这个工具的ecc校验算法,和uboot里的nand soft ecc算法一致的,那么这个算法应该和内核的nand soft ecc也一致才行,否则我内核和uboot采用nand soft ecc时候就会出错。既然一样,那么系统起来后又不报错,说明这个工具的ecc校验和内核中的yaffs2 ecc校验是一样的?那yaffs2 ecc和内核的nand soft ecc也就应该一样的吧?那我开启内核的nand soft ecc时,为什么又报错呢?百思不得其解啊!!!

使用特权

评论回复
9
jack1991| | 2013-1-25 12:33 | 只看该作者
Yaffs(Yet Another Flash File System)文件系统是专门针对NAND闪存设计的嵌入式文件系统,目前有YAFFS和YAFFS2两个版本,两个版本的主要区别之一在于YAFFS2能够更好的支持大容量的NAND FLASH芯片。

链接:http://www.365ele.com/articles/2 ... %e7%b3%bb%e7%bb%9f/

使用特权

评论回复
10
huangxz| | 2013-1-27 17:38 | 只看该作者
llz3h 发表于 2013-1-23 18:01
谢谢回复!uboot中使用的是nand soft ecc,我将它设置为no ecc。修改过的yaffs2镜像制作工具mkyaffs2image ...

u-boot中也使用了mtd层吧,我记得在u-boot的代码中也有mtd部分啊

使用特权

评论回复
11
wangcong02345| | 2013-7-5 14:02 | 只看该作者
本帖最后由 wangcong02345 于 2013-7-5 14:09 编辑

nand flash的一个page=data+oob
yaffs_ecc.c只是对tags的数据进行校验,不对读取的page中的数据进行校验.读取的page中的数据是通过mtd->read_oob来校验的,mtd->read_oob会把data和oob全都读出出来,但是只会校验data中的数据.
tags共28个Byte是存储在nand flash的oob上的,因为yaffs2把oob上的tags作为数据来使用的所以需要校验.
但是tags是存在于OOB上的无法通过mtd->read_oob来校验,所以只好自己写代码来校验,这段代码就是yaffs_ecc.c

通常情况下是不打开tags校验的,param->no_tag_ecc=1所以看起来没事.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

25

帖子

1

粉丝