MTD设备的逻辑擦除块大小可以增加吗? [英] Can the logical erase block size of an MTD device be increased?

查看:745
本文介绍了MTD设备的逻辑擦除块大小可以增加吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

The minimum erase block size for jffs2 (mtd-utils version 1.5.0, mkfs.jffs2 revision 1.60) seems to be 8KiB:

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

但是我正在运行带有at25df321a的Linux 3.10,

However I am running Linux 3.10 with an at25df321a,

m25p80 spi32766.0: at25df321a (4096 Kbytes),

并且擦除块大小仅为4KiB:

and the erase block size is only 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或模块参数?

Is there a way to make the mtd system treat multiple erase blocks as one? Maybe some ioctl or module parameter?

如果我用较大的擦除块大小刷新jffs2图像,则会收到许多内核错误消息,文件丢失甚至有时会出现紧急情况.

If I flash a jffs2 image with larger erase block size, I get lots of kernel error messages, missing files and sometimes panic.

解决方法

我发现flasherase --jffs2导致4KiB擦除块大小的文件系统正常工作.因此,我入侵了mkfs.jfss2.c文件,生成的图像似乎正常运行.我会做一些测试.

I found that flasherase --jffs2 results in a working filesystem inspite of the 4KiB erase block size. So I hacked the mkfs.jfss2.c file and the resulting image seems to work fine. I'll give it some testing.

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

推荐答案

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

JFFS2 should be able to fit at least one node to eraseblock. The maximum node size is 4KiB+few bytes. This is why the minimum eraseblocks size is 8KiB.

但是在实践中,即使8KiB也很糟糕,因为您甚至浪费了 擦除块末尾有很多空间.

But in practice, even 8KiB is bad because you and up with wasting a lot of space at the end of eraseblocks.

您应将多个个擦除块合并为一个64或64的虚拟擦除块 128 KiB并使用它-这将是最佳选择.

You should join several erasblock into one virtual eraseblock of 64 or 128 KiB and use it - this will be more optimal.

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

Some drivers have already implemented this. I know about

MTD_SPI_NOR_USE_4K_SECTORS

Linux配置选项.必须将其设置为"n",以启用大小为0x00010000的大型擦除扇区.

Linux configuration option. It have to be set to "n" to enable large erase sectors of size 0x00010000.

这篇关于MTD设备的逻辑擦除块大小可以增加吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