JFFS文件系统和YAFFS文件系统的比较

合集下载

几种Nand flash文件系统的对比

几种Nand flash文件系统的对比

几种Nand flas文件系统的对比来源:NLE-FFS: A Flash File System with PRAM for Non-linear EditingFor thesedevices, NAND flash memory has became the most attractive storage medium due to outstanding characteristics such as its increased capacity, low power consumption, small size and light weight. For the efficient management of NAND flashmemory, several flash file systems have been proposed, including JFFS2, YAFFS2, CFFS and PFFS. several file systems such as MNFS,NAMU and ScaleFFS have been designed forreal-time recording /playback and large-capacity storage. A. YAFFS2YAFFS2 is the most widely employed file system for NAND flash memory. YAFFS2 essentially saves the object ID (file ID) and the chunk (page) number in the spare region to show the offset of a page and the owner file of the page. Therefore, YAFFS2 reads the spare regions and object headers to establish the metadata in memory.Although YAFFS2 is designed to support NAND flash memory, it has scalability problems. With YAFFS2, the location of the updated page is saved in NAND flash pages or spare regions, as shown in Fig. 10 (a); hence, the file systemshould scan the entire flash space at the mounting time. Moreover, the entire directory and file system structures must be saved in main memory at that time. Thus, the mounting time and the memory usage are increased linearly according to the NAND flash size and the number of files.YAFFS2 has another problem in which many pages are consumed during metadata updates. The metadata are frequently updated and most of the metadata updates are performed in several bytes. Metadata updating creates large numbers of invalid pages. This severely degrades the write performance due to garbage collection, as byte-level updates and in-place updates are not allowed in NAND flash.B. PFFSTo address the problems with YAFFS2, PFFS wasproposed [4]. In PFFS, an architecture using PRAM and NAND flash memory is employed. In this file system,metadata are separated and stored in the PRAM region,whereas the other data are stored in the NAND flash memory region, as shown in Fig. 10 (b). Metadata separation has two advantages. First, the overhead of metadata updates is reduced. As shown in Fig. 10 (a),YAFFS2 writes 2KB of a NAND flash page for each metadata update. As the metadata are frequently updated and most of the metadataupdates are performed in several bytes, metadata updates with YAFFS2 create many invalid pages. This leads to severe performance degradation due to garbage collection. However, PFFS writes metadata in units of bytes, as it maintains metadata in the PRAM region as shown in Fig. 10 (b). Consequently, metadata separation by PFFS reduces the number of page-writes on account of in-place updating and byte-level updating. Second, PFFS requires only a short mounting time and uses a fixed amount of memory, whereas other flash file systems such as YAFFS2 require a considerable amount of time to scan NAND pages to construct in-memory file and directory structures.However, PFFS is also a general-purpose file system; thus,it does not sufficiently consider NLE operations. In this paper,to effectively support NLE, NLE-FFS is proposed. It is based on the architecture shown in Fig.3.。

嵌入式linux系统中常用的文件系统

嵌入式linux系统中常用的文件系统

MTD设备与JFFS文件系统
这可能是最重要的一点:JFFS2 是专门 为象闪存芯片那样的嵌入式设备创建的, 所以它的整个设计提供了更好的闪存管 理。
除了JFFS2之外,另外一种的嵌入式文件 系统的选择是YAFFS2。
Yaffs与jffs2文件系统比较
Nand上yaffs文件系统的优势 • 专门为Nand flash设计的日志文件系统,提供磨损平 衡和调电恢复的鲁棒性。 Yaffs将文件组织成固定大小 (512B)的数据段,在进行文件修改时,总是先写入新 的数据块,然后将旧的的数据块从文件中删除。
当 Linux 运行于嵌入式设备上时, 设备 就成为功能齐全的单元,许多守护进程会在 后台运行并生成许多日志消息。另外,所有 内核日志记录机制,象 syslogd、dmesg 和 klogd,会在 /var 和 /tmp 目录下生成许多 消息。由于这些进程产生了大量数据,所以 允许将所有这些写操作都发生在闪存是不可 取的。由于在重新引导时这些消息不需要持 久存储,所以这个问题的解决方案是使用 tmpfs。
Linux下的日志文件系统(XFS,ReiserFS,Ext3等)能保 持数据的完整性,但消耗过多系统资源的弱点使之不能 成为嵌入式系统中的主流应用。并且这些都是专门为硬 盘这类的存储设备优化,对于flash这类的存储介质并 不适用。
因为现有的嵌入式文件系统的碎片化的问题,大部分的 嵌入式设备只给用户提供了只读文件系统,给用户带来 不便。
jffs/jffs2文件系统的缺点: •不适合大容量的Nand flash • jffs的日志通过jffs_node建立在RAM中,占用RAM空间: 对于128MB的Nand大概需要4MB的空间来维护节点 • 启动的时候需要扫描日志节点,不适合大容量的Nand flash • FAT系统没有日志

深入理解yaffs2文件系统(一)

深入理解yaffs2文件系统(一)

深⼊理解yaffs2⽂件系统(⼀)深⼊理解yaffs2⽂件系统(⼀)1、Flash⽂件系统1.1、背景已经有多种flash⽂件系统(FFSs)或flash块驱动(在之上运⾏⼀个常规的FS),同时都有优点或缺点。

Flash存储器有⾮常多的限制,这⾥就不⼀⼀列举了。

已经有各种⽅法解决这些限制,以提供⼀个⽂件系统。

