制作JFFS2时的erase_block与SPI FLASH中的erase_sector的关系?
如题, 在制作JFFS2时 需要用到-e 参数(./mkfs.jffs2 -b --pad=524288 -s 256 -e 65536 -d userfs/ -o usrjffs2.img)help命令中,对其的解释为: -e, --eraseblock=SIZE Use erase block size SIZE (default: 64KiB)。
在SPI FLASH(winbond 8M)的datasheet中写到:其erase_sector只能为4KB,erase_block可为32/64kB,
目前在SPI的驱动中,设置block_size为 64KB, erase_sector为 4KB。
问题来了!
将制作好的512K FLASH挂载到系统上后,会报如下错误:
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00022034: 0x5771 instead
Further such events for this erase block will not be printed
Node at 0x00022f60 with length 0x000000f6 would run over the end of the erase block
Perhaps the file system was created with the wrong erase size?
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023000: 0x69c2 instead
进入系统后,发现jffs2中的文件有缺失。
根据报错提示以及网上资料, 原因应该为: 制作JFFS2时的erase_block 与系统的不符~.
但系统这块的block_size(这个应该也就是erase_block的大小吧?)已经是设置成64KB的了。
更改SPI驱动中,erase_sector的大小为64KB,则JFFS2报错问题解决, 但由于该SPI FLASH的
erase_sector是固定死的4K,贸然使用64KB(32KB同样)会造成再擦写FLASH时,极大概率出现某
一erase_secotr大小的块中数据为空的情况,即系统不能启动。
另,在制作JFFS2时,将-e参数设置为4096,以配合FLASH的erase_sector, 但悲催的是mkfs.jffs2
所支持-e 最小为8KB。
请问现在这个报错问题应该如何解决???
一点细节: 尝试添加了 -s 参数,其大小为FLASH page的大小256B,但问题依旧。
当JFFS2中文件较少时,不知为何就不会出现上方的报错。