littlefs系列:Technical Specification

本文深入探讨了LittleFS文件系统的工作原理,包括其基于block的结构、metadatapair的原子更新机制、目录和文件元数据的组织方式,以及各种metadatatag的详细解释。了解LittleFS如何高效管理闪存存储。

1、quick notes

  • littlefs是block-based文件系统。flash被划分成多个相同大小的block
  • block pointer是32bits,0xFFFFFFFF表示空指针
  • 除了逻辑block size(通常是erase block size),littlefs还有program block size和read block size,后面两个block size主要是用于flash 读写时的对齐
  • littlefs采用little-endian order

 

2、Directories/Metadata pairs

metadata pair是littlefs的基石,提供了原子更新的能力。superblock也是存储在metadata pair中。metadata pair存储在两个block中,一个block在另一个block erase的时候提供备份。同一个metadata pair中的两个block并不要求是连续的,可以分散在不同的位置,通过指针链接。

每一个metadata block类似于一个可以追加的log,包含多个commit。commit可以按照顺序追加到metadata block中而不需要erase操作。同时,后续的commit可以取代旧的commit,只有最新的commit才被认为是有效的。

 

每个metadata block包含一个32-bit的revision count,后面跟着多个commit。每个commit包含一个或多个entry,每个commit的最后是32-bit的CRC。entry不一定是word-aligned。但是每个commit都是program block size对齐的,因此commit与commit之间可能存在padding。

metadata block的主要域:

1)revision count:32bit长。每擦除一次就增加1,如果两个metadata block都包含有效的数据,则使用最新的revision count所在的block。

2)CRC:32bit长。使用0x04c11db7多项式,初始值为0xFFFFFFFF。

3)entry:每个entry以32-bit的tag开始,后面跟着可变长度的数据。

metadata block支持前向和后向的迭代。为了减少重复空间,相邻entry的tag通过XOR连接起来,初始值是0xffffffff。

 

每个entry中还包含一个valid bit用于指示当前entry和commit有效。

下图是包含4个entry的block。

  .---------------------------------------.
.-|  revision count   |      tag ~A       |        \
| |-------------------+-------------------|        |
| |                 data A                |        |
| |                                       |        |
| |-------------------+-------------------|        |
| |      tag AxB      |       data B      | <--.   |
| |-------------------+                   |    |   |
| |                                       |    |   +-- 1st commit
| |         +-------------------+---------|    |   |
| |         |      tag BxC      |         | <-.|   |
| |---------+-------------------+         |   ||   |
| |                 data C                |   ||   |
| |                                       |   ||   |
| |-------------------+-------------------|   ||   |
| |     tag CxCRC    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值