必须认识到,“flash”,包括NOR和NAND,各⾃有不同的限制。

很容易被专业术语“flash”误导,误以为⽤于NorFlash的⽅法也⽴即适⽤于NandFlash。

Nand块驱动⼀般采⽤FAT16作为⽂件系统,但不够健壮,也不够贴近Flash的特性。

这些块驱动通过⼀个“本地--物理”的映射层来仿真可写的、类似于磁盘扇区的块。

当使⽤FAT16时,这些⽂件系统⼯作的相当好,它们内存消耗⼩,代码尺⼨也很⼩。

但就像所有基于FAT 的系统⼀样,它们很容易损坏(如,丢失簇)。

其他的途径则是设计整个⽂件系统,不是基于块驱动,⽽且是flash友好的,这允许更多的余地来解决上述所提到的问题。

当前有两个linux⽂件系统能⾮常好的⽀持NorFLash,那就是JFFS以及它的升级版本JFFS2。

这两者都提供⽇志机制,⼤⼤的提升了健壮性,这也是嵌⼊式系统特别重要的⼀个特性。

不幸的是,它们在RAM消耗和启动时间⽅⾯都不是很好。

JFFS在flash中的每⼀个journalling⽇志节点,需要⼀个基于RAM的jffs_node结构,每⼀个节点为48字节。

JFFS2做了⼀个⼤改进,通过剪裁相关的结构体(jffs2_raw_node_ref)⽽减少到16字节。

即使如此,在512字节页⼤⼩128M的NandFlash,按平均节点⼤⼩来算,也需要250000字节约4M⼤⼩。

JFFS和JFFS2在启动时,需要扫描整个flash阵列来查找journaling节点,并决定⽂件结构。

由于NAND容量⼤、慢、连续访问、需要ECC校验,这些特性将导致不可接受的、很长的启动时间。

YAFFS文件系统移植笔记

YAFFS文件系统移植笔记

YAFFS文件系统移植笔记YAFFS文件系统移植笔记基于Linux2.6的YAFFS文件系统移植v1.0,2005-6-6一、YAFFS文件系统简介YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计的嵌入式文件系统。

与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。

YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。

