Chinaunix首页 | 论坛 | 博客
  • 博客访问: 382552
  • 博文数量: 63
  • 博客积分: 3142
  • 博客等级: 中校
  • 技术积分: 838
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-06 13:35
文章分类

全部博文(63)

文章存档

2011年(2)

2010年(114)

2009年(3)

我的朋友

分类: LINUX

2010-06-11 11:06:58

各种文件系统的简介

在普通的PC上,外部存储介质一般都使用IDE硬盘等传统的外存设备。而在嵌入式系统中,各种特殊的应用目的对存储设备提出了各种各样的要求。现在,Flash存储器由于其安全性高、存储密度大、体积小、价格相对便宜,是嵌入式系统中最受欢迎的一类存储器[54] [55] [56]

由于Linux中传统的ext2ext3文件系统,是根据IDE硬盘这样的外部存储设备设计的,就不适合Flash存储器,所以出现了很多了针对Flash存储器的文件系统。

AT91RM9200嵌入式平台上使用了三种不同的文件系统,分别是CRAMFS文件系统、JFFS2文件系统以及RAMDISK文件系统。其中的RAMDISK文件系统作为根文件系统,供操作系统内核在系统启动时自动加载,其余的两种文件系统各据不同的用途。下面将简单的介绍三种文件系统的构建。

文件系统

1CRAMFS文件系统介绍

CRAMFS是在Linux2.4版本以后出现的是一种新的文件系统,其特点是把只读文件系统进行压缩式,从而可以在FLASH上存储更多的应用程序。缺点是,当用户需要使用该文件系统中的数据时,必须先对数据进行解压缩,然后才能使用,这样会从一定程度上影响系统运行的速度。用户可以将常用的大量数据文件、程序和库文件等不需要进行写操作的资源做成一CRAMFS文件系统,写入Dataflash中,在Linux启动过程中进行挂载。CRAMFS中的解压以及解压后的内存中数据存放位置都是由CRAMFS文件系统本身来维护的,用户不需了解具体的实现过程,因此这种方式增强了透明度,既方便了开发人员,又节约了存储空间[59] [60] [62]

2CRAMFS文件系统的特性

Ø         采用实时解压方式,但是解压的时候有延迟

Ø         CRAMFS中不支持写操作

Ø         文件最大不能超过16MB

Ø         支持硬连接(hard link)

Ø         CRAMFS的目录中,没有“.”和“..”这两个子目录

3) 在LinuxCRAMFS文件系统的实现

CRAMFS文件系统的构建非常简单。首先在宿主机的Linux开发环境中建立一个目录CRAMFS/,然后将希望存储的数据文件按照相应的目录拷贝到该目录下,最后执行命令:

mkcramfs cramfs cramfs.img

生成的cramfs.img文件就是CRAMFS文件系统的映象,可以直接将其烧写如Dataflash中。需要注意的是,若使用该文件系统需要在编译内核时,把对CRAMFS的支持编译进内核即可。

文件系统

1 JFFS2文件系统介绍

JFFS2Redhat公司基于JFFS文件系统,为嵌入式系统开发的日志文件系统。JFFS2应用在Linux2.4内核以上版本。日志文件系统的主要设计思想是跟踪文件系统的变化,而不是文件系统的内容。在日志文件系统中,存储系统上面有一系列节点,记录了对文件的操作。JFFS2文件系统使用了基于哈希表的日志节点结构,大大加快了节点的操作速度。支持数据压缩,并提供了“写平衡”支持,提高了对闪存的利用率,降低了内存的消耗。JFFS2文件系统最主要的一个特点是支持Dataflash的写操作,这意味着用户可以动态的在Dataflash上保存自己的数据,提供以后使用。

2 JFF2文件系统特点

Ø         支持Flash的擦除和分块

Ø         支持硬连接

Ø         弥补了JFFS的垃圾回收的缺陷

Ø         支持三种节点,擦除块标记、普通文件和目录

Ø         支持数据的压缩

3) 在LinuxJFFS2文件系统实现

     用户可以根据自己的需要,在宿主机的开发平台上自己建立一个目录,然后添加自己的数据和文件,过程与上面所提到的建立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也是可以把数据进行压缩存储的文件系统,但是和前面提到的CRAMFSJFFS2文件系统相比,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

通过上述方法生成的文件系统newramdisk,可以直接下载到SDRAM中,与操作系统内核配合使用。
阅读(2350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~