最新动态
* 2010-4-5: UFFS v1.3.2 已经发布 。
* 2010-2-23: UFFS v1.3.0 已经发布 。
* 由于Googlepage服务将很快终止,有关UFFS的动态信息和更多介绍通过新建立的博客发布。博客地址为:http://all-about-uffs.blogspot.com
UFFS特性介绍
UFFS是一个专门为NAND Flash设计的嵌入式文件系统,她具有一些非常诱人的特性以适合嵌入式应用:
* 超低内存需求: (下表是一些典型配置情况下的内存需求)
Size | Page Size | Pages per block | Total Blocks | Buffers/Caches | Total RAM
512MB | 2048 | 32 | 8192 | 33/10 | 200K
128MB | 512 | 32 | 8192 | 33/10 | 151K
32MB | 512 | 32 | 2048 | 33/10 | 55K
16MB | 512 | 32 | 1024 | 10/10 | 26K
关系树结点: 16 * toatl_blocks
页缓存: page_size(512) * buffers (10 ~ pages_per_block)
块信息缓存: (14 * pages_per_block) * block_info_caches ( 5 ~ 20)
总内存需求 = 关系树结点 + 页缓存 + 块信息缓存 + 其它(1~2K)
更新:新版本内存消耗有所减少,详细请参考包中的README文件。
由于所需内存很少,因此UFFS可以应用在一些对内存使用比较苛刻的场合,例如有些MCU仅有数十KB至一百多KB的内置SRAM, 无需外扩内存即可使用UFFS管理大容量NAND Flash。UFFS内部使用更高效的方法管理树结点和缓冲区内存,在启动时就一次性分配好要使用的内存。一旦分配内存此后便不再改变(上表所列内存即为最大使用内存),这些内存直至卸载UFFS时才全部释放,因此UFFS可以采用静态内存分配,以适应无法提供动态内存分配器的系统(例如有些高可靠系统上禁止使用动态内存分配)。
* 快速启动
不象YAFFS在启动时需要读取所有Spare区,UFFS在启动时每个块仅需读取一至两个Spare即可,因此可以实现快速启动。典型情况下,装载(mount) 128M字节满负荷的UFFS分区仅需要不到1秒。
* 高鲁棒性
UFFS采用日志式更新算法,任意时刻意外断电,UFFS文件系统可保持完整性。意外断电时,仅处于缓冲区内的部分数据丢失,在下次启动时,UFFS会自动回滚到最后一次成功写入的状态。
* 坏块管理,ECC校验和纠错,负载均衡
这些特性对于Flash文件系统来说不算什么新鲜,但是UFFS以一种简单却非常有效的方式实现了他们。
* 无需额外的垃圾回收
因NAND Flash的擦除速度极快,UFFS采用边写入边动态回收“脏”的块的方法,因而无须额外的垃圾回收机制。
* 可支持直接“裸”Flash接口,无须操作系统支持
UFFS支持通过I/O口线连入系统的“裸”Flash接口,只需实现简单的"读/写/擦除"等操作即可,适合在小型RTOS甚至无OS的情况下使用。
* 支持多分区,多种NAND Flash
UFFS支持多个分区,每个分区以一个虚拟目录的形式mount到根目录下。UFFS支持多种NAND Flash芯片,允许不同的分区使用不同类型的FLASH芯片。 目前UFFS内置支持多数Samsung NAND Flash,包括small page(512)和large page(2048).
* 测试完备
UFFS可以在附带的PC模拟器(用PC上的一个文件模拟Flash芯片)上方便测试。目前已经有超过万台的嵌入式设备使用UFFS作为大容量NAND Flash文件系统,运行数年状况良好。
UFFS的不足
最大文件限制:UFFS以最小擦除单元为文件存储单位,因此一个文件至少占用一个block。也就是说,UFFS文件系统可存储的文件数目受限于NAND flash的block数量。例如,在128MB的含有8192个块的NAND flash上,最多只可创建8192个文件。
为何发起UFFS项目?
* 一些嵌入式系统RAM资源有限,但希望在NAND Flash上建立高度可靠的文件系统。
* JFFS/JFFS2 消耗太多内存,而且不容易移植到不具备OS的嵌入式系统上。
* YAFFS/YAFFS2 是一个非常优秀的可适合NAND Flash的文件系统,但是 依然需要消耗不少内存
* 其他?擅未发现有类似的开源项目....
何处可以获得UFFS ?
目前你可以从 sourceforge.net (http://www.sourceforge.net/projects/uffs)上下载UFFS的所有资源。
一些bug总是在最新的SVN库里面得到最先修正。目前最新的SVN库地址:https://uffs.svn.sourceforge.net/svnroot/uffs/branch/uffs-1.2.0
工作原理
- Understanding UFFS ( PDF format )
在PC上尝试UFFS
Compile and run UFFS test shell:
- Linux:
1)首先请确保安装了cmake,在Ubuntu/Debian下可以用apt-get安装cmake:
sudo apt-get install cmake
2)解压UFFS源代码到uffs-source目录
3)与uffs-source并行建立build目录
4)cd到build目录,然后运行:
cmake ../uffs-source
make
src/utils/mkuffs --help - Windows:
1)确保你的机器上安装有Microsoft Visual Studio 和cmake。可以到这里下载合适的cmake安装包:http://www.cmake.org/cmake/resources/software.html
2)解压UFFS源代码到uffs-source目录
3)与uffs-source并行建立build目录
4)cd到build目录,然后运行:
cmake ../uffs-source
5)用Visual Studio打开生成的uffs.dsp文件
详细请参详:http://all-about-uffs.blogspot.com/2009/04/build-simulatormkuffs-on-windows-with.html
移植到嵌入式系统
- Modify uffs_os.c for your embedded software environment.
- Create the flash interface file in which implement all member of "struct uffs_DeviceOpsSt" and create your partition/mount point configuration. (see: src/example/flash-interface-example.c)
如何支持UFFS?
使用UFFS,或者发现并报告bug给我 :-)
- Bug reports please to: http://www.sourceforge.net/projects/uffs
- Talk to me directly on MSN: superzgz@hotmail.com
- Send me a patch at: < ricky_gz_zheng@yahoo.co.nz >
- 欢迎资助UFFS项目,或者点击以下广告帮助UFFS募集资金 :-)
有问题?
- Google group: http://groups.google.com/group/uffs
下一个版本: UFFS2
The main improvement on UFFS2 will be:
*The smaller memory footprint: reduce 25% memory usage as a result.
*One or more files/directories reside on one block, will significantly improve space efficiency for small files.
*Symbol link or other special files.
*Static wear-leveling
*Support NandOne and more NAND flash chips ...