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图像,我会收到大量内核错误消息,丢失文件,有时会出现恐慌。
解决方法
我发现尽管有4KiB擦除块大小,但flasherase --jffs2
会产生一个工作文件系统。所以我攻击了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 :(得分:0)
http://lists.infradead.org/pipermail/linux-mtd/2010-September/031876.html
JFFS2应该能够容纳至少一个节点来擦除块。该 最大节点大小为4KiB +几个字节。这就是最低限度的原因 eraseblocks大小为8KiB。
但在实践中,即使是8KiB也是不好的,因为你和浪费了 在eraseblocks的末尾有很多空格。
您应该将几个erasblock加入到一个64或64的虚拟擦除块中 128 KiB并使用它 - 这将更加优化。
一些司机已经实现了这一点。我知道
MTD_SPI_NOR_USE_4K_SECTORS
Linux配置选项。它必须设置为&#34; n&#34;启用大小为0x00010000的大擦除扇区。