What is cleanmarker and what it is used for?Cleanmarker is a special JFFS2 node which is written to the beginning of ablock just after the block has been erased. On NOR flashes it is a specialsmall JFFS2 node at the beginning of the block. On NAND flashes it is placed tothe spare area of the first page.
The main reason why cleanmarkers are used is the need to be sure that the blockerase operation was correctly completed. All 0xFF bytes in the block are notnecessarily mean the block is ready to be utilized. For example, if an uncleanreboot happened just at the end of the block erase cycle, the block might haveunstable bits, which are read as "1" one time and might be read as "0" nexttime.
When preparing a flash partition for JFFS2, it is recommended to putcleanmarkers to the erased blocks. This might be done my means of "-j" optionof the "flash_eraseall" MTD utility. Otherwise, JFFS2 will re-erase the blockswhich contain all 0xFF and have no cleanmarker. This is an unneeded wasting oftime.
flash_eraseall -j得到的结果是:(from 0x800 is spare area start)
07F0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0800 : FF FF 19 85 20 03 00 00 00 08 FF FF FF FF FF FF
0810 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0820 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0830 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
The main reason why cleanmarkers are used is the need to be sure that the blockerase operation was correctly completed. All 0xFF bytes in the block are notnecessarily mean the block is ready to be utilized. For example, if an uncleanreboot happened just at the end of the block erase cycle, the block might haveunstable bits, which are read as "1" one time and might be read as "0" nexttime.
When preparing a flash partition for JFFS2, it is recommended to putcleanmarkers to the erased blocks. This might be done my means of "-j" optionof the "flash_eraseall" MTD utility. Otherwise, JFFS2 will re-erase the blockswhich contain all 0xFF and have no cleanmarker. This is an unneeded wasting oftime.
flash_eraseall -j得到的结果是:(from 0x800 is spare area start)
07F0 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0800 : FF FF 19 85 20 03 00 00 00 08 FF FF FF FF FF FF
0810 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0820 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0830 : FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF