LittleFS v2.11.0 版本发布:文件系统收缩与跨平台支持增强
littlefs 项目地址: https://gitcode.com/gh_mirrors/lit/littlefs
项目简介
LittleFS 是一款专为嵌入式系统设计的轻量级文件系统,具有强大的掉电安全性和磨损均衡特性。它特别适合资源受限的微控制器环境,广泛应用于物联网设备、嵌入式存储等场景。最新发布的 v2.11.0 版本带来了一些实用的新功能和改进。
文件系统收缩功能
本次版本最值得关注的新特性是由贡献者 sosthene-nitrokey 实现的文件系统收缩能力。通过新增的 LFS_SHRINKNONRELOCATING
编译选项,开发者现在可以使用 lfs_fs_grow
函数来减少文件系统的 block_count
。
需要注意的是,这个功能有明确的限制条件:
- 只能在不涉及块重定位的情况下工作
- 主要用于迁移旧版本文件系统镜像(早期版本会忽略磁盘上的
block_count
) - 由于LittleFS采用伪随机块分配策略,即使在小文件系统中也可能无法成功收缩
这项改进为特定场景下的存储管理提供了更多灵活性,但开发者需要理解其局限性,不应将其视为通用的文件系统收缩解决方案。
跨平台编译改进
yamt 贡献了一系列改进,使得 LittleFS 现在能够更好地支持 macOS 平台:
- 解决了测试运行器在 macOS 上的链接问题
- 改进了 Makefile 以原生支持 Clang 编译器
- 新增了
NO_GCC
环境变量,支持其他非 GCC/Clang 编译器
不过需要注意的是,使用 Clang 编译时目前还无法获取堆栈测量信息,因为缺少 GCC 的 -fcallgraph-info=su
替代方案。社区正在寻找解决方案。
关键错误修复
本次版本包含了多个重要修复:
-
CRC 相关修复(DvdGiessen 贡献)
- 解决了用户自定义 LFS_CRC 在多文件包含时的重复定义问题
- 移除了 LFS_CRC 必须带分号的限制
-
16位设备兼容性(selimkeles 贡献)
- 修复了
lfs_fromle32
/lfs_frombe32
在16位设备上可能出现的溢出问题
- 修复了
-
目录操作稳定性(Hugh-Baoa 发现)
- 修复了在删除操作期间目录重定位可能导致的双重孤儿问题
-
构建工具改进(DvdGiessen 贡献)
- 修复了当 /tmp 位于不同文件系统时
changeprefix.py
脚本的兼容性问题
- 修复了当 /tmp 位于不同文件系统时
性能与资源占用
从资源占用统计来看,v2.11.0 保持了 LittleFS 一贯的轻量级特性:
- 默认配置下代码大小约17KB,堆栈使用约1.4KB
- 只读模式代码大小降至约6KB
- 线程安全模式增加约0.5KB的额外开销
性能基准测试显示读写性能与前一版本持平,保持了稳定的表现。
总结
LittleFS v2.11.0 虽然是一个小版本更新,但包含了多个对开发者有实际价值的改进。特别是文件系统收缩功能的引入和跨平台支持的增强,使得这个嵌入式文件系统更加灵活和易用。对于正在使用或考虑采用 LittleFS 的开发者来说,这个版本值得关注和升级。
随着开源社区的持续贡献,LittleFS 正在不断完善其功能集和兼容性,为嵌入式存储解决方案提供了一个可靠的选择。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考