爲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;
}