记一次Yaffs2与Nand Ecc产生的问题

记一次Yaffs2与Nand Ecc产生的问题

 

 

之前把ramdisk用uboot烧到/dev/mtdblock2(/dev/mtdblock3是yaffs2系统,作为数据区使用)上作为根文件系统启动时,总是导致重启后ramdisk内核不认。怀疑是挂在yaffs2时

破坏了ramdisk分区的存储。

于是焦头烂额的找了几天的bug,今天终于有进展了。
板子不再用ramdisk启动,而是直接把rootfs做到yaffs2 image里。然后再用/dev/mtdblock3做根文件系统启动。

用nand write.yaffs写进nand后,重启提示全是坏块,系统卡在根文件系统那里了。
uboot和kernel里的ECC全都禁用了,但感觉还是ECC的问题。
重启后uboot里用nand erase都提示有很多坏块。
只好用nand scrub清除假坏块。最后连uboot也一起被冲掉了。。。

然后到处查资料,还是在
http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94384
这里找到了答案。
这里Tekkaman Ninja 说补丁增加了oob的两字节偏移和oob中ECC的产生。否则新的内核和yaffs2文件系统挂载会出错。
也没有时间仔细的研究代码,用了文中提到的那个patch,放到yaffs2源码目录中patch后,在utils中make生成新的mkyaffs2image。
再用mkyaffs2image重新制作yaffs2根文件系统。

最后在uboot中重新烧进nand里,重启一切正常了。

虽然问题暂时搞定了,但是一直没有搞清楚问题的详细原因。没办法,项目赶时间,等空闲下来再仔细查查yaffs的源码找找原因。
ECC和yaffs放在一起感觉总是有隐患。

今天查资料看到ubi是内核原生支持的nand文件系统,而且没有oob的问题,看来有时间的话要研究一下ubifs。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页