yaffs2应用到较老版本linux上时的问题 (移植日记)

在将yaffs2移植到2.6.12旧版Linux内核时遇到读取OOB信息错误,通过分析源码和文档,发现数据偏移问题。解决方案包括在读取OOB时添加2字节偏移,并避免使用`mtd->read_ecc`函数,改为分别调用`mtd->read`和`mtd->read_oob`。最终成功解决读写问题,使2.6.12内核能正常使用yaffs2。
摘要由CSDN通过智能技术生成

2009.7.21
yaffs2 在 2.6.22的 kernel 上表现很正常,但在老的 2.6.12 上,则出现问题。


无奈之下只好阅读 yaffs2 的代码

fs/yaffs2/yaffs_mtdif2.c 中的  nandmtd2_ReadChunkWithTagsFromNAND 函数从nand flash 中

读取 oob 信息, 获取 yaffs_ExtendedTags tags,

               if (tags){
                        memcpy(&pt, dev->spareBuffer, sizeof(pt));
                        yaffs_UnpackTags2(tags, &pt);
                        if(pt.t.chunkId  != -1)
                                {
                                printk("yaffs_UnpackTags2 chunkId = %x addr = %x/n",  pt.t.chunkId, addr);
                                int i = 0;
                                for(; i<28; i++)
                                      {
                                        printk(" %02x " , dev->spareBuffer[i]);
                                      }
                                printk("/n");
                               }

                        }
 通过和 2.6.22 的kernel 对比,发现数据偏移了两位, 我就太阳。。
后来找到下面这篇文章:

新版本内核中的MTD驱动考虑到了与yaffs2的接口问题,与yaffs2的整合一般都很顺利。但是老版本就容易出现写进去的文件umount/mount后丢失的问题。基本上应该属于oob中数据布局的问题。MTD中的oob(2k-page)布局:

==========

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值