0%

Linux 嵌入式文件系统

基于 Flash 的文件系统,包括只读文件系统和可读写文件系统

文件系统

文件系统是对一个存储设备上的数据和元数据进行组织的机制。 Linux 文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。

Flash

Flash 内存技术

Flash 分为 nornand 两种:

  1. nor 支持较高的读性能,但以降低容量为代价
  2. nand 提供更大容量的同时实现快速的写擦性能。还需要更复杂的输入 / 输出接口

Flash 部件通常分为多个分区,允许同时进行多个操作(擦除某个分区的同时读取另一个分区)。分区再划分为块(通常大小为 64KB 或 128KB)。使用分区的固件可以进一步对块进行独特的分段 — 例如,一个块中有 512 字节的分段,但不包括元数据。

Flash 设备有一个常见的限制,即与其他存储设备(如 RAM 磁盘)相比,它需要进行设备管理。flash 内存设备中惟一允许的 Write 操作是将 1 修改为 0。如果需要撤销操作,那么必须擦除整个块(将所有数据重置回状态 1)。这意味着必须删除该块中的其他有效数据来实现持久化。NOR flash 内存通常一次可以编写一个字节,而 NAND flash 内存必须编写多个字节(通常为 512 字节)。

这两种内存类型在擦除块方面有所不同。每种类型都需要一个特殊的 Erase 操作,该操作可以涵盖 flash 内存中的一个整块。NOR 技术需要通过一个准备步骤将所有值清零,然后再开始 Erase 操作。Erase 是针对 flash 设备的特殊操作,非常耗费时间。擦除操作与电有关,它将整个块的所有单元中的电子放掉。

NOR flash 设备通常需要花费几秒时间来执行 Erase 操作,而 NAND 设备只需要几毫秒。flash 设备的一个关键特性是可执行的 Erase 操作的数量。在 NOR 设备中,flash 内存中的每个块可被擦除 100,000 次,而在 NAND flash 内存中可达到一百万次。

Flash 内存面临的挑战

  • 垃圾收集 是一个回收无效块的过程(无效块中包含了一些无效数据)。回收过程包括将有效数据移动到新块,然后擦除无效块从而使它变为可用。
  • 管理坏块

fuse

Filesystem in Userspace(FUSE) 是一个支持在用户空间中开发文件系统的内核模块。文件系统驱动程序实现将来自 VFS 的请求发送回用户空间。这是一种在不借助内核开发的情况下开发文件系统的好方法

Ref

  1. Linux 文件系统剖析
  2. Linux flash 文件系统剖析
  3. Flash 文件系统介绍和平台采用 squashfs+ubifs 原因
  4. 嵌入式:jffs2,yaffs2,logfs,ubifs 文件系统性能分析