本文共 830 字,大约阅读时间需要 2 分钟。
记一次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。转载地址:http://fhpsi.baihongyu.com/