製作生產yaffs映像文件的工具


進入yaffs2/util目錄,修改mkyaffsimage.c文件
(1)在頭文件引用中增加#include "yaffs_packedtags1.h"
(2)修改write_chunkh函數
233行-258行修改爲如下:
#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 pt1;
yaffs_ExtendedTags etags;
__u8 ecc_code[6];
__u8 oobbuf[16];
/* ÐŽÒ³ÊýŸÝ£¬512×ÖoeÚ */
error = write(outFile,data,512);
if(error < 0) return error;
/* ¹¹Ôìtag */
etags.chunkId = chunkId;
etags.serialNumber = 0;
etags.byteCount = nBytes;
etags.objectId = objId;
etags.chunkDeleted = 0;
/*
* ÖضšÎ»oobÇøÖÐμÄ¿ÉÓÃÊýŸÝ(³ÆΪtag)
*/
yaffs_PackTags1(&pt1, &etags);
/* OEÆËãtag±ŸÉíμÄECCÂë */
yaffs_CalcTagsECC((yaffs_Tags *)&pt1);
memset(oobbuf, 0xff, 16);
memcpy(oobbuf+8, &pt1, 8);
/*
* ʹÓÃÓëÄÚºËMTD²ãÏàͬμÄ·oe·šOEÆËãÒ»Ò³ÊýŸÝ(512×ÖoeÚ)μÄECCÂë
* ²¢°ÑËüÃÇÌîÈëoob
*/
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++;
/* ÐŽoobÊýŸÝ£¬16×ÖoeÚ */
return write(outFile, oobbuf, 16);
#endif
(3)把內核源文件drivers/mtd/nand/nand_ecc.c複製到yaffs2/utils目錄下面,保留nand_ecc_precalc_table數組和
nand_calculate_ecc函數
和#include <linux/types.h>宏定義,並加上定義
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
再把nand_calculate_ecc中的形參“struct mtd_info *mtd”去掉。
(4)把/utils上層目錄中的yaffs_packedtags1.c複製到utils目錄下;
(5)修改/utils目錄下的Makefile。
MKYAFFSSOURCES = mkyaffsimage.c
修改爲
MKYAFFSSOURCES = mkyaffsimage.c yaffs_packedtags1.c nand_ecc.c
在/utils目錄下執行make命令,就可以生成mkyaffsimage工具了。
並修改屬性:
chmod +x mkyaffsimage就可以了。
使用:與其它工具的使用沒有區別
./mkyaffsiamge gauss gauss.yaffs
下載前,需要將yaffs鏡像文件改爲可執行的
chmod +x
使用內核把nanf_flash分爲3個區
(1)0x0-0x100000:"uboot&env",q其中0x0-0x30000存放u-boot.bin,0x30000-0x40000存放env
(2)0x100000-0x300000:"kernel"
(3)剩下的空間爲:“yaffs”
對應者mtdblock0 mtdblock1 mtdblock2
燒寫yaffs命令
tftp 0x30000000 fs_mini.yaffs
nand erase 0x300000 0xB00000(fs_mini.yaffs大小爲7.8M)
nand write.yaffs 0x30000000 0x300000 0x7cf770
0x7cf770是fs_mini.yaffs的大小。
燒寫的過程中出現了很多警告信號,有待解決。
修改啓動變量
setenv bootargs console=ttySAC0 root=ttySAC0 root=/dev/mtdblock2 rootfstype=yaffs
重新啓動
掛載文件系統後,輸入df命令,看是不是mtdblock2

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