2014-10-20 86 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的大型擦除扇區。