优秀开源库LittleFs学习笔记

LittleFS是一种专为资源受限的嵌入式系统设计的文件系统,采用COW和日志结构化存储,利用B+树索引和简单的垃圾回收算法来保证容错性、稳定性和资源效率。其移植涉及接口实现和配置函数的定制.
摘要由CSDN通过智能技术生成

LittleFs

目录

深究LittleFs : littlefs基于COW(写时复制, instead of updating block inplace, all updates are performed by creating
a copy with the changes and replacing any references to the old block with
our new block) + 日志文件系统(add a bounded log where we note every change
before it occurs.), If we look at existing filesystems, there are two interesting design patterns
that stand out, but each have their own set of problems. Logging, which
provides independent atomicity, has poor runtime performance. And COW data
structures, which perform well, push the atomicity problem upwards. 同时使用了 skip-lists(跨级链表), 当前节点不仅有下一个节点的地址,还有下下一个节点的地址,这样遍历的时候,可以一次遍历两个,遍历操作复杂度降为logN 。 新块的申请则根据目前为止尚未被使用或最晚被使用的块, 跟alios kv的申请规则一样。 另外还有两个块的思想,类似于查看HK的裸盘里的两个B树的思想 ?

Littlefs 是怎么实现的
  • LittleFS(Little File System)是一种专为嵌入式系统开发的闪存文件系统。它具有很小的系统占用、高容错性和低RAM消耗等明显特点,因此非常适合于资源受限的环境。LittleFS 的实现可以分为以下几个关键部分:
    • 块设备抽象:LittleFS 针对不同的底层存储技术(如 NOR 闪存、NAND 闪存等)提供了一个抽象层,这使得文件系统可以更简单地适应各种存储介质。
    • 日志结构化存储:为了确保可靠性并减少对读写器件的使用损耗,LittleFS 使用日志结构化存储(Log-structured Storage)。在这种存储方式下,数据的写入(包括更新和删除操作)都是追加在存储设备的末尾,而非在原始位置擦除和重写。
    • 元数据索引:LittleFS 使用 B+ 树实现了一个简单的元数据索引,可以在保持小的 RAM footprint 的同时提供快速的查找能力。
    • 耐用性与容错性:LittleFS 使用了一种叫做 “copy-on-write” 的方法,保证文件系统具有一致性和耐用性。当执行写入操作时,LittleFS 不会覆盖现有数据,而是将新数据写入一个尚未分配的存储区域。并更新元数据索引指向新数据。这样即使在突然掉电等异常情况下,文件系统的数据也可以保持一致。
    • 垃圾回收与 wear leveling 算法:LittleFS 实现了一个简单的垃圾回收和 wear leveling 算法,以确保文件系统始终有足够空间存储数据,同时降低闪存的使用损耗。
      总之,LittleFS 通过一种针对嵌入式系统的简洁实现,为这些设备提供了具有容错性、稳定性和资源节省等特点的轻量级文件系统。
  • littlefs需要自行实现user_provided_block_device_read 、prog(写入)、erase、sync 以及块的配置信息(有多少个块,块的大小等)

LittleFs设计

要解决什么 ?

  1. 断电不丢失,
  2. 磨损均衡
  3. 小内存

业界解决的方法是什么 ?

我是怎么解决的 ?

LittleFs移植

  • 把移植所需的接口实现就好,主要是一些配置和块读写等操作函数,配置和快读写操作函数其实就是驱动。 整个过程和移植FreeRtos比较类似。嵌入式移植的原理大都相似
littlefs 是怎么实现的 


LittleFS(Little File System)是一种专为嵌入式系统开发的闪存文件系统。它具有很小的系统占用、高容错性和低RAM消耗等明显特点,因此非常适合于资源受限的环境。

LittleFS 的实现可以分为以下几个关键部分:

块设备抽象:LittleFS 针对不同的底层存储技术(如 NOR 闪存、NAND 闪存等)提供了一个抽象层,这使得文件系统可以更简单地适应各种存储介质。
日志结构化存储:为了确保可靠性并减少对读写器件的使用损耗,LittleFS 使用日志结构化存储(Log-structured Storage)。
在这种存储方式下,数据的写入(包括更新和删除操作)都是追加在存储设备的末尾,而非在原始位置擦除和重写。
元数据索引:LittleFS 使用 B+ 树实现了一个简单的元数据索引,可以在保持小的 RAM footprint 的同时提供快速的查找能力。 
.TextImageRelation.DrawLine.break_here(space_interval_elsewhere=2)Answer ]}
耐用性与容错性:LittleFS 使用了一种叫做 "copy-on-write" 的方法,保证文件系统具有一致性和耐用性。
当执行写入操作时,LittleFS 不会覆盖现有数据,而是将新数据写入一个尚未分配的存储区域。并更新元数据索引指向新数据。
这样即使在突然掉电等异常情况下,文件系统的数据也可以保持一致。
垃圾回收与 wear leveling 算法:LittleFS 实现了一个简单的垃圾回收和 wear leveling 算法,以确保文件系统始终有足够空间存储数据,同时降低闪存的使用损耗。
总之,LittleFS 通过一种针对嵌入式系统的简洁实现,为这些设备提供了具有容错性、稳定性和资源节省等特点的轻量级文件系统。

参考资料

LittleFS:一个完整的嵌入式文件系统介绍、移植使用教程_觉皇嵌入式的博客-CSDN博客

LittleFS简单移植 - CashQian Blog

littlefs-project/littlefs: A little fail-safe filesystem designed for microcontrollers (github.com)

littlefs/lfs.h at master · littlefs-project/littlefs · GitHub

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值