分类: LINUX
2010-06-11 11:06:58
在普通的PC上,外部存储介质一般都使用IDE硬盘等传统的外存设备。而在嵌入式系统中,各种特殊的应用目的对存储设备提出了各种各样的要求。现在,Flash存储器由于其安全性高、存储密度大、体积小、价格相对便宜,是嵌入式系统中最受欢迎的一类存储器[54] [55] [56]。
由于Linux中传统的ext2和ext3文件系统,是根据IDE硬盘这样的外部存储设备设计的,就不适合Flash存储器,所以出现了很多了针对Flash存储器的文件系统。
在AT91RM9200嵌入式平台上使用了三种不同的文件系统,分别是CRAMFS文件系统、JFFS2文件系统以及RAMDISK文件系统。其中的RAMDISK文件系统作为根文件系统,供操作系统内核在系统启动时自动加载,其余的两种文件系统各据不同的用途。下面将简单的介绍三种文件系统的构建。
1)CRAMFS文件系统介绍
CRAMFS是在Linux2.4版本以后出现的是一种新的文件系统,其特点是把只读文件系统进行压缩式,从而可以在FLASH上存储更多的应用程序。缺点是,当用户需要使用该文件系统中的数据时,必须先对数据进行解压缩,然后才能使用,这样会从一定程度上影响系统运行的速度。用户可以将常用的大量数据文件、程序和库文件等不需要进行写操作的资源做成一CRAMFS文件系统,写入Dataflash中,在Linux启动过程中进行挂载。CRAMFS中的解压以及解压后的内存中数据存放位置都是由CRAMFS文件系统本身来维护的,用户不需了解具体的实现过程,因此这种方式增强了透明度,既方便了开发人员,又节约了存储空间[59] [60] [62]。
2)CRAMFS文件系统的特性
Ø 采用实时解压方式,但是解压的时候有延迟
Ø CRAMFS中不支持写操作
Ø 文件最大不能超过16MB
Ø 支持硬连接(hard link)
Ø CRAMFS的目录中,没有“.”和“..”这两个子目录
3) 在Linux中CRAMFS文件系统的实现
CRAMFS文件系统的构建非常简单。首先在宿主机的Linux开发环境中建立一个目录CRAMFS/,然后将希望存储的数据文件按照相应的目录拷贝到该目录下,最后执行命令:
mkcramfs cramfs cramfs.img
生成的cramfs.img文件就是CRAMFS文件系统的映象,可以直接将其烧写如Dataflash中。需要注意的是,若使用该文件系统需要在编译内核时,把对CRAMFS的支持编译进内核即可。
1) JFFS2文件系统介绍
JFFS2是Redhat公司基于JFFS文件系统,为嵌入式系统开发的日志文件系统。JFFS2应用在Linux2.4内核以上版本。日志文件系统的主要设计思想是跟踪文件系统的变化,而不是文件系统的内容。在日志文件系统中,存储系统上面有一系列节点,记录了对文件的操作。JFFS2文件系统使用了基于哈希表的日志节点结构,大大加快了节点的操作速度。支持数据压缩,并提供了“写平衡”支持,提高了对闪存的利用率,降低了内存的消耗。JFFS2文件系统最主要的一个特点是支持Dataflash的写操作,这意味着用户可以动态的在Dataflash上保存自己的数据,提供以后使用。
2) JFF2文件系统特点
Ø 支持Flash的擦除和分块
Ø 支持硬连接
Ø 弥补了JFFS的垃圾回收的缺陷
Ø 支持三种节点,擦除块标记、普通文件和目录
Ø 支持数据的压缩
3) 在Linux中JFFS2文件系统实现
用户可以根据自己的需要,在宿主机的开发平台上自己建立一个目录,然后添加自己的数据和文件,过程与上面所提到的建立CRAMFS文件系统目录一样。所不同的是,建立好自己的目录后,执行如下命令:
mkfs.jffs2 -e erasesize -p -r jffs2 -o jffs2.img
在本设计中并没有特意的建立一个JFFS2文件系统映象文件,而是在操作系统当中动态的初始化了一个MTD分区,作为JFFS2文件系统来供用户使用,初始化命令为:
eraseall -j /dev/mtd3
若要使用JFFS2文件系统,需要在编译内核的时候选择File System菜单中的Jouranlling Flash Flie System(JFFS)support选项。
RAMDISK是另外一种常用的,基于内存的文件系统。这种文件系统比较简单,经常用来存放启动操作系统所需的镜像文件。虽然RAMDISK也是可以把数据进行压缩存储的文件系统,但是和前面提到的CRAMFS、JFFS2文件系统相比,RAMDISK压缩效率不高,而且占用内存资源比较多。但是它有一个突出的优点,就是执行速度快。因为RAMDISK文件系统是基于内存方式的,它把内存中的一部分区域划分出来模拟成一个存储设备的空间,所以,所有系统对RAMDISK文件系统进行的数据操作,实际上是对内存中的数据进行直接的操作,因此存取速度快。这也是本设计中把RAMDISK文件系统作为根文件系统使用的主要原因之一。RAMDISK文件系统也是只读的,对其进行的数据操作在断电之后就会消失。
RAMDISK构建方式是在现有的RAMDISK文件系统映象的基础上,根据用户自己的需要进行修改,得到一个新的RAMDISK文件系统映象。具体过程如下:
Ø 将现有的ramdisk文件系统拷贝到相应的目录,执行:
gunzip ramdisk-rmk7.gz
Ø 解压缩现有的ramdisk文件系统:
mount -o loop ramdisk-rmk7 /mnt/ramdisk/
Ø 将现有的ramdisk文件系统悬挂在系统上:
cd /mnt/ramdisk
Ø 进入悬挂的目录,按照用户的要求添加、删除、修改文件系统,然后执行:
Umount /mnt/ramdisk
gzip -c -v9 ramdisk-rmk7 > newramdisk