由于cramfs是只读文件系统,个人感觉现在用的并不广泛,所以直到现在也没用过cramfs。最近有个项目要求必须用它,顺着就写了下面的东西。
1、首先配置内核,打开对cramfs的支持:
File systems --->[*] Miscellaneous filesystems --->
<*> Compressed ROM file system support (cramfs)
2.编译cramfs制作工具
从http://sourceforge.net/projects/cramfs/下载cramfs-1.1.tar.gz。然后执行
#tar zxvf cramfs-1.1.tar.gz
#make
编译完成之后,会生成mkcramfs和cramfsck两个可执行文件,其中mkcramfs工具是用来创建cramfs文件系统的,而cramfsck工具则用来进行cramfs文件系统的释放以及检查。可以将这两个文件拷贝到/usr/local/bin目录下,方便使用.
PS:
===============================================================
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: 希望测试的目标文件
================================================================
3.压缩rootfs根文件系统生成 cramfs
#mkcramfs ./rootfs ./cramfs
4.在uboot下如下操作,将镜像写入nandflash
[Liuk@Micro2440] # tftp 30000000 cramfs
[Liuk@Micro2440] # nand erase 560000 4000000
[Liuk@Micro2440] # nand write.jffs2 30000000 560000 3000000
PS:
如果你使用了qtopia:
由于cramfs是只读文件系统,在运行QT时会出现如下错误:
[root@FriendlyLEG /]# ./opt/Qtopia/bin/qpe
could not open for writing `/Settings/qpe_new.conf'
QCopChannel::send: Must construct a QApplication before using QCopChannel
这个/Settings/ 所在的目录为/root/Settings/
所以在启动时应将/root 目录挂载为 ramfs,这样我们就可以进行读写了,在挂载之前我将cp /root/Settings/ /tmp
,其中/tmp 也被挂载为 ramfs。然后再执行cp /tmp/Setting /root 这个操作。整个过程被添加在/etc/init.d/rcS 脚本文件中。
/bin/mount -n -t ramfs none /tmp
/bin/cp -rf /root/Settings /tmp
/bin/mount -n -t ramfs none /root
/bin/cp -rf /tmp/Settings /root
修改后QT就可以正常启动了,但是新的配置不会被保存,QT只能加载存于nandflash中的配置。