如何制作cramfs文件系统

 我来答
huanglenzhi
推荐于2016-09-11 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517201
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用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不能正常读写的时侯,可以

检查一下内核的参数设置。

Linux "make menuconfig"选择
File systems --->
Miscellaneous filesystems --->
<*> Compressed ROM file system support (cramfs)

下载cramfs-1.1.tar.gz(网上能找到的版本)
http://download.chinaunix.net/download/0002000/1832.shtml
http://sourceforge.net/projects/cramfs/files/cramfs/

[root:/usr/local/apps_src]#tar -xzf ~/winxp/apps_packet/cramfs-1.1.tar.gz
[root:/usr/local/apps_src]#cd cramfs-1.1/
[root:/usr/local/apps_src/cramfs-1.1]#ls
COPYING cramfsck.c GNUmakefile linux mkcramfs.c NOTES README
[root:/usr/local/apps_src/cramfs-1.1]#make
gcc -W -Wall -O2 -g -I. mkcramfs.c -lz -o mkcramfs
mkcramfs.c: In function 'parse_directory':
mkcramfs.c:287: warning: pointer targets in assignment differ in signedness
mkcramfs.c: In function 'write_superblock':
mkcramfs.c:399: warning: pointer targets in passing argument 1 of '__builtin_strncpy' differ in

signedness
mkcramfs.c:401: warning: pointer targets in passing argument 1 of '__builtin_strncpy' differ in

signedness
mkcramfs.c: In function 'write_directory_structure':
mkcramfs.c:480: warning: pointer targets in passing argument 1 of 'strlen' differ in signedness
mkcramfs.c: In function 'do_compress':
mkcramfs.c:598: warning: pointer targets in passing argument 1 of 'compress2' differ in

signedness
mkcramfs.c:598: warning: pointer targets in passing argument 3 of 'compress2' differ in

signedness
mkcramfs.c: In function 'write_data':
mkcramfs.c:647: warning: pointer targets in passing argument 3 of 'do_compress' differ in

signedness
mkcramfs.c: In function 'main':
mkcramfs.c:825: warning: pointer targets in passing argument 2 of 'crc32' differ in signedness
gcc -W -Wall -O2 -g -I. cramfsck.c -lz -o cramfsck
[root:/usr/local/apps_src/cramfs-1.1]#ls
COPYING cramfsck cramfsck.c GNUmakefile linux mkcramfs mkcramfs.c NOTES README
[root:/usr/local/apps_src/cramfs-1.1]#file mkcramfs
mkcramfs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9,

dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
[root:/usr/local/apps_src/cramfs-1.1]#mv mkcramfs /usr/local/bin/
[root:/usr/local/apps_src/cramfs-1.1]#mkcramfs
usage: mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile
-h print this help
-E make all warnings errors (non-zero exit status)
-e edition set edition number (part of fsid)
-i file insert a file image into the filesystem (requires >= 2.4.0)
-n name set name of cramfs filesystem
-p pad by 512 bytes for boot code
-s sort directory entries (old option, ignored)
-v be more verbose
-z make explicit holes (requires >= 2.3.39)
dirname root of the directory tree to be compressed
outfile output file
[root:/usr/local/apps_src/cramfs-1.1]#

注:
如果编译出现下面错误:
[lingyun@localhost cramfs-1.1]$ make
gcc -W -Wall -O2 -g -I. mkcramfs.c -lz -o mkcramfs
mkcramfs.c:37:18: error: zlib.h: No such file or directory
这是因为cramfs依赖zlib这个第三方库,这时我们可以使用yum来安装它:
sudo yum install -y zlib*

制作根文件系统:

参考制作根文件系统的howto文档,制作根文件系统/opt/rootfs:
[root:/opt]#ls rootfs
apps bin data dev etc info lib linuxrc mnt proc root sbin sys tmp usr var
[root:/opt]#cd rootfs/dev/
[root:dev]#sudo mknod mtdblock0 b 31 0
[root:dev]#sudo mknod mtdblock1 b 31 1
[root:dev]#sudo mknod mtdblock2 b 31 2
[root:dev]#sudo mknod mtdblock3 b 31 3
注:
以上mtdblockx的个数是根据你内核中分区表信息来创建的,看下这个
http://blog.csdn.net/sonbai/article/details/8717574

[root:dev]#sudo mknod -m 755 mtd0 c 90 0
。。。。。。
。。。。。。
[root:dev]#ll
total 4
crwxr-xr-x 1 root root 5, 1 Mar 28 14:11 console
crwxr-xr-x 1 root root 1, 11 Apr 10 15:49 kmsg
crw-r--r-- 1 root root 1, 1 Apr 10 15:24 mem
crwxr-xr-x 1 root root 90, 0 Apr 10 15:46 mtd0
crwxr-xr-x 1 root root 90, 1 Apr 10 15:46 mtd0ro
crwxr-xr-x 1 root root 90, 2 Apr 10 15:46 mtd1
crwxr-xr-x 1 root root 90, 3 Apr 10 15:47 mtd1ro
crwxr-xr-x 1 root root 90, 4 Apr 10 15:47 mtd2
crwxr-xr-x 1 root root 90, 5 Apr 10 15:47 mtd2ro
brw-r--r-- 1 root root 31, 0 Apr 10 15:12 mtdblock0
brw-r--r-- 1 root root 31, 1 Apr 10 15:13 mtdblock1
brw-r--r-- 1 root root 31, 2 Apr 10 15:13 mtdblock2
crwxr-xr-x 1 root root 1, 3 Mar 28 14:12 null
drwxr-xr-x 2 root root 4096 Apr 10 15:49 pts
crw-r--r-- 1 root root 1, 8 Apr 10 15:24 random
crw-r--r-- 1 root root 5, 0 Apr 10 15:23 tty
crwxr-xr-x 1 root root 4, 0 Apr 10 15:51 tty0
crwxr-xr-x 1 root root 4, 1 Apr 10 15:51 tty1
crwxr-xr-x 1 root root 4, 2 Apr 10 15:51 tty2
crwxr-xr-x 1 root root 4, 3 Apr 10 15:51 tty3
crwxr-xr-x 1 root root 4, 4 Apr 10 15:51 tty4
crwxr-xr-x 1 root root 4, 64 Mar 28 14:12 ttyS0
crwxr-xr-x 1 root root 4, 64 Mar 28 14:12 ttySAC0
crw-r--r-- 1 root root 1, 9 Apr 10 15:24 urandom
crw-r--r-- 1 root root 1, 5 Apr 10 15:23 zero
注:
以上设备节点都要创建,可以根据上面的信息自行创建
杭州一知智能科技有限公司
2022-03-17 广告
电话机器人主要就是用来模拟人工通话的一组程序,一般由,CRM系统,语义识别,转换文字,话术体系,这是软的部分,再加上底层软交换和通信模块一起,合并起来就是一套完整的电话机器人系统。电话机器人可以代替真人进行电话工作的,像是电话营销、售后回访... 点击进入详情页
本回答由杭州一知智能科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式