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