标签:
JFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,JFFS2是它的第2版,由Redhat公司开发。JFFS2以其优异的性能在嵌入式系统中被越来越广泛地使用.
在嵌入式系统中,文件系统的类型和文件的存储介质密切相关。通常,嵌入式系统外围存储器使用FLASH存储器,针对FLASH存储器的文件系统类型有 CRAMFS、 ROMFS、 JFFS/ JFFS2和 YAFFS/YAFFS2等。本文介绍在ARM-linux 系统中,CRAMFS和YAFFS2两种文件系统并存的实现过程。
Nor Flash执行效率较高,NOR的特点是芯片内执行,但是写入速度和擦除速度比较慢,容量也比较小,成本高。NandFlash强调降低每比特的的成本和更高的性能,而且可以通过接口来轻松升级。NandFlash结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度很快,容量也比较大。NandFlash芯片在写入和擦除时需要存储技术设备( Memory Technology Device,简称MTD)驱动支持。
CRAMFS是一个只读压缩文件系统,它采用zlib压缩,压缩比可以达到1: 2。CRAMFS不需要一次性地把文件系统中所有的内容都解压到内存中,而是在系统需要访问某个位置的数据时,马上计算出该数据在CRAMFS中的位置,将其解压到内存中,然后通过对内存的访问来获取需要的数据。CRAMFS中解压缩和解压缩之后的的内存中的数据位置都由CRAMFS文件系统本身进行维护,用户不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。使用CRAMFS作为文件系统的优点是: 高效的压缩比率,文件只读,这保证了嵌入式系统的文件不受改写和破坏,满足系统安全性要求。
YAFFS( Yet Another Flash File System) ,是目前唯一个专门针对NandFlash设计的文件系统,它不支持压缩,适用于大容量的存储器设备。YAFFS采用了类日志结构,结合Nand Flash的特点,提供了损耗平衡和掉电保护机制,可以有效地避免意外掉电对文件系统的一致性和完整性的影响。YAFFS文件系统按层次结构设计,分为文件系统管理层、YAFFS内部实现层和NAND接口层,简化了系统的接口设计。YAFFS文件系统充分利用了NandFlash提供的每个页面16字节的备用空间,备用来存ECC和文件系统的组织信息。这样不仅能实现错误检测和坏块处理,同时也提高了文件系统的加载速度。使用YAFFS文件系统的优点是: 文件可读写,速度快,提供数据的断电可靠性。
结合以上两种文件系统的特点,采用方案是根文件系统使用CRAMFS,然后YAFFS2文件系统作为一个分区挂载。
为了规范Linux 的文件系统, 促进Linux 快速发展, Linux的开发者出台了所谓的文件系统层次标准(Filesystem Hierarchy Standard, FHS), 它规范了在根目录“/”下面各个主要的目录应该放置什么样的文件。
嵌入式Linux是标准Linux的裁剪, 可以根据不同的用途对FHS进行必要的裁剪。例如/home,/root 是在多用户时才有作用, 在嵌入式系统中, 如手持式智能终端等单用户设备是不需要这些目录的。
FLASH存储器可以分为若干块, 每块又由若干页组成, 对FLASH的擦除操作以块为单位进行, 而读和写操作以页为单位进行。FLASH存储器在进行写入操作之前必须先擦除目标块。
Cramfs被设计为简单并且非常小的可压缩的文件系统, 它主要用于ROM较小的嵌入式系统。
Jffs2是FLASH嵌入式系统上应用最广的一个日志结构的文件系统。它提供的垃圾回收机制, 使得不需要马上对擦写越界的块进行擦写, 而只需要为其设置一个标志, 标明为块。当可用的块数不足时, 垃圾回收机制才开始回收这些节点。同时, 由于Jffs2基于日志型结构, 在意外掉电后仍然可以保持数据的完整性, 而不会丢失数据。当文件系统已满或接近满时, 因为垃圾收集的关系而使Jffs2的运行速度大大放慢。
Busybox是一个集成了一百多个最常用Linux 命令和工具的软件, 具有实用、短小、稳定等特点。Busybox利用Linux实用工具中代码大量重复的事实,将重复的代码重新整理, 放到一个文件中, 减少了多次包含, 这样就可以节省系统的空间和提高程序的执行速度, 很适合对于资源比较紧张的嵌入式系统使用。
Busybox已经生成了根文件系统的三个重要的文件, 其他的根目录文件要根据嵌入式设备的具体功能来对FHS进行裁剪, 具体步骤如下:
(1)创建根目录myrootfs, 把Busybox生成的三个文件复制到myrootfs目录下, 并在此目录下分别建立dev, lib, mnt , etc, sys, proc, usr, home, tmp, var 等目录(只有dev, lib, sys, usr, etc是不可或缺的, 其他的目录可根据需要选择)。在etc目录下建立init .d目录。
(2)建立系统配置文件inittab, fstab, rcS, 其中inittab, fstab放在etc目录下, rcS放在/etc/init .d目录中。inittab文件(init 进程根据它来创建其他子进程)。fstab文件(定义了文件系统的各个“挂载点”, 需要与实际的系统相符合)。rcS文件。
(3)创建必须的设备节点, 该文件必须在/etc目录下创建。
(4)如果Busybox 采用动态链接的方式编译, 还需要把busybox 所需要的动态库:libcrypt .so.1, libc.so.6,ldlinux.so.2放到lib目录中。为了节约嵌入式设备的FLASH空间, 通常会采用动态链接方式, 而不采用静态链接方式。
(5)改变rcS的属性
所谓创建某种格式的根文件系统, 就是将根文件系统内容转换成选用的这种文件系统格式, 或将根文件系统内容安装在具有这种文件系统格式的设备上。
根文件系统为Linux 的运行提供最基本的工具、库、脚本和一些特殊文件的支持。根文件系统一般包括如下内容:
1)基本的文件系统结构, 包含一些必须的目录, 比如:/dev, /proc, /bin, /etc, /lib, /usr, /tmp。
2) 基本程序运行所需的库函数, 如:Glibc /uC- libc 。
3) 基本的系统配置文件, 如:rc , initta b 等脚本文件。
4) 必要的设备支持文件, 如:/dev/hd* , /dev/tty, /dev/fd0 。
5) 基本的应用程序, 如:sh , ls , cp , mv 等。
Busybox 的特色是所有命令都编译成一个文件—— —Busybox, 其他命令工具( 如sh 、c p 、ls 等) 都是指向Busybox 文件的连接。在使用Busybox 生成的工具时, 会根据工具的文件名散转到特定的处理程序。这样, 所有这些程序只需被加载一次, 而所有的Busybox 工具组件都可以共享相同的代码段, 这在很大程度上节省了系统的内存资源和提高了应用程序的执行速度。Busybox 仅需用几百kB 的空间就可以运行, 这使得Busybox 很适合嵌入式系统使用。
Linux 成功的关键就是支持多文件系统,嵌入式Linux 系统可以支持多种文件系统,常见的文件系统类型包括:
(1)Linux自身提供的缺省文件系统:ext2fs(一般根文件系统 / 使用此文件系统);新增的自身提供的文件系统:ext3fs ReiserFS IBM JFS 等
(2)其他 UNIX 使用的文件系统:minix、ext、xiafs 等
(3)DOS/Windows 使 用 的 文 件 系 统 :FAT-12 FAT-16 FAT-32 VFAT NTFS
(4)CD-ROM:ISO 9660
(5)NFS(网络文件系统);SMBFS(Windows 共享文件系统)
(6)嵌入式常用的文件系统:cramfsJFFS2
略
常用的嵌入式文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ranfs/tempfs等。
SquashFS是一套供Linux核心使用的GPL开源压缩只读文件系统。SquashFS能够为档案系统内的档案、inode及目录结构进行压缩。并支持最大1024KB的区段,以提供更大的压缩比,主要应用于数据备份。SquashFS项目最初主要作为微型和嵌入式设备上的只读文件系统,对小容量存储设备上的数据进行归档压缩,具有很理想的性能和压缩率,与tarball归档格式相比具有更好的灵活性和性能。由于具有以下特点,这种文件系统可当作计算机文件系统使用,通常作为Linux发行版的LiveCD中的只读文件系统:
1. 对数据区、inode及目录结构进行完整归档;
2. 可以作为回环设备loopback device在Linux系统中直接挂载;
3. SquashFS档案系统可完整的存储uid/gids 32bits和文件建立的时间;
4. 支持64位寻址的文件系统空间;
5. 支持64Kb到1Mb大小的块,并支持把多个小文件归档到一个块,大大提高压缩率;
6. 文件副本不会被归档;
7. 支持不同寻址位的体系结构,并可以在不同字节序的机器上挂载;
8. 在SquashFS文件系统中添加新文件。
9. SquashFS通常采用zlib和lzma数据压缩算法。
系统数据可经SquashFS归档压缩为文件,作为回环设备直接挂载;也可在SquashFS归档压缩后直接写入存储设备,如硬盘,在存储设备上作为的只读文件系统使用。
Aufs文件系统是一个类似于Unionfs的可堆叠联合文件系统,它可以把多个文件夹(也叫分支)内容合并成一个单一的根文件夹,形成一个虚拟的文件系统。Aufs文件系统允许只读和可读写目录并存,可以把只读和可读写文件系统合并在一起,对只读文件系统的修改可以保存到可写文件系统当中。Aufs文件系统的分支可以在系统运行中动态地添加或删除。
Aufs解决分支冲突机制:当多个目录树依次堆叠到一起时,上层的分支具有更高的优先级;如果出现重复分支,aufs自动建立遮挡项,将下层分支隐藏。可写分支在目录的顶层,具有最高优先级。
Unionfs是第一代可堆叠联合文件系统。但是不稳定,aufs是第二代可堆叠联合文件系统。
Cramfs是Linux的创始人Linux Torvalds参与开发的一种只读的压缩文件系统,它基于MTD驱动程序。由于Cramfs是只读型文件系统而大多嵌入式应用程序需要在临时目录/tmp进行创建临时文件等写操作如不对Cramfs进行配置则应用程序将不能正常运行导致系统崩溃 。目前解决些问题的方法是复合文件系统法,即使用YAFFS/YAFFS2等可写型文件系统与Cramfs复合而成的文件系统作为嵌入式系统的根文件系统,使Cramfs根文件系统启动时挂载YAFFS/YAFFS2文件系统,同时将应用程序存放在YAFFS/YAFFS2文件系统中。这种方法解决了应用程序对根文件系统的写操作问题,但由于在通常的根文件系统之外还增加了一个额外的可写型文件系统,必然会增大整个根文件系统所占的存储空间,造成嵌入式系统存储资源紧张。
Cramfs根文件系统配置文件的分析,Cramfs根文件系统中的配置文件存放在/etc目录下,有22个文件及文件夹,可分为以下几类:
(1)引导和登录/注销类,包括etc/issue、/etc/issue.net、/etc/rc.d/rc、/etc/rc.d/rc.local、/etc/rc.d/rc.sysinit、/etc/rc.d/rc/rcX.d等文件,它们主要记录系统的启动信息及运行级别等。
(2)系统管理类,包括/etc/group、/etc/nologin、/etc/passwd、/etc/rpmrc、/etc/security、/etc/usertty、/etc/shadow、/etc/shells、/etc/motd等文件,它们记录着系统用户和用户组的登录信息、加密后的用户账号密码信息、用户组的权限信息等。
(3)网络类,包括/etc/gated.conf、/etc/networks、/etc/protocols、/etc/gateway、/etc/services、/etc/inetd.conf、/etc/sysconfig/network、/etc/recolv.conf、/etc/rpc、/etc/exports等文件,它们记录着系统对网络接口的配置信息、网络服务程序、网络协议、网络文件系统配置等信息。
(4)系统命令类,包括/etc/lilo.conf,/etc/logrotate.conf, /etc/identd.conf, /etc/ld.so.conf, /etc/inittab, /etc/termcp等文件,这些文件记录着要独占地控制系统的系统命令及动态链接程序配置等信息等。
(5)系统初始化脚本类,包括/etc/init.d和/etc/rc/init.d等文件,包含一些系统服务类程序及系统启动脚本。
根文件系统对挂载文件系统的配置主要由两个文件决定,即fstab、init.d/rcS,fstab描述了当前系统中已被定义好的可以被系统挂载的文件系统,init.d/rcS文件描述了系统启动时将启动的命令、服务程序及将要挂载的文件系统。
由此可见要使Cramfs根文件系统能满足应用程序的读写要求,必须在系统启动时为应用程序挂载一个可写型的文件系统,即配置/etc/fstab及/etc/init.d/rcS文件来挂载可写型的文件系统。
所谓制作文件系统镜像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。当系统启动后挂载这个设备,就可以看到与原来目录一样的内容。
Tmp和var中的内容需要经常写入, 其中要保存的数据又是临时的, 因此, 一般将这些目录做成ramfs等可写的文件系统。ramfs是一个存在于内存中的文件系统, 当重启系统后内存上保留的信息就会被擦除。在 linuxrc脚本文件中加入如下命令行:
/bin /mount-t ramfs ramfs/var
/bin /mkdir-p /var /tmp
这样/var就被挂载为ramfs文件系统, 同时在/var下创建tmp目录并创建其链接符号于根目录下,这样根目录下的/var和/tmp均可以保存临时数据。整个文件系统中除了/tmp和/var 目录放在SDRAM内以外, 其他所有目录都放在Flash中。
init进程:
(1)为init设置信号处理进程。
(2)初始化控制台。
(3)解析inittab文件。
(4)执行系统初始化命令,缺省情况下云溪初始化脚本/etc/init.d/rcS
(5)执行所有阻塞的(会导致init暂停的)inittab命令(动作类型:wait)
(6)执行所有仅执行一次的inittab命令(动作类型:once)
(7)一旦完成以上工作,init进程循环执行以下工作:
i. 执行所有终止时必须重新启动的inittab命令(动作类型:respawn)
ii. 执行所有终止时必须重新启动但启动前必须先询问用户的inittab命令。
略
文件系统层次结构标准filesystem hierarchy standard,FHS定义了Linux文件系统的目录结构和目录所包含的基本内容是由Linux基金会维护、由主要软件和硬件供应商组成的非 盈利组织。FHS标准促使不同厂家的Linux发布包具有可以遵循的标准,并提高了软件的可移植性。
略
略
在软件层面上,构建Linux嵌入式操作系统要涉及到引导加载程序U-boot、Linux内核、文件系统FS、用户应用程序几部分的设计。
正因为在Linux下有不同的文件系统,所以Linux需要一种方法进行文件系统管理,使其能够有统一的编程接口及系统界面,为此Linux采用了VFS对这些文件系统进行管理。
略
Linux系统各个分区存储文件时,需要遵循一定的格式,这种文件格式称为文件系统类型。
YAFFS速度比JFFS更快,占用内存更少,且自带NAND芯片驱动,为嵌入式系统提供直接访问文件系统的API,用户可以不适用Linux中的MTD和VFS,直接对文件进行操作。
嵌入式系统设计中,NAND Flash大多使用YAFFS文件系统,而NOR Flash多使用JFFS2文件系统。
通常文件系统具有以下五大功能:(1)文件系统管理存储空间;(2)实现文件名到物理地址的映射;(3)文件和目录的操作管理;(4)提供文件共享能力和安全措施;(5)提供用户接口。
EXT2 是Linux 的一个可扩展的、功能强大的文件系统。EXT2 文件系统中文件的数据存放在数据块中,这些数据块的长度都相同,减少 CPU 的使用。Ext3 很大程度上继承Ext2 。
略
当前,Linux桌面用户遇到的最常用的文件管理系统格式是ext2、ext3和reiserFS。
Ext2是GNU/Linux系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关。
Ext3 文件系统是直接从 Ext2 文件系统发展而来,目前 Ext3 文件系统已经非常稳定可靠。它完全兼容 Ext2 文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。
Ext3日志文件系统的特点:
(1)高可用性。即使在非正常关机后,系统也不需要检查文件系统。
(2)数据的完整性。能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。
(3)文件系统的速度。有时在存储数据时可能要多次写数据,但是,Ext3 的日志功能对磁盘的驱动器读写头进行了优化。从总体上看来,Ext3 比 Ext2 的性能还要好一些。
(4)数据转换。由Ext2文件系统转换成Ext3文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。
(5)多种日志模式。Ext3 有多种日志模式,
Reiser FS是 Su SE Linux 默认文件系统,Reiser FS 的优势在于,它是基于 B*Tree 快速平衡树这种高效算法的文件系统,例如在处理小于 1k 的文件比 Ext3 快 10 倍。再一个就是 Reiser FS 空间浪费较少,它不会对一些小文件分配 inode,而是打包存放在同一个磁盘块 (簇) 中,Ext2/Ext3 是把它们单独存放在不同的簇上,如簇大小为 4k,那么 2 个 100 字节的文件会占用 2 个簇,Reiser FS 则只占用一个。当然 Reiser FS 也有缺点,就是每升级一个版本,都要将磁盘重新格式化一次。
构建适用于嵌入式系统的Linux文件系统,必然会涉及到两个关键点,一是文件系统类型的选择,它关系到文件系统的读写性能,尺寸大小;另一个就是根文件系统内容的选择,它关系到根文件系统所能提供的功能及尺寸大小。
NOR Flash主要应用在代码存储介质中,而NAND flash则更佳适合于大容量的数据存储。基于Flash的文件系统。
(1) JFFSx
JFFS2:日志闪存文件系统版 2 (Journaling Flash File System v2) 主要用于NOR 型闪存,基于 MTD 驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使 JFFS2 的运行速度大大放慢。
JFFSx 不适合用于 NAND 闪存主要是因为 NAND 闪存的容量一般较大,这样导致 JFFS 为维护日志节点所占用的内存空间迅速增大,另外,JFFSx 文件系统在挂载时需要扫描整个 FLASH 的内容,以找出所有的日志节点,建立文件结构,对于大容量的 NAND 闪存会耗费大量时间。
(2) YAFFSx:Yet Another Flash File System,YAFFS/YAFFS2 是专为嵌入式系统使用 NAND 型闪存而设计的一种日志型文件系统。与 JFFS2 相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了 Linux 和 e Cos,还支持 Win CE, p SOS 和 Thread X 等。
(3) Cramfs:Compressed ROM File System。CRAMFS 是 Linux 的创始人 Linus Torvalds 参与开发的一种只读的压缩文件系统。它也基于 MTD 驱动程序。
CRAMFS 文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以 XIP 方式运行,所有的应用程序要求被拷到 RAM 里去运行,但这并不代表比 RAMFS 需求的 RAM 空间要大一点,因为 CRAMFS 是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,CRAMFS 文件系统自动计算压缩后的资料所存的位置,再即时解压缩到 RAM 中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
(4)ROMFS。传统型的 ROMFS 文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(e Xecute In Place,片内运行)方式运行,在系统运行时,节省 RAM 空间。uClinux系统通常采用ROMFS 文件系统。
FAT/FAT32也可用于实际嵌入式系统的扩展存储器,主要是为了更好的与最流行的Windows桌面操作系统相兼容。Ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。
基于RAM的文件系统:
(1)RAM disk。是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件 (如只读的根文件系统)通过RAM disk 放在内存中,可以明显地提高系统的性能。在Linux启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)RAMFS/TMPFS。RAMFS 是 Linus Torvalds 开发的一种基于内存的文件系统工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS 本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
RAMFS/TMPFS 文件系统把所有的文件都放在 RAM 中,所以读/写操作发生在 RAM 中,可以用 RAMFS/TMPFS 来存储一些临时性或经常要修改的数据,例如/tmp 和/var 目录,这样既避免了对 Flash 存储器的读写损耗,也提高了数据读写速度。
RAMFS/TMPFS 相对于传统的 RAM disk 的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。TMPFS 的一个缺点是当系统重新引导时会丢失所有数据。
网络文件系统NFS:NFS(Network File System)是由 Sun 开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。我们可以将远端所分享出来的目录,挂载 (mount) 在本地端的系统上,然后就可以很方便的使用远端目录上的文件,而操作起来就像在本地操作一样,不会感到有什么不同。而使用 NFS 也有相当多的好处,例如档案可以集中管理,节省磁碟空间......等等。
在嵌入式 Linux 系统的开发调试阶段,可以利用该技术在主机上建立基于NFS 的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
如果系统只配备极少量的 flash,但相对而言具有大量的 RAM,那么 RAM disk或许是最佳选择,因为 RAM disk 的文件系统在存储设备上原本通常是经过压缩的。存储设备上提供 RAM disk 使用的文件系统映像的压缩比通常比原生的压缩文件系统(如 CRAMFS 或 JFFS2)高很多,因为这类文件系统不会压缩它们的元数据。然而 RAM disk 的优势(存储设备上的文件系统经过压缩)却被较高的RAM 使用量抵销,因为 RAM 中的文件系统未被压缩。此外,如果需要永久性存储,便不适合使用 RAM disk。
尽管如此,如果永久性存储需求有限,正如前面的提示,可以使用 RAM disk来安装根文件系统的人部分内客,只有数据目录才从支特永久性存储的文件系统安装,例如 JFFS2。
如果系统拥有稍微多一点的 flash,或者如果会尽可能给实际在目标板上执行的应用程序保留 RAM 空间,而且可以为运行时解压缩挪出若干额外的 CPU 周期,那么 CRAMFS 是个作常好的选项,只要系统符合之前提到的 CRAMFS 限制即可。尽管 CRAMFS 的压缩比低于 RAM disk,不过它的能力对大多数不需要永久存储特性的嵌人式应用来说通常已经相当够用了。同样,如同 RAM disk,可以在 CRAMFS 安装根文件系统中不需于运行时变更的部分,而在具有永久性的文件系统(例如 JFFS2)上安装其余的部分。
然而,如果目标板必须进行实时升级,或者需要在任何时刻变更文件系统的任何部分,JFFS2 将会是最好的选择。尽管 JFFS2 的压缩比不如 CRAMFS,但因为 JFFS2 会为垃圾回收功能维护空间,并且它的元数据的结构允许文件系统的写入操作,所以 JFFS2 可以提供断电可靠性和损耗平衡这两个对使用 flash 系统而言非常重要的特性。
以上所探讨的只是选用原则,而且你必须考虑每个系统的额外限制。尽管如此,这些指导原则代表建立嵌入式 Linux 系统时设计上所做的权衡。而且它们应该可以提供你如何做出最后设置的基本概念。
嵌入式Linux的根文件系统一般固化在Flash上。嵌入式设备具有体积小、功耗低、使用环境不确定等特点,决定了其存储设备的特殊性:容量适中、体积小、易拆卸、抗机械震动等。传统的磁盘设备显然是不适用的,闪速存储器Flash以其诸多优良特性逐渐成为嵌入式存储设备的首选。
与EPROM相比较,闪速存储器具有明显的优势—系统电可擦除和可重复编程而不需要特殊的高电压;与EEPROM相比,闪速存储器具有成本低、密度大的特点。
然而Flash存储器却是一种数据正确性非理想的存储器件,应用中可能会出现坏损数据单元。目前台式机和服务器上己经有很多成熟的Linux文件系统,但这些基于块设备的文件系统并不适用于嵌入式系统中的数据存储:第一,嵌入式系统电源供给不稳定和突发性断电都可能造成灾难性的影响;第二,通用文件系统大量使用缓存技术来提高文件系统的速度特性,通常要耗费比较多的系统资源,这与嵌入式系统有限的资源环境相违背;第三,Flash存储器可以与SRAM一样实现完全随机的字节读取,但写入操作却要经过“擦除—写入”两个操作过程;第四,通常Flash具有块擦除次数限制,再加上它三倍于SRAM的价格,这就需要一种支持耗损平衡的文件系统。
略
略
标签:
原文地址:http://blog.csdn.net/fickyou/article/details/51261281