修改製作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到此爲止,全部搞定。如果有什麼問題,可以一起交流,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章