linux squashfs嵌入式文件系统

squashfs是以linux 内核源码补丁的形式发布,附带mksquashfs工具,用于创建squash文件系统。squashfs可以将整个文件系统或者某个单一的目录压缩在一起, 存放在某个设备, 某个分区或者普通的文件中. 如果你将其压缩到一个设备中, 那么你可以将其直接mount起来使用; 而如果它仅仅是个文件,你可以将其当为一个loopback 设备使用. squashfs文件系统的设计令人欣喜.  For archiving purposes, 它可以让你更加灵活的使用, 而且它比.tar.gz文档有更快的响应速度.

以下是squash文件系统的特点:
· 数据(data),节点(inode)和目录(directories)都被压缩。

· 保存了全部的32位UID/GIDS和文件的创建时间. (注: cramfs是8位,没有创建时间)。

· 支持多达4G的文件系统. (cramfs是16M)。

· 节点和目录都是高度压缩, 而且都是存储在字节边界(packed on byte boundaries); 所有压缩的节点长度平均在8个字节左右.(具体的长度根据文件的类型是不同的. 比如, 普通文件,目录,符号链接,块设备和字符设备的节点的大小就不一样)。

· squashfs可以允许块大小(block size)达32Kb(1.x)和64kb(2.x), 这样可以达到比4K块大小更大的压缩率。

·  squashfs 2引进了碎片块(fragment blocks)的概念: 一种将许多比块size 小的文件存储在一个块中, 以达到更大的压缩率。

· 重复的文件会被检测并删除掉。

· 同时支持big和little endian架构. SQ可以将文件系统MOUNT到不同的字节顺序(byte-order)的机器上面。

编译使用SQ的基本步骤:
  1.重新打包和编译linux内核, 使之支持SQ.
  2.编译mksquashfs工具.
  3.使用mksquashf创建压缩文件系统.
  4.试用: mount suqash文件系统到一个临时目录.
  5.如果需要的话,更改/etc/fstab 或者起始脚本, 以使linux操作系统自动加载新的 squashfs 文件系统.


        squashfs是一个只读压缩文件系统,对嵌入式来说,可以减少成本,在使用nand flash作为存储设备的开发板来说,要使用squashfs首先内核当中要有对squashfs的支持,同时还要有对mtd字符设备和块设备的支持。

        针对将squashfs放在一个nand 分区的情况,对squashfs的操作应该有下面几步:

a.制作squashfs镜像(本操作位于宿主机)
        #mksquash xxxx xxxx.squash (可以通过"-comp "指定压缩方式)

b.擦除nand分区
        #flash_eraseall /dev/mtdx(需要对字符设备的支持)

c.拷贝镜像
        #dd if=xxxx.squash of=/dev/mtdx
注:文件系统知识一个文件的组织数据结构而已,将squash镜像全盘拷入到分区当中去就意味这创建了一个squash文件系统。

d.挂载设备
        #mount -t squashfs /dev/mtdblockx /mnt/xxx(需要mtd块设备的支持)
       
        由于对错误和过程没有完全记录,且对知识没有充分掌握,以致在次使用squashfs的时候仍有问题不能精确的定位,下面是补充:
        在制作好squashfs之后,可以直接将文件系统挂载在某个目录下面:
        #mount -t squashfs xxx.squash /dir/
        接着得到如下打印:

can't setup loop device:no space left.
       
        最后在制作squashfs的时候需要考虑版本的问题,如果提示版本的问题,需要换其他的版本,但是现在最新的squashfs工具已经没有这个问题了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值