它们的不同之处在于:(1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。

YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。

(2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。

(3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。

YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。

NAND Flash大多采用MTD+YAFFS的模式。

MTD ( Memory T echnology Devices,内存技术设备)是对Flash操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。

二、YAFFS文件系统的移植yaffs代码可以从下载(yaffs代码包括yaffs_ecc.c,yaffs_fileem.c,yaffs_fs.c,yaffs_guts.c,yaffs_mtdif.c,yaffs_ramem.c。

)表一 Yaffs文件系统源代码相关文件及功能描述文件名功能yaffs_ecc.c ECC校验算法yaffs_fileem.c 测试flashyaffs_fs.c 文件系统接口函数yaffs_guts.c Yaffs文件系统算法yaffs_mtdif.c NAND函数yaffs_ramem.c Ramdisk实现1.内核中没有YAFFS,所以需要自己建立YAFFS目录,并把下载的YAFFS代码复制到该目录下面。

YAFFS文件系统简介

YAFFS文件系统简介

YAFFS文件系统简介一、YAFFS文件系统简介YAFFS(Yet Another Flash File System)文件系统是专门为NandFlash设计的文件系统,有些类似与JFFS/JFFS2文件系统,不同之处是JFFS/JFFS2文件系统最初是为NorFlash的应用场合设计的,而NorFlash和NandFlash本质上有较大的区别(坏块、备用区、容量),所以尽管JFFS/JFFS2文件系统也能应用于NandFlash,但由于它的内存占用和启动时间针对NorFlash做了特殊取舍,所以对于NanFlash来说通常不是最优方案(性能较低和启动速度稍慢)。

而YAFFS利用NandFlash提供的每个页面16字节或64字节的Spare区(备用区)空间来存放ECC和文件系统的组织信息,能够实现错误检测和坏块处理。

这样的设计充分考虑了NandFlash以页面为存取单元的特点,将文件组织成固定大小的数据段,能够提高文件系统的加载速度。

(垃圾回收算法+贪心算法)YAFFS目前有YAFFS、YAFFS2两个版本(YAFFS3还在研发阶段,没有面市),一般来说,YAFFS对小页面(512B+16B/页)有很好的支持,YAFFS2对更大的页面(2K+64B/页)支持更好。

二、YAFFS文件系统在NandFlash上的组织方式YAFFS对文件系统上的所有内容(比如正常文件,目录,链接,设备文件等等)都统一当作文件来处理,每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、所有者ID、组ID、长度、文件名、Parent Object ID等信息。

因为需要在一页内放下这些内容,所以对文件名的长度,符号链接对象的路径名等长度都有限制。

YAFFS充分利用了NandFlash的“备用区”空间,这个备用空间是指每个页的16自己的Spare区,通常不作为存储数据的空间。

YAFFS用了其中的6个字节作为页面数据的ECC,1个字节用作坏块状态标志字,1个字节用作数据状态标志字,其余的8个字节用来存放文件系统的组织信息。

linux常见文件系统格式

linux常见文件系统格式

Linux系统常见的文件系统格式包括:1. JFS(Journaling Flash File System):由瑞典Axis Communications公司为嵌入式系统开发的闪存文件系统,JFFS2是RedHat公司基于JFFS开发的闪存文件系统,主要用于NOR型闪存,基于MTD驱动层。

2. YAFFS/YAFFS2(Yet Another Flash File System):专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。

与JFFS2相比,它减少一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。

3. VFAT(Virtual FAT):Windows操作系统使用的FAT文件系统在Linux下的实现。

4. NTFS(New Technology File System):Windows NT及后续版本使用的磁盘文件系统,具有较高的稳定性和性能。

5. HPFS(High Performance File System):OS/2操作系统使用的文件系统,具有较好的性能和稳定性。

6. NFS(Network File System):一种分布式文件系统,允许多台计算机通过网络共享文件和目录。

7. SMB(Server Message Block):一种用于网络共享文件的协议,常用于Windows和Linux 之间的文件共享。

8. Proc(Process File System):一种虚拟文件系统,用于访问Linux内核进程的信息。

9. ext(Extended File System):是Linux系统最早的文件系统类型之一,具有较好的性能和稳定性。

ext2、ext3和ext4都是ext的改进版本。

10. XFS(Extended I/O File System):一种高性能的日志文件系统,适合大容量存储设备。

11. Minix:一种小型的类Unix文件系统,主要用于教育和开发。

嵌入式linux文件系统的实现及其简单应用

嵌入式linux文件系统的实现及其简单应用

嵌入式linux文件系统的实现及其简单应用嵌入式Linux文件系统是指在嵌入式系统中运行的Linux操作系统所使用的文件系统。

嵌入式系统通常具有资源有限的特点,需要对文件系统进行优化和裁剪。

本文将介绍嵌入式Linux文件系统的实现以及其简单应用。

一、嵌入式Linux文件系统的实现1.1 文件系统类型嵌入式Linux文件系统主要有如下几种类型:1.1.1 JFFS2文件系统JFFS2(Journaling Flash File System 2)是一种Linux文件系统,专门用于闪存设备。

相比于其他文件系统,JFFS2更适合用于嵌入式系统中。

1.1.2 ext2文件系统ext2(Extended file system 2)是Linux中最常见的文件系统之一,它的优点是稳定性高,可靠性强。

1.1.3 ext3文件系统ext3是ext2文件系统的升级版,在ext2的基础上增加了日志功能,使得文件系统更加可靠。

1.1.4 UBIFS文件系统UBIFS(Unsorted Block Image File System)是一种专门用于闪存设备的文件系统,它可以在闪存设备上进行块级别操作,从而提高了文件系统的效率和可靠性。

1.2 文件系统优化由于嵌入式系统资源有限,需要对文件系统进行优化,以提高系统的性能和稳定性。

1.2.1 压缩文件系统压缩文件系统可以减小文件系统的体积,从而减少系统启动时间和占用资源。

1.2.2 只读文件系统只读文件系统可以提高系统的稳定性,防止因文件系统损坏而导致的故障。

1.2.3 数据缓存数据缓存可以加速文件系统的访问速度,提高系统的性能。

二、嵌入式Linux文件系统的简单应用2.1 嵌入式Linux系统开发在嵌入式Linux系统的开发过程中,需要选择适合系统特点的文件系统,并进行优化和裁剪。

同时,需要选择合适的开发工具和调试工具,以提高开发效率和调试效果。

2.2 嵌入式媒体设备在嵌入式媒体设备中,需要使用适合嵌入式系统的文件系统,如JFFS2或UBIFS。

文件系统

文件系统

FAT32另一个重要的特点是完全支持长文件名, 长文件名依然是记录在目录项中,为了低版本的 OS或程序能正确地读取长文件名文件,系统自动 为长文件名文件建立了一个对应地短文件名,使 对应数据既可以用长文件名寻址,也可以用短文 件名寻址.不支持长文件名的OS或程序会忽略它 认为不合法的长文件名字段,而支持长文件名的 OS或程序则会以长文件名为显示项来记录和编辑, 并隐藏起短文件名.
JFFS
JFFS2 MTD驱动
NAND闪存
,
NOR闪存
JFFS是针对以闪存为存储介质的嵌入式系统, 所以充分考虑了闪存的物理局限性,使用了尽可 能高效的日志系统.同时它还具有负载平衡,垃 圾收集等功能. 日志系统的主要设计思想是跟踪文件系统的 变化而不是文件的内容.日志文件系统中,存储 系统上面有一系列节点记录了对文件的操作.
如果在Windows XP中使用大于32GB的分区,唯 一可以选择的是NTFS格式.如果计算机不考虑安 全性问题,更注重与Win 9X的兼容性,那么FAT32 格式是最好的选择.如果注重计算机系统的安全 性的话,建议用户采用NTFS格式. 如果要使用多个操作系统,需要安装Win 9X或 其它操作系统,建议用户做成多启动系统,一个 分区采用FAT32格式,另外的分区采用NTFS格式, 并且将Windowds XP安装在NTFS格式分区下,其它 操作系统安装在FAT32格式下.
NTFS可以自动地修复磁盘错误而不会显示出错 信息.Windows XP向NTFS分区中写文件时,会保 留文件的一份拷贝,然后检查向磁盘中所写的文 件是否与内存中的一致.如果两者不一致, Windows就把相应的扇区标为坏扇区而不再使用它 (簇重映射),然后用内存中保留的文件拷贝重 新向磁盘上写文件.如果在读文件时出现错误, NTFS则返回一个读错误信息,并告知相应的应用 程序数据已经丢失.

不同文件系统的比较

不同文件系统的比较

几种文件系统比较嵌入式系统中比较常用的文件系统为JFFS、JFFS2、CRAMFS和YAFFS。

J f f s2:日志闪存文件系统版本2(J o u r n a l l i n g F l a s h F i l e S y s t e m v2)JFFS2主要应用于NOR Flash,可读写,支持数据压缩,安全保护等特点。

存储空间已满或接近满时,JFFS2文件系统的运行速度却由于垃圾收集的原因而放慢。

不适合用于NAND Flash,NAND Flash的容量一般比较大,JFFS2文件系统为维护日志节点所占用的内存空间也迅速增大,因此JFFS2在挂载时需要很长时间来扫描整个FLASH的内容,用以找出所有的日志节点并建立文件结构,这样就会极大的降低系统的运行效率。

y a f f s:Y e t A n o t h e r F l a s h F i l e S y s t e myaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的日志型文件系统。

不支持数据压缩,速度快,挂载时间很短,对内存的占用较小。

支持跨平台。

yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API。

yaffs仅支持小页(512 Bytes) NAND闪存,yaffs2可支持大页(2KB) NAND闪存。

同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。

C r a m f s C o m p r e s s e d R O M F i l e S y s t e m是一种只读的压缩文件系统。

它也基于MTD驱动程序。

降低了系统成本。

以压缩方式存储,在运行时解压缩,不支持应用程序以XIP方式运行,需要将程序拷到RAM里去运行,它的效率高,速度快,其只读的特点保护文件系统免受破坏,提高了系统的可靠性。

R o m f s文件系统是一种简单的只读文件系统,不支持动态擦写,按顺序存放数据,因而支持应用程序以XIP片内运行方式运行,在系统运行时,节省RAM空间。

嵌入式文件系统比较

嵌入式文件系统比较
/yaffs/index.html
上下载。在测试过程中稳定性能比JFFS2文件系统要稳定的多,而且mount分区的时间也比JFFS2文件系统少的多。用JFFS2 mount一个2m的文件系统大约需要1s。下面分别介绍在uclinux下面使用JFFS2和YAFFS文件系统。
lib/下的一些动态链接库。
shell busybox知道吗? 利用这个,可以省很多空间, 到google上搜搜
本文来自ChinaUnix博客,如果查看原文请点:/u1/55409/showart_452871.html
1、JFFS2


上面下载最新的MTD和JFFS2压缩包。压缩包里面还有有关的内核补丁和一些MTD的相关工具。主要的补丁就是ilookup-2.4.23.patch,因为最新的MTD驱动中要用到一个ilookup()函数。打完补丁、更新了MTD驱动和JFFS2文件系统之后就开始写自己nand flash驱动了。如果不想把JFFS2作为根文件系统的话,还需要修改MTD_BLOCK_MAJOR。驱动可以参考里面的例子,最简单的就是参考spia.c。
定义自己的驱动文件
File systems下
CONFIG_JFFS2_FS=Y
CONFIG_JFFS2_FS_DEBUG=2
CONFIG_JFFS2_FS_NAND=y /*这个是新加的*/
在uClinux v1.3.4 Configuration下
Flash Tools下
CONFIG_USER_MTDUTILS=Y
CONFIG_USER_MTDUTILS_ERASE=Y
CONFIG_USER_MTDUTILS_ERASEALL=Y
CONFIG_USER_MTDUTILS_MKFSJFFS2=Y

嵌入式linux下的文件系统

嵌入式linux下的文件系统

嵌入式linux下的文件系统嵌入式linux下常见的文件系统RomFS:只读文件系统,可以放在ROM空间,也可以在系统的RAM中,嵌入式linux中常用来作根文件系统RamFS:利用VFS自身结构而形成的内存文件系统,使用系统的RAM空间JFFS/JFFS2:为Flash设计的日志文件系统?Yaffs:专门为Nand Flash设计proc:为内核和内核模块将信息发送给进程提供一种机制,可以查看系统模块装载的信息?devFS:设备文件系统Linux上的Ext2fs支持4 TB 存储、文件名称最长1012 字符可选择逻辑块快速符号链接Ext2不适合flash设备是为象IDE 设备那样的块设备设计的,逻辑块大小必须是512 byte、1 KB、2KB等没有提供对基于扇区的擦除/写操作的良好管理如果在一个扇区中擦除单个字节,必须将整个扇区复制到RAM,然后擦除,再重写入在出现电源故障时,Ext2fs 是不能防止崩溃的文件系统不支持损耗平衡,缩短了flash的寿命jffs/jffs2文件系统的优缺点日志文件系统提供了更好的崩溃、掉电安全保护jffs2支持对flash的均匀磨损在扇区级别上执行闪存擦除/写/读操作要比Ext2文件系统好文件系统接近满时,JFFS2 会大大放慢运行速度——垃圾收集Nand上yaffs文件系统的优势专门为Nand flash设计的日志文件系统jffs/jffs2不适合大容量的Nand flashjffs的日志通过jffs_node建立在RAM中,占用RAM空间:对于128MB的Nand大概需要4MB的空间来维护节点启动的时候需要扫描日志节点,不适合大容量的Nand flashFAT系统没有日志编译yaffs文件系统mtd的最新补丁升级?接口更新,适合与yaffs与原有的mtd驱动程序不兼容,需要重写如果使用旧mtd驱动需要定义Makefile中MTD_OLD = -DCONFIG_YAFFS_USE_OLD_MTD参考文档:yaffs-rootfs-howto最新版的yaffs网站:/doc/402151539.html,/armlinux/proje cts/yaffs使用yaffs文件系统通过cat /proc/yaffs命令可以看到yaffs系统的相关信息mount -t yaffs /dev/mtdblock/0 /mnt/yaffs关于Linux文件系统JFFS全称为:The Journalling Flash File System(日志闪存文件系统)最初由瑞典的Axis Communications 开发,Red Hat 的David Woodhouse 对它进行了改进。

需要了解Linux flash文件系统

需要了解Linux flash文件系统

需要了解Linux flash文件系统您之前可能听说过Journaling Flash File System(JFFS)和Yet Another Flash File System(YAFFS),但是您知道使用底层flash 设备的文件系统意味着什么吗?本文将向您介绍Linux® 的flash 文件系统,并探索它们如何通过平均读写(wear leveling)处理底层的可消耗设备(flash 部件),并鉴别各种不同的flash 文件系统以及它们的基本设计。

固态驱动器当前非常流行,但是嵌入式系统很久以前就开始使用固态驱动器进行存储。

您可以看到flash 系统被用于个人数字助理(PDA)、手机、MP3 播放器、数码相机、USB flash 驱动(UFD),甚至笔记本电脑。

很多情况下,商业设备的文件系统可以进行定制并且是专有的,但是它们会遇到以下挑战。

基于Flash 的文件系统形式多种多样。

本文将探讨几种只读文件系统,并回顾目前可用的各种读/写文件系统及其工作原理。

但是,让我们先看看flash 设备及其所面对的挑战。

Flash 内存技术Flash 内存(可以通过几种不同的技术实现)是一种非挥发性内存,这意味着断开电源之后其内容仍然保持下来。

两种最常见的flash 设备类型为:NOR 和NAND。

基于NOR 的flash 技术比较早,它支持较高的读性能,但以降低容量为代价。

NAND flash 提供更大容量的同时实现快速的写擦性能。

NAND 还需要更复杂的输入/输出(I/O)接口。

Flash 部件通常分为多个分区,允许同时进行多个操作(擦除某个分区的同时读取另一个分区)。

分区再划分为块(通常大小为64KB 或128KB)。

使用分区的固件可以进一步对块进行独特的分段—例如,一个块中有512 字节的分段,但不包括元数据。

Flash 设备有一个常见的限制,即与其他存储设备(如RAM 磁盘)相比,它需要进行设备管理。

嵌入式系统中常用的文件系统

嵌入式系统中常用的文件系统

嵌⼊式系统中常⽤的⽂件系统嵌⼊式系统中常⽤⽂件系统包括cramfs、jffs2、NFS、initrd、ext4、squashfs、ubifs等。

它们的特点如下:1、cramfs 和 jffs2 具有好的空间特性,很适合嵌⼊式产品应⽤。

2、cramfs 与 squashfs 为只读⽂件系统,⽬前只有 SPI Nor FLASH ⽀持这两种⽂件系统。

3、squashfs 压缩率最⾼。

4、jffs2 为可读写⽂件系统。

5、NFS ⽂件系统适⽤于开发初期的调试阶段。

6、initrd 采⽤ cramfs ⽂件系统,为只读。

7、ext4 ⽂件系统⽤于 eMMC 卡。

⼀、cramfscramfs 是针对 Linux 内核 2.4 之后的版本所设计的⼀种新型⽂件系统,使⽤简单,加载容易,速度快。

cramfs 的优点如下:1、将⽂件数据以压缩形式存储,在需要运⾏时进⾏解压缩,能节省 Flash 存储空间。

cramfs 的缺点如下:1、由于它存储的⽂件是压缩的格式,所以⽂件系统不能直接在 Flash 上运⾏。

2、⽂件系统运⾏时需要解压数据并拷贝到内存中,在⼀定程度上降低读取效率。

3、cramfs ⽂件系统是只读的。

⼆、jffs2jffs2 是 RedHat 的 David Woodhouse 在 jffs 基础上改进的⽂件系统,是⽤于微型嵌⼊式设备的原始闪存芯⽚的实际⽂件系统。

jffs2 ⽂件系统是⽇志结构化的可读写的⽂件系统。

jffs2 的优点如下:1、使⽤了压缩的⽂件格式。

最重要的特性是可读写操作。

jffs2 的缺点如下:1、jffs2 ⽂件系统挂载时需要扫描整个 jffs2 ⽂件系统,因此当 jffs2 ⽂件系统分区增⼤时,挂载时间也会相应的变长。

2、使⽤ jffs2 格式可能带来少量的 Flash 空间的浪费。

这主要是由于⽇志⽂件的过度开销和⽤于回收系统的⽆⽤存储单元,浪费的空间⼤⼩⼤致是若⼲个数据段。

3、jffs2 的另⼀缺点是当⽂件系统已满或接近满时,jffs2 运⾏速度会迅速降低。

yaffs2文件系统实现原理分析

yaffs2文件系统实现原理分析

1 概述YAFFS (Yet Another Flash File System )文件系统是专门针对NAND flash 设计的嵌入式文件系统,目前有YAFFS 和Y AFFS2两个版本,两个版本的主要区别之一在于Y AFFS2 能够更好的支持大容量的NAND flash 芯片。

YAFFS 文件系统有些类似于JFFS/JFFS2文件系统,与之不同的是JFFS/JFFS2文件系统最初是针对NOR flash 的应用场合设计的,而NORflash 和NAND flash 本质上有较大的区别,尽管JFFS/JFFS2文件系统也能应用于NANDflash ,但由于它在内存占用和启动时间方面针对NOR 的特性做了一些取舍,所以YAFFS2对NAND flash 来说通常才是最优的选择方案。

2 相关概念分析YAFFS2之前,把NAND flash 相关概念介绍下:NAND flash 由块(block)组成,块又由页(page)构成,擦除时以块为单位,读写时以页为单位,页又包含数据区和空闲区(OOB,Out-Of-Band),而Page 在YAFFS2中被称为Chunk ,其中的数据区用来存放实际的数据,OOB 用来存放附加信息实现NAND flash 的管理。

以T8000 AXMPFUA 单板使用的NANDflash 为例,每块Block: 128 pages ,每页Page: (8K + 448) bytes ,数据区为8K ,OOB 为448bytes ,如图1所示:Plane :4096blocks128 pages(8K+448)bytes图1 NAND flash 物理结构3 数据结构struct yaffs_dev 是YAFFS2文件系统最核心的数据结构,表示Y AFFS2文件系统的超级块,它建立了整个文件系统的层次结构,并衔接VFS 层和MTD 层,与struct super_block 、struct mtd_info 的关系如图2所示:图2 yaffs_dev 与super_block 、mtd_info 层次关系下面围绕struct yaffs_dev 这个最核心的数据结构开始,分段介绍它的含义,进而引出其他重要的数据结构:■param :存储文件系统重要的一些参数,以及与MTD 层的接口函数□inband_tags :标志位,默认为0,即采用OOB (out of band )方式存储tags ,可以通过挂载时指定inband-tags选项改变默认值□total_bytes_per_chunk:每个chunk总的字节数□chunks_per_block:每个block总的chunk数□spare_bytes_per_chunk:每个chunk包含OOB块的字节数□start_block:第一个可以使用的block□end_block:最后一个可以使用的block□n_reserved_blocks:为GC保留的block阈值□n_caches:缓冲区的个数,YAFFS2为减少数据的碎片以及提高性能为每个文件的写入提供了cache□no_tags_ecc:标志位,默认为0,即tags中包括ECC纠错信息,可以通过内核配置改变默认值,CONFIG_YAFFS_DISABLE_TAGS_ECC□is_yaffs2:标志位,默认为0,即Y AFFS,在挂载的过程中会根据识别的mtd->writesize自动转换成YAFFS2□refresh_period:刷新周期,刷新目的主要找出最旧的处于YAFFS_BLOCK_STATE_FULL状态的block,供GC作为gc_block使用□skip_checkpt_rd:标志位,默认为0,支持读取checkpoint,提高挂载速度的一个功能可以通过挂载时指定挂载选项no-checkpoint-read、no-checkpoint修改默认值□skip_checkpt_wr:标志位,默认为0,支持写入checkpoint,提高挂载速度的一个功能可以通过挂载时指定挂载选项no-checkpoint-write、no-checkpoint修改默认值□write_chunk_tags_fn:函数指针,在挂载的文件系统的时候会被初始,NANDflash写入接口函数:param->write_chunk_tags_fn = nandmtd2_write_chunk_tags;□read_chunk_tags_fn:函数指针,在挂载的文件系统的时候会被初始,NANDflash读取接口函数:param->write_chunk_tags_fn = nandmtd2_write_chunk_tags;□erase_fn:函数指针,在挂载的文件系统的时候会被初始,NAND flash擦除block接口函数:param->erase_fn = nandmtd_erase_block;□wide_tnodes_disabled:标志位,默认值为0,采用动态位宽,通过内核配置修改可采用静态位宽CONFIG_YAFFS_DISABLE_WIDE_TNODES■os_context:指向yaffs_linux_context结构指针,该结构存储Y AFFS2运行环境,如下:□context_list:通过该字段加入到yaffs_context_list全局链表中□dev:指向Y AFFS2文件系统超级块的指针□super:指向VFS层超级块的指针□bg_thread:Y AFFS2后台垃圾回收线程的指针□bg_running:启动和停止垃圾回收线程的标志位,1:启动,0:停止□gross_lock:互斥锁,保护整个超级块关键字段的互斥访问,粒度比较大□spare_buffer:OOB块的缓冲区□search_contexts:通过该字段把所有Directory Search Context组成链表□yaffs_mtd_put_super:卸载文件系统时被调用来清理super_block□readdir_process:解决使用NFS死锁问题加入的□mount_id:每个NAND flash分区挂载YAFFS2都分配不同的ID号■driver_context:指向mtd_info结构指针,mtd_info是MTD子系统核心的数据结构,主要是对底层硬件驱动进行封装,这里不再介绍■data_bytes_per_chunk:每个chunk总的字节数,和前面提到的total_bytes_per_chunk一样■chunk_grp_bits :采用静态位宽时超过tnode_width宽度之后的位数,采用动态位宽值恒为0■chunk_grp_size:由chunk_grp_bits转化而来的大小■tnode_width:采用静态位宽默认是16,采用动态位宽是由整个NAND flash中chunk数目计算得到■tnode_mask:位宽的mask,主要用于快速获取chunk id号■tnode_size:YAFFS_NTNODES_LEVEL0节点所占用的内存大小,单位:byte■chunk_shift:主要用来计算logical chunk index以及logical chunk offset■chunk_div:作用同chunk_shift,主要用于chunk大小不是2次幂的情况■chunk_mask:作用同chunk_shift,组合起来计算logical chunk offset■is_mounted:标志位,文件系统挂载时被置位Checkpoint是为提高挂载速度而引入的功能,作用同JFFS2的EBS,以空间来换取时间,卸载时通过在NAND flash上保存文件系统超级块快照,挂载时获取快照信息可以快速还原系统的状态。

嵌入式Linux常用文件系统

嵌入式Linux常用文件系统

嵌入式Linux常用文件系统Linux支持很多文件系统,在选择时应根据应用的功能选择文件系统内核只认识VFS(虚拟文件系统),不同的文件系统实现的都是和VFS的相互调用,进而通过VFS访问内核。

MTD(Memeory Technology Device,存储技术设备):针对Flash做的底层驱动程序Rootfs (根文件系统):嵌入式系统中一般从Flash启动,最简单的方法是将rootfsload到RAM 的RAMDisk,稍为复杂的就是直接从Flash读取的Cramfs,更复杂的是在Flash上分区,并构建JFFS2等文件系统。

基于Flash(NOR和NAND)的文件系统:RedHat基于jffs 开发的特点:可读写、支持数据压缩、支持哈希表的日志型文件系统,提供了崩溃/掉电安全保护,提供“写平衡”支持等。

缺点:不适合在体积和容量比较大的NANDFlash中使用,当文件系统已满或者快满时,因为垃圾收集的关系使它的运行速度大大放慢。

yaffs:专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。

特点:1.减少了一些jffs2的功能,但是速度更快,占用内存更少,能够实现错误检测和坏块处理,能够提高文件系统的加载速度。

采用多策略混合的垃圾回收算法。

2.跨平台文件系统,除了Linux还支持WinCE、pSOS、ThreadX。

3.自带NAND芯片驱动,并为嵌入式系统提供直接访问文件系统的API,用户可不使用Linux中的MTD与VFS,直接对文件系统操作。

也可与MTD驱动程序配合使用。

Cramfs:Linux开发的只读的压缩文件系统,基于MTD驱动程序特点:速度快,效率高,保护文件系统免受破坏,提高了可靠性。

缺点:内容无法扩充。

Romfs:简单的、紧凑的、只读的文件系统,不支持动态擦写保存,安顺序存放数据。

ucLinux 通常采用本文件系统。

基于RAM的文件系统Ramdisk:将一部分固定大小的内存当作分区来使用。

JFFS和YAFFS两种文件系统在嵌入式Linux平台上的运行比较

JFFS和YAFFS两种文件系统在嵌入式Linux平台上的运行比较

TECHNOLOGY 技术应用一、嵌入式平台物理存储特性Nand flash内存作为flash内存的一种,因其具有容量较大,改写速度快等优点,适用于大量数据的存储,并且内部采用非线性宏单元模式,所以为固态大容量内存的实现提供了廉价有效的解决方案,在业界得到了越来越广泛的应用。

本文通过比较分析JFFS和YAFFS两种文件系统在Linux平台上的运行情况,来说明面向不同性能的文件系统选择。

二、JFFS文件系统1.稳定性优势。

JFFS文件系统采用日志结构,与Linux的标准文件系统Ext2文件系统相比,JFFS文件系统在执行扇区级别上的擦除、读、写的速度更快,并且在机器崩溃、掉电时能够提供安全保护。

这是因为Ext2文件系统对于一个扇区的更新需要重写整个擦写块,但是在重写过程中,若发生机器崩溃或突然断电,将会造成整个擦写块中的数据全部丢失。

而因嵌入式系统要求高稳定性,因宕机、断电而发生数据丢失的现象是不能接受的,所以JFFS文件系统具有免受宕机和断电危害功能的日志型文件系统,这点相较于Ext2文件系统又有了能够满足嵌入式系统稳定性要求的优势。

2.高效的垃圾回收机制。

JFFS文件系统具有高效的垃圾回收机制,即具有释放过时的日志文件节点的能力。

首先,JFFS文件系统以闪存块为单位进行空间的回收,每次擦除最应该被擦除的块,该块被擦除后成为新的空闲块;其次,JFFS文件系统通过碎片收集进程回收碎片,每次仅回收一个空闲块,只有在空闲块数过多的情况下,处于睡眠状态的进程才会被唤醒。

三、YAFFS文件系统对NAND Flash的支持YAFFS文件系统与JFFS文件系统相比,其优势在于它是首个专门针对NAND型闪存的文件系统。

因为NAND型闪存结构特殊,它是以页为单位进行读写和编程的操作,适合进行文件存储以及纯数据存储,考虑到NAND型闪存的特有结构,YAFFS文件系统将文件组织成固定大小的页。

在擦写策略方面,YAFFS文件系统采取先写入新的数据块,再删除旧的数据块的方式,防止了宕机、断电情况下,数据完整性被破坏。

YAFFS文件系统详细介绍

YAFFS文件系统详细介绍

yaffs_Object 可以是档案(File)、目录
(Directory)、SoftLink 或是 Hardlink 其中一种,而每一个 yaffs_Object 都会对应到一个 yaffs_ObjectHeader,而 yaffs_ObjectHeader 则是用以储存此 yaffs_Object 的一些属性 值,例如该 yaffs_Object 是 File 或是 Directory,此 yaffs_Object 的 parentObjectId 为何…等等。yaffs_Object 亦有如下的目录结构:
YAFFS 文件系统详细介绍
一、 摘要 在现在 Embedded System 的广泛应用下,其硬件及软件的建置及设 计则需要相当大的考虑,亦因为其所需要的效率考虑下,挑选适用的内 部储存装置则相当的重要,一般常见的内部储存装置为硬盘及闪存 (Flash Memory),虽然硬盘的容量相当大,但是其执行速度相当的慢、 体积大且不耐震,较不适用于需要效率、体积及耐震考虑的 Embedded System,因为 Flash Memory 速度快,体积小及耐震的特性,大部份的 Embedded System 皆使用 Flash Memory 做为其内部储存装置。如市面上 最常见到的行动电话、PDA(Personal Digital Assistant)内部储存 装置等或是数字相机所使用的记忆卡,皆使用 Flash Memory。因此该怎 么操作或更有效率的使用 Flash Memory,都是我们所要去关注的。 二、动机 Flash Memory 目前分为两种:NOR Flash Memory 及 NAND Flash Memory, 尤于 NAND Flash Memory 有较快的 Erase Time、Small Size 及成本较 低的特性下,使得 NAND 更适用于 Embedded System。Flash Memory 是 一储存装置, 若要使用此储存装置, 亦须要在 Flash Memory 上使用 File System。在一般的 Block Device(e.g. Disk)上使用的 File System, 如:NTFS、FAT32 和 ext2 等等,都可用于 Flash Memory 上,但是这些 File System 并非专为 Flash 所设计的,所以无针对 Flash 的特性去操

ARM教材-第6章 嵌入式文件系统

ARM教材-第6章 嵌入式文件系统
13
实验一:建立文件系统JFFS2(3)
2)JFFS2映像生成
Jffs2 image通过 mkfs.jffs2 工具创建成 image mkfs.jffs2 用法:-e 选项确定闪存的擦除扇区大小(通
常是64K)。-p 选项用来在映像的剩余空间用零填充。 -o 选项用于输出文件,这里是rootfs.img
统。
16
实验一:建立文件系统RAMFS(3)
修改一些内核配置
XSBase255中 setup_initrd()的 0xA1000000 成为 SDRAM 的 ramdisk 地址 ,ramdisk 要下载到 Bootloader中的这个地址
CONFIG_BLK_DEV_RAM_SIZE是 menuconfig中设 定的 “Default RAM disk size” 大小
YAFFS2是YAFFS的改进版本。
7
2. Linux文件系统框架和特性
现代操作系统都提供多种访问存储设备的 方法
Linux文件系统有两条独立控制设备驱动 的途径 :
通过设备驱动的接口 通过文件管理器接口
8
Linux文件系统框架
设备 API
文件 API
文件管理器
POSIX 文件 API
ARM教材-第6章
嵌入式文件系统

第二版扩展文件系统(Ext2fs)的优点
Ext2fs支持达4 TB的内存(Ext是2G)。 Ext2fs文件名称最长可以到1012个字符。 当创建文件系统时,管理员可以选择逻辑块的大小
(通常大小可选择 1024、2048和4096字节)。 Ext2fs实现快速符号链接:不需要为此目的而分配数
POSIX 文件 API
VFS 磁盘独立
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JFFS文件系统和YAFFS文件系统的比较
NAND flash文件系统JFFS2和YAFFS比较JFFS是由瑞典的Axis Communications Ab公司开发的(1999,以GNU发布),针对flash设备的特性为嵌入式设备开发的.(我边上的兄弟曾想去那里作毕业设计)
JFFS1和JFFS2的设计中都考虑到了FLASH的特性特别是满足了上述3个条件,包括了垃圾回收,坏块管理等功能. 这两种文件系统属于LFS(Log-structured File System).这种文件系统的特点是一旦数据出错,容易恢复,但是系统运行是需要占用一定的内存空间,这些空间就是用来存储”log”的.
JFFS的缺点就是加载时间太长,因为每次加载都需要将FLASH上的所有节点(JFFS的存储单位)到内存,这样也占用了可观的内存空间.除此之外,”circle log”设计使得在对文件数据进行所有的数据都会被重写,这样造成不必要的时间,同时也会减少FLASH的寿命.
JFFS2对JFFS1作了些改进,比如所需的内存变少了,垃圾回收机制也优化了.
针对JFFS1,JFFS2的缺点,JFFS3出现了.
YAFFS1 ">“Yet Another Flash File System”作者是新西兰的Charles Manning为一家名叫Alpha one 的公司(/)设计的,是第一个为NAND Flash设计的文件系统.共两个版本YAFFS1 和YAFFS2.
YAFFS1支持512Bytes/Page的NAND Flash;后者YAFFS2支持2kBytes/Page的NAND Flash. YAFFS文件系统也属于LFS.
跟其他文件系统比较,它具有更好的可移植性,甚至可以使用在没有操作系统的设备上(called “YAFFS/Direct”). YAFFS采用模块化设计,虽然最初是用在linux系统上的,但是也已经移植到其他系统比如wince.
还有个突出的优点是它在mount的时候需要很少的内存.(如果是小页—512byte/page,每1MByte NAND大约需要4KBytes内存;大页需要大概1KBytes RAM/1MByte NAND) JFFS与YAFFS比较,两者各有长处. 一般来说,对于小于64MBytes的NAND Flash,可以选用JFFS;如果超过64MBytes,用YAFFS比较合适.。

相关文档
最新文档