【转】搞定了YAFFS IMAGE烧写在新内核linux2.6.23.9上

来源:http://www.armchina.cn/article.asp?id=64

 

经过分析(参见我上一篇日志),一切都变得很明晰了!终于搞定了YAFFS IMAGE烧写在新内核linux2.6.23.9上。
新的yaffs2代码是通过nandmtd1_WriteChunkWithTagsToNAND写NAND的,写入nand的oob不再是调整的yaffs_spare结构,而是yaffs_PackedTags1结构!
在mkyaffsimage中却还是没有改过来。这也是为什么好多人反应,烧写的yaffs image在mount之后只能看见lost +found,其他什么都没有。
所以简单的修改一下mkyaffsimage.c就行拉,可以参考nandmtd1_WriteChunkWithTagsToNAND这个函数。
把修改mkyaffsimage的关键代码贴出来
static int write_chunk(__u8 *data, __u32 objId, __u32 chunkId, __u32 nBytes)
{
    yaffs_Tags t;
    yaffs_Spare s;
    yaffs_PackedTags1 pt1; //add by hiboy
    yaffs_ExtendedTags  etags;
    __u8 oobdata[16];
    error = write(outFile,data,512);
    if(error < 0) return error;

    etags.chunkId = chunkId;
    etags.serialNumber=0;
    etags.byteCount=nBytes;
    etags.objectId=objId;
    
    yaffs_PackTags1(&pt1, &etags);
    yaffs_CalcTagsECC((yaffs_Tags *)&pt1);
    ((__u8 *)&pt1)[8] = 0xff;
    memset(oobdata,0xff,16);
    memcpy(oobdata+8,&pt1,8);
    
    nPages++;
    
    //return write(outFile,&s,sizeof(yaffs_Spare));
    return write(outFile,oobdata,16); //YTAG1_SIZE
}
这里的16字节oob符合nand mtd的要求,低8字节保留0xFF给MTD,高8字节yaffs_PackedTags1结构,符合目前yaffs2的代码。
这样通过mkyaffsimage制作的yaffsimage通过mtd_util烧到nand中就正确了:
./flasheraseall /dev/mtdX
./nandwrite -a -o /dev/mtdX YAFFSIMAGE

让uboot烧写yaffs也很简单了,因为先前我发布过能够烧写YAFFS的uboot,他使用nand而不是nand legacy,关于代码的修改就留给读者自行完成了。我回头也再试一下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值