制作JFFS2时的erase_block与SPI FLASH中的erase_sector的关系?

该昵称已被占用了了了 2012-11-29 07:20:16
如题, 在制作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中文件较少时,不知为何就不会出现上方的报错。




...全文
3128 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
michael9169 2014-10-24
  • 打赏
  • 举报
回复
我也碰到这个问题,贴上我的patch diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 4eeeb2d..136a7df 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -75,6 +75,7 @@ #define JEDEC_MFR(_jedec_id) ((_jedec_id) >> 16) +#define DEBUG /****************************************************************************/ struct m25p { @@ -684,7 +685,7 @@ static const struct spi_device_id m25p_ids[] = { { "s25sl032a", INFO(0x010215, 0, 64 * 1024, 64, 0) }, { "s25sl064a", INFO(0x010216, 0, 64 * 1024, 128, 0) }, { "s25fl016k", INFO(0xef4015, 0, 64 * 1024, 32, SECT_4K) }, - { "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, + { "s25fl064k", INFO(0xef4017, 0, 64 * 1024, 128, 0) }, /* SST -- large erase sizes are "overlays", "sectors" are 4K */ { "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024, 8, SECT_4K) }, @@ -741,7 +742,7 @@ static const struct spi_device_id m25p_ids[] = { { "w25q32", INFO(0xef4016, 0, 64 * 1024, 64, SECT_4K) }, { "w25q32dw", INFO(0xef6016, 0, 64 * 1024, 64, SECT_4K) }, { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) }, - { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, + { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, 0) }, { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K) }, -- 1.7.9.5
芒果520 2013-09-10
  • 打赏
  • 举报
回复
你好,能把解决的具体过程贴出来吗
acgzx 2013-09-03
  • 打赏
  • 举报
回复
你好,我也遇到了你类似的问题,而且文件写多了话,JFFS2居然还覆盖到了loader数据。能不能请你将之前写的文档心得分享出来呢?谢谢。
  • 打赏
  • 举报
回复
不好意思哈,一直没结贴, 问题解决了。 主要修改FLASH的驱动。 擦FLASH一共有三种方法, sector erase(扇区擦除)和block erase(块擦除)以及 整片擦除。 擦除时候将代码改为 块擦除就可以了, 块擦除大小,刚好和制作JFFS时设定的相同。 具体的我之前写了个文档, 一直没发CSDN, 我晚上回去看看 发上来。 就结贴了, 分就散了吧, 希望你们能继续帮助其他人
unicore-tracy 2013-07-03
  • 打赏
  • 举报
回复
请问楼主问题是如何解决的啊,我也遇到了同样的问题啊。。。。。。急!!!
andychinajj 2013-01-23
  • 打赏
  • 举报
回复
现在这个问题搞定了吗? NET: Registered protocol family 17 Clocks: disable unused emac Clocks: disable unused aemif regulator_init_complete: incomplete constraints, leaving LDO2 on regulator_init_complete: incomplete constraints, leaving LDO1 on regulator_init_complete: incomplete constraints, leaving VDCDC3 on regulator_init_complete: incomplete constraints, leaving VDCDC2 on regulator_init_complete: incomplete constraints, leaving VDCDC1 on davinci_emac_probe: using random MAC addr: 7a:85:ed:56:7c:df emac-mii: probed omap_rtc omap_rtc: setting system clock to 2009-05-20 06:33:37 UTC (1242801217) Root-NFS: No NFS server available, giving up. VFS: Unable to mount root fs via NFS, trying floppy. List of all partitions: No filesystem could mount root, tried: jffs2 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) Backtrace: [<c0035730>] (dump_backtrace+0x0/0x114) from [<c036c3dc>] (dump_stack+0x18/0x1c) r7:00008000 r6:c7815000 r5:c0029a08 r4:c04a69d8 [<c036c3c4>] (dump_stack+0x0/0x1c) from [<c036c444>] (panic+0x64/0x13c) [<c036c3e0>] (panic+0x0/0x13c) from [<c0008fec>] (mount_block_root+0x1e0/0x220) r3:00000000 r2:80000000 r1:c7823f60 r0:c0409a66 [<c0008e0c>] (mount_block_root+0x0/0x220) from [<c00090f0>] (mount_root+0xc4/0xfc) r8:00000000 r7:00000000 r6:00000000 r5:00000000 r4:00200000 [<c000902c>] (mount_root+0x0/0xfc) from [<c0009298>] (prepare_namespace+0x170/0x1c8) r5:c0029a08 r4:c04a64c0 [<c0009128>] (prepare_namespace+0x0/0x1c8) from [<c00084c8>] (kernel_init+0xf0/0x12c) r5:00000000 r4:c04a6280 [<c00083d8>] (kernel_init+0x0/0x12c) from [<c00491f0>] (do_exit+0x0/0x6b4) r5:00000000 r4:00000000 我在SPI flash上遇到jffs2.img这个问题,uboot和uImage可以正常跑
  • 打赏
  • 举报
回复
%#@#, 为何我发的问题总是么人回答~~~

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