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)布局:
==========
yaffs2应用到较老版本linux上时的问题 (移植日记)
最新推荐文章于 2021-05-12 03:23:04 发布