我正在努力将运行经过修改的 2.6.12.1 与 at91rm9200 处理器和at45db642D 数据闪存的旧板上的固件升级到使用at45db641E 数据闪存。641E的特点是:
- 32768 页
- 页面大小为 264 字节
- 灵活的擦除选项可擦除页面(264 字节)、块(2 KB)、扇区(256 KB)或整个芯片(64 Mbits)。
我相信内核内存管理器页面大小是标准的 4096 字节。
我想在设备上放置一个合适的 jffs2 图像。我想知道的mkfs.jffs2选项是(来自手册页):
- --pagesize:使用页面大小 SIZE。默认值为 4 KiB。此大小是数据节点的最大大小。根据目标系统的内存管理页面大小设置(注意:这与 NAND 页面大小无关)。
- --eraseblock:使用擦除块大小 SIZE。默认值为 64 KiB。如果您使用的擦除块大小与目标 MTD 器件的擦除块大小不同,JFFS2 可能不会以最佳方式执行。如果指定的 SIZE 低于 4096,则假定单位为 KiB。
该人说页面大小与内核内存管理页面大小有关(在我的情况下为 4096,与默认值相同),而不是设备的 264 字节页面。所以我需要指定--pagesize=4096 而不是--pagesize=264,这是正确的吗?
该人还说 --eraseblock 必须与 MTD 设备的擦除块大小相同。我对几件事感到困惑。
- 641E 有几种不同的擦除选项。必须为 mkfs.jffs2 --eraseblock 选项选择哪个?
- 如果正确的选项是 641E 的页面大小或块大小,我如何将其指定给 mkfs.jffs2,因为假定低于 4096 的值以 KB 为单位而不是字节?
- 这个链接(由这个相关但不充分的SO 问题引用)说 jffs2 节点必须完全适合擦除块。由于它们的大小为 4+ KB,大于设备的“擦除块”大小,链接显示“您应该将多个 erasblock 连接到一个 64 或 128 KiB 的虚拟擦除块中并使用它 - 这会更理想”,然后是“你需要让你的驱动程序报告 128KiB 的擦除块大小并模拟它,然后它就会工作。它不会开箱即用。” 如何设置这样的“虚拟擦除块”?
- 在at91 数据闪存驱动程序中,
device->erasesize=pagesize
. 因此,似乎有一些名称相似但不同的概念:驱动程序擦除大小、设备擦除块大小和 jffs2 擦除块大小。它们之间有什么关系和区别?jffs2 指定的擦除块大小最终如何影响驱动程序执行的操作?
感谢您的任何帮助。