制作生产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

你可能感兴趣的:(文件系统,ARM,linux内核)