首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jffs2选项、闪存设备特性、驱动程序设置和内核内存管理器之间的关系如何?

jffs2选项、闪存设备特性、驱动程序设置和内核内存管理器之间的关系如何?
EN

Stack Overflow用户
提问于 2016-04-23 20:11:22
回答 1查看 1.2K关注 0票数 0

我正致力于升级遗留板上的固件,使用at91rm9200处理器和at45db642D数据攻击运行修改后的2.6.12.1,以使用at45db641E数据攻击。641 E的特点是:

  • 32768页
  • 页大小为264字节
  • 灵活的擦除选项,可以擦除页面(264字节)、块(2KB)、扇区(256 KB)或整个芯片(64 Mbit)。

我相信内核内存管理器页面大小是标准的4096字节。

我想在设备上放一个合适的jffs2图像。我想知道的mkfs.jffs2选项是(从手册页):

  • -页面大小:使用页面大小。默认为4 KiB。此大小是数据节点的最大大小。根据目标系统的内存管理页面大小设置(注意:这与NAND页面大小无关)。
  • -擦除块:使用擦除块大小。默认为64 KiB。如果您使用的擦除块大小与目标MTD设备的擦除块大小不同,则JFFS2可能无法最佳执行。如果指定的大小小于4096,则假定单位为KiB。

他说,pagesize与内核内存管理页大小有关(在我的例子中是4096页,与默认值相同),而不是设备的264字节页。所以我需要指定--pagesize=4096而不是--pagesize=264,这是正确的吗?

这个人还说--擦除块必须和MTD设备的擦除块大小相同.我对几件事感到困惑。

  1. 641 E有几个不同的擦除选项。必须为mkfs.jffs2 --删除块选项选择哪一个?
  2. 如果正确的选项要么是641 E的页面大小,要么是块大小,那么在假定4096以下的值是KB而不是字节的情况下,如何才能将其指定为mkfs.jffs2呢?
  3. 链接 (由此相关但不足的所以问题引用)指出,jffs2节点必须完全适合擦除块。由于它们的大小是4+ KB,比设备的“擦除块”大小还要大,所以链接上写着“您应该将几个擦除块连接到一个64或128个KiB的虚拟擦除块中,并使用它--这将是一个更简单的删除块”,然后是“您需要让您的驱动程序报告128 KiB擦除块大小并模拟它,然后它就能工作了。它不会开箱即用。”如何设置这样一个“虚拟擦除块”?
  4. at91数据帧驱动程序device->erasesize=pagesize。因此,似乎有一些类似的名字,但不同的概念:驱动擦除大小,设备擦除块大小,和jffs2擦除块大小。它们之间的关系和区别是什么?jffs2指定的删除块大小最终如何影响驱动程序执行的操作?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 02:07:14

我已经成功地检查了内核中的各种源文件,以找出正在发生的事情,至少足够好地让它正常工作。请注意,这适用于2.6.12.1,而不一定是以后的内核版本。

有四个术语有相似的名称,相关的,但不一定相等。从最高到最低..。

  1. mkfs.jffs2擦除块--这决定了节点在生成的文件系统二进制映像中的位置。
  2. 挂载的jffs2虚拟块大小--这决定了在读取和写入jffs2文件系统时节点的布局方式。
  3. mtd核心擦除大小-这是最小的可擦除单位,这是报告给jffs2文件系统代码的数据帧驱动程序实现。
  4. 设备擦除页/块/扇区-这些是硬件擦除操作码选项,设备驱动程序实现者可以从闪存中擦除数据。

以下是我所理解的制约因素。

  • #4中的某些选项必须小于或等于#3。在at91_dataflash.c文件中,它们是相等的,并且两者都等于264个字节的页面大小(即mtd核心擦除大小= flash页面大小= 264字节)。通常,#4中可用的操作码的某些组合必须精确地加到擦除大小,并且驱动程序必须相应地执行正确的操作码来擦除删除大小的数据。
  • 名义上,#2中的jffs2虚拟块大小等于#3中的mtd核心删除大小。然而,在这种情况下,jffs2代码将自动更改虚拟块大小。jffs2代码使用一组链接列表来跟踪闪存盘上的脏和干净区域,这些列表要求每个虚拟块存在一个列表节点。所有这样的列表节点的总大小都有128 on的限制。如果虚拟块大小非常小,就像在AT45DB642D和AT45DB641E中一样,在这种情况下,虚拟块大小= mtd核心擦除大小= flash设备页大小,那么这将创建大量节点并超过节点上128 of的限制。在这种情况下,jffs2 fs代码将自动增加虚拟块大小,并将虚拟块数减少2,直到满足128 of约束为止。内核将输出一条消息:"jffs2:擦除块大小太小(0 4KiB),使用虚拟块大小(4 4KiB)。“(注意精度截断)。让我们把这称为调整后的虚拟块大小。
  • 调整后的虚拟块大小用于安装存储在闪存上的jffs2 fs。调整后的虚拟块大小必须等于#1的jffs2映像删除块大小(尽管此教科书建议#1删除块不得大于调整后的#2‘虚拟块大小。我还没有测试过。)

因此,在我的示例中,内核将虚拟块大小从264字节调整为4224字节。因此,我的jffs2文件系统通过为mkfs.jffs2使用-e 4224选项来工作。驱动程序一次擦除每4224字节长的虚拟块一页.

其他考虑因素:

  • -s pagesize选项与根据手册页的内核页大小有关。我使用了-s 4096的内核页面大小。
  • 调整后的虚拟块大小很可能永远不会小于整个jffs2节点所需的大小,因此使用小于4096字节的-e参数是不可能的,这使得我对单元的问题没有意义。
  • 我预计#1和#2的所有上面的字节码必须是mtd核心擦除块大小的干净倍数。
  • 可以在内核配置中禁用/启用自动虚拟块大小调整。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36815850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档