2014-10-20 136 views
0

为JFFS2(MTD-utils的版本1.5.0,mkfs.jffs2 1.60版)的最小擦除块大小似乎是8KiB:可以增加MTD设备的逻辑擦除块大小吗?

Erase size 0x1000 too small. Increasing to 8KiB minimum 

但是我运行Linux 3.10的at25df321a,

m25p80 spi32766.0: at25df321a (4096 Kbytes), 

和擦除块大小只有4KiB:

mtd5 
Name:       spi32766.0 
Type:       nor 
Eraseblock size:    4096 bytes, 4.0 KiB 
Amount of eraseblocks:   1024 (4194304 bytes, 4.0 MiB) 
Minimum input/output unit size: 1 byte 
Sub-page size:     1 byte 
Character device major/minor: 90:10 
Bad blocks are allowed:   false 
Device is writable:    true 

有没有办法让MTD系统治疗多发性擦除块作为一个?也许一些ioctl或模块参数?

如果我使用较大的擦除块大小刷新jffs2映像,我会收到很多内核错误消息,缺少文件并且有时会出现混乱。

解决方法

我发现flasherase --jffs2导致4KiB的工作文件系统inspite擦除块大小。所以我砍了mkfs.jfss2.c文件和生成的图像似乎工作正常。我会给它一些测试。

diff -rupN orig/mkfs.jffs2.c new/mkfs.jffs2.c 
--- orig/mkfs.jffs2.c 2014-10-20 15:43:31.751696500 +0200 
+++ new/mkfs.jffs2.c 2014-10-20 15:43:12.623431400 +0200 
@@ -1659,11 +1659,11 @@ int main(int argc, char **argv) 
                } 
                erase_block_size *= units; 

-             /* If it's less than 8KiB, they're not allowed */ 
-             if (erase_block_size < 0x2000) { 
-               fprintf(stderr, "Erase size 0x%x too small. Increasing to 8KiB minimum\n", 
+             /* If it's less than 4KiB, they're not allowed */ 
+             if (erase_block_size < 0x1000) { 
+               fprintf(stderr, "Erase size 0x%x too small. Increasing to 4KiB minimum\n", 
                      erase_block_size); 
-               erase_block_size = 0x2000; 
+               erase_block_size = 0x1000; 
                } 
                break; 
              } 

回答

0

http://lists.infradead.org/pipermail/linux-mtd/2010-September/031876.html

JFFS2应该能够适应的至少一个节点到eraseblock。最大节点大小为4KiB +几个字节。这就是为什么最小的 擦除块大小是8KiB。

但实际上,即使是8KiB也是不好的,因为你在浪费了一大块擦除块空间。

您应该将几个erasblock加入到64个虚拟擦除块或者128个KiB中,然后使用它 - 这会更加优化。

一些驱动程序已经实现了这一点。我知道大约

MTD_SPI_NOR_USE_4K_SECTORS 

Linux配置选项。必须将其设置为“n”以启用大小为0x00010000的大型擦除扇区。

相关问题