修改制作yaffs映象文件的工具


三.         修改制作yaffs映象文件的工具

在 yaffs 源码中有个 utils 目录,里面是工具 mkyaffsimage 和 mkyaffs2image的源代码,前者用来制作 yaffs1 映象文件,后者用来制作 yaffs2 映象文件。目前 mkyaffsimage 工具只能生成老格式的yaffs1 映象文件,需要修改才能支持新格式。

(1)下载的yaffs2解压出来是这样的一个目录/Development下面有两个文件夹:yaffs yaffs2,我们需要进入yaffs2,然后再进入utils,这个下面有3个文件,我们需要加两个文件,nand-ecc.c yaffs_packedtags1.c ,yaffs_packedtags1.c这个文件是从上一节目录拷贝过来的,nand-ecc.c的原码如下:

在mkyaffsimage.c里边修改原码为:

加这个头文件:#include "yaffs_packedtags1.h"

static int write_chunk(__u8 *data, __u32 objId, __u32 chunkId, __u32 nBytes)

{

       #ifdef CONFIG_YAFFS_9BYTE_TAGS

      yaffs_Tags t;

      yaffs_Spare s;

      error = write(outFile,data,512);

      if(error < 0) return error;

      memset(&t,0xff,sizeof (yaffs_Tags));

      memset(&s,0xff,sizeof (yaffs_Spare));

     

      t.chunkId = chunkId;

      t.serialNumber = 0;

      t.byteCount = nBytes;

      t.objectId = objId;

    if (convert_endian)

    {

        little_to_big_endian(&t);

    }

     

      yaffs_CalcTagsECC(&t);

      yaffs_LoadTagsIntoSpare(&s,&t);

      yaffs_CalcECC(data,&s);

      nPages++;

      return write(outFile,&s,sizeof(yaffs_Spare));

    #else

        yaffs_PackedTags1;

        yaffs_ExtendedTags etags;

        __u8 ecc_code[6];

        __u8 oobbuf[16];

        error = write(outFile,data,512);

        if(error < 0) return error;

        etags.chunkId       = chunkId;

        etags.serialNumber = 0;

        etags.byteCount     = nBytes;

        etags.objectId      = objId;

        etags.chunkDeleted = 0;

        yaffs_PackTags1(&pt1, &etags);

        yaffs_CalcTagsECC((yaffs_Tags *)&pt1);

        memset(oobbuf, 0xff, 16);

        memcpy(oobbuf+8, &pt1, 8);

        nand_calculate_ecc(data, &ecc_code[0]);

        nand_calculate_ecc(data+256, &ecc_code[3]);

        oobbuf[0] = ecc_code[0];

        oobbuf[1] = ecc_code[1];

        oobbuf[2] = ecc_code[2];

        oobbuf[3] = ecc_code[3];

      oobbuf[6] = ecc_code[4];

        oobbuf[7] = ecc_code[5];

        nPages++;

        return write(outFile, oobbuf, 16);

#endif

}

修改Makefile文件:

MKYAFFSSOURCES = mkyaffsimage.c     yaffs_packedtags1.c nand-ecc.c

yaffs_packedtags1.c和nand-ecc.c是我们加上去的

这样我们就可以用make命令来生成工具文件了:mkyaffsimage 和mkyaffs2image

现在我们来制作镜象文件,把目录转到我们文件系统的文件夹上一个目录,我是转到根目录,因为我是在根目录创建了filesystem_install目录,为了方便用mkyaffsimage命令,我们直接把mkyaffsimage拷贝到根目录的bin里边,这样这个命令就可以用了,这样我们就可以用下面的命令来生成镜象文件了:mkyaffsimage filesystem_install (自己命个名字给镜象文件,但是后缀一定是yaffs,比如:myyaffs.yaffs),

这样我们就全部搞定了一个根文件系统yaffs,这样我们就可以下载的板上面去测试,我这样的做的,是完全成功的,在环境变量里边还有设置个变量:bootargs=noinitrd console=ttySAC0 root=/dev/mtdblock2 rootfstype=yaffs到此为止,全部搞定。如果有什么问题,可以一起交流,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值