Which is Yaffs2's on flash spare structure?For yaffs1, yaffs_spare is the actual on-flash spare structurestruct yaffs_spare {u8 tb1;u8 tb0; //前四个字节表示yaffs_tag信息u8 tb2;u8 tb3;u8 page_status; //一个字节作为删除标记 /* set to 0 to delete the chunk */u8 block_status; //一个字节作为坏块标记位,非0xff表示坏块u8 tb4; //中间两个字节表示yaffs_tag信息u8 tb5;u8 ecc1[3]; //数组,三个字节存放相应chunk的后256字节ECC校验结果u8 tb6; //接着又两个字节的yaffs_tag信息u8 tb7;u8 ecc2[3]; //数组,三个字节存放相应chunk的前256字节的ECC校验结果};the following two, yaffs_tags and yaffs_packed_tags1 are the logical structure,why there are two ,they are nearly the same?struct yaffs_tags {u32 chunk_id:20; //20位用来表示chunk_idu32 serial_number:2; //2位用来表示序列号u32 n_bytes_lsb:10; //10位用来表示该页内有效的字节数u32 obj_id:18; //18位用来表示obj_id,唯一标识一个对象u32 ecc:12; //yaffs_tags本身的ECC校验和u32 n_bytes_msb:2; //还有两位未使用,保持为1};struct yaffs_packed_tags1 {u32 chunk_id:20;//20位的chunkIDu32 serial_number:2;//2位的serial num序列号u32 n_bytes:10;//10位表示有效字节数u32 obj_id:18;//18位表示objIDu32 ecc:12;//12位表示ECC校验值u32 deleted:1;//1位的删除标记u32 unused_stuff:1;//1位,未使用unsigned should_be_ff;//为全1};For yaffs2, yaffs_packed_tags2_tags_only and yaffs_packed_tags are only the tags of yaffs2, not the whole yaffs2 spare, So whtat's the real on-flash yaffs2's spare structure?struct yaffs_packed_tags2_tags_only {unsigned seq_number;//顺序号unsigned obj_id;//对象IDunsigned chunk_id;//chunkIDunsigned n_bytes;//字节数};struct yaffs_packed_tags2 {struct yaffs_packed_tags2_tags_only t;//tags标签struct yaffs_ecc_other ecc;//ECC校验值,12字节,存储的是上面的tags标签的ECC校验值};