Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2288351
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2009-05-13 19:31:35

1、cramfs的特点

       在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把外存(Flash)上的映像文件解压缩到内存中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在外存中占据了空间(以压缩后的形式存在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。

      使用cramfs就是一种解决这个问题的方式。cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。

cramfs拥有以下一些特性:

采用实时解压缩方式,但解压缩的时侯有延迟。

cramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。

在cramfs中,文件最大不能超过16MB。

支持组标识(gid),但是mkcramfs只将gid的低8位保存下来,因此只有这8位是有效的。

支持硬链接。但是cramfs并没有完全处理好,硬链接的文件属性中,链接数仍然为1.

cramfs的目录中,没有“.”和“..”这两项。因此,cramfs中的目录的链接数通常也仅有一个。

cramfs中,不会保存文件的时间戳(timestamps)信息。当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时地变更为最新时间,但是不会保存到cramfs文件系统中去。

当前版本的cramfs只支持PAGE_CACHE_SIZE为4096的内核。因此,如果发现cramfs不能正常读写的时侯,可以检查一下内核的参数设置。


2、使用cramfs

可以从下载cramfs-1.1.tar.gz。然后执行

tar zxvf cramfs-1.1.tar.gz

进入解包之后生成cramfs-1.1目录,执行编译命令:

make

编译完成之后,会生成mkcramfs和cramfsck两个工具,其中cramfsck工具是用来创建cramfs文件系统的,而mkcramfs工具则用来进行cramfs文件系统的释放以及检查。

下面是mkcramfs的命令格式:

mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile

mkcramfs的各个参数解释如下:

-h:显示帮助信息

-e edition:设置生成的文件系统中的版本号

-i file:将一个文件映像插入这个文件系统之中(只能在Linux2.4.0以后的内核版本中使用)

-n name:设定cramfs文件系统的名字

dirname:指明需要被压缩的整个目录树

outfile:最终输出的文件


cramfsck的命令格式:

cramfsck [-hv] [-x dir] file

cramfsck的各个参数解释如下:

-h:显示帮助信息

-x dir:释放文件到dir所指出的目录中

-v:输出信息更加详细

file:希望测试的目标文件

 四、 Cramfs文件系统的移植过程

       文件系统是紧跟uCLinux内核放置,由内核加载,主要存放用户应用程序和配置信息。CramFS文件系统的基本组成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、链接库、图形界面程序和用户应用程序等。本节将介绍移植CramFS文件系统的具体操作方法。

       4.1、在内核中加入对CramFS文件系统支持

       想要在系统中提供CramFS的能力,我们必须要在编辑uCliunx内核时把支持CramFS的选项加入。尽管uCLinux可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及CramFS文件系统静态地编译进内核中。

       在Memory Technology Devices (MTD)选项中进行配置:

       Memory Technology Device (MTD) support[Y/m/n/?] Y   内存技术设备支持

       MTD partitioning support [Y/m/n/?] Y  支持MTD分区

       Direct char device access to MTD devices[Y/m/n/?] Y  MTD字符设备直接访问

       Caching block device access to MTD devices[Y/m/n/?] Y MTD块设备缓冲访问

       在File Systems选项中进行配置:

       Compressed ROM file system support [Y/m/n/?] Y   ROM文件系统的支持

       完成上述修改并编译后,完成uCliunx内核对CramFS文件系统的支持。

 4.3 、利用mkcramfs工具生成cramfs压缩文件系统

       一般情况下都要把已经规划好的目录结构转换成一个映象文件,创建Cramfs文件系统需要mkcramfs工具,mkcramfs能把相应的Cramfs目录树压缩成为单一的映象文件,这个映象文件就是我们需要移植的文件系统。Mkcramfs的命令格式为:

       Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName   OutFile

       #mkcramfs   root   cramfs.Img

       用以上的命令就可以生成我们需要的cramfs文件系统映象文件,我们可以发现原本为2.36Mbytes大小的目录内容,被压缩成一个1.08Mbytes的CramFS文件系统映象文件, 通过vivi或测试程序将其写入Flash中就可以验证是否移植成功。

       五、小结

     CramFS是一个压缩格式的文件系统,如果系统存储资源比较紧张的话,采用CramFS作为嵌入式Linux系统的根文件系统是一个不错的选择。

阅读(2071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~