【问题标题】:Can the logical erase block size of an MTD device be increased?可以增加 MTD 设备的逻辑擦除块大小吗?
【发布时间】:2014-10-20 13:07:45
【问题描述】:

jffs2(mtd-utils 版本 1.5.0,mkfs.jffs2 版本 1.60)的最小擦除块大小似乎是 8KiB:

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

但是我使用 at25df321a 运​​行 Linux 3.10,

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。所以我破解了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;
                                          }

【问题讨论】:

    标签: linux flash jffs2


    【解决方案1】:

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

    JFFS2 应该能够至少容纳一个节点来擦除块。这 最大节点大小为 4KiB+几个字节。这就是为什么最低 擦除块大小为 8KiB。

    但在实践中,即使 8KiB 也很糟糕,因为你浪费了一个 擦除块末尾有很多空间。

    你应该将几个erasblock加入一个64的虚拟eraseblock或 128 KiB 并使用它 - 这将更加优化。

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

    MTD_SPI_NOR_USE_4K_SECTORS
    

    Linux 配置选项。它必须设置为“n”才能启用大小为 0x00010000 的大擦除扇区。

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2015-01-29
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2011-04-08
      相关资源
      最近更新 更多