0

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 システムに複数の消去ブロックを 1 つとして扱わせる方法はありますか? 多分いくつかのioctlまたはモジュールパラメータ?

より大きな消去ブロック サイズで jffs2 イメージをフラッシュすると、多くのカーネル エラー メッセージが表示され、ファイルが見つからず、時にはパニックになります。

回避策

flasherase --jffs24KiB の消去ブロック サイズにもかかわらず、動作するファイル システムが得られることがわかりました。そのため、ファイルをハッキングしたところ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;
                                          }
4

1 に答える 1