嵌入式系统中常用文件系统包括有 cramfs
、 JFFS2
、 NFS
、 initrd
、 yaffs2
、 Ext4
以及
squashfs
。
它们的特点如下:
cramfs
和 JFFS2
具有好的空间特性,很适合嵌入式产品应用。cramfs
与 squashfs
为只读文件系统。squashfs
压缩率最高。JFFS2
为可读写文件系统。NFS
文件系统适用于开发初期的调试阶段。yaffs2
文件系统只用于 NAND Flash。initrd
采用 cramfs
文件系统,为只读。Ext4
文件系统用于 EMMC 卡。cramfs
是针对 Linux 内核 2.4 之后的版本所设计的一种新型文件系统,使用简单,加载
容易,速度快。
cramfs 的优缺点如下:
cramfs
文件系统是只读的。如果想要在单板运行的 Linux 中提供 cramfs 的能力,必须要在编译内核时把 cramfs 的 选项加入。 在 make
menuconfig 后,进入“ File>systems”,选择“ miscellaneous filesystems”,最后选中其中的“Compressed ROM file system support”( SDK 里面提供 的内核默认已经选择了该文件系统的支持)。mkfs.cramfs 是用来制作 cramfs 文件系统映象的工具。通过这个工具处理已经制作好的 根文件系统,就可以生成 cramfs
文件系统的映象(这类似于我们把光盘制作成 ISO 文 件映像)。具体操作如下所示:hisilicon$mkfs.cramfs ./rootbox ./cramfs-root.img
其中, rootbox 是之前已经制作好的根文件系统,cramfs-root.img 是生成的 cramfs 文件 系统映像文件。
JFFS2 是 RedHat 的 David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入
式设备的原始闪存芯片的实际文件系统。 JFFS2 文件系统是日志结构化的可读写的文
件系统。
JFFS2 的优缺点如下:
加载 JFFS2 文件系统时的步骤如下:
由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的
速度。尤其对于较大的闪存芯片,加载过程会更慢。
为了使内核支持 JFFS2 文件系统,必须在编译内核时把 JFFS2 的选项加入(我们发布 的内核默认已经加入了支持)。在 make
menuconfig 后,进入“ File>systems”,选择 “ miscellaneous
filesystems”,最后选中其中的“ Journalling Flash File System v2 (JFFS2)
support”选项( SDK 里面提供的内核默认已经选择了该文件系统的支持)。 JFFS2 的制作方法为:
hisilicon$mkfs.jffs2 –d ./rootbox -l –e 0x20000 -o jffs2-root.img
其中,mkfs.jffs2 工具可以从互联网中下载,也可以在 SDK 包中找到。
yaffs2 是专门为 NAND Flash 设计的嵌入式文件系统。
它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。
yaffs2 的优缺点如下:
yaffs2 文件系统在 SDK 中作为一个模块提供。只需在 yaffs2 代码中的 Makefile 中加入所依赖的内核代码路径,进行编译,即可生成 yaffs2 文件系统模块。 yaffs2 镜像文件的制作和 cramfs相同,即通过工具制作,只需简单的几个参数,具体 如下:
hisilicon$ mkyaffs2image ./rootboxyaffs2-root.img pagesize ecctype
其中, rootbox 是之前已经制作好的根文件系统,yaffs2-root.img 是生成的 yaffs2 文件 系统镜像文件, pagesize 是单板上焊接 NAND Flash器件的页大小, ecctype 是单板上 焊接 NAND Flash 器件的 ecc 类型。
initrd 相当于存储介质,它支持的文件系统格式有 ext2、 cramfs 等,因此内核除了支持
initrd 之外,还要支持 cramfs 文件系统。
内核需要做如下配置, initrd 才可以正常工作:
- 进入“ Device Drivers->Block devices”,选择支持“ RAM disk support” 和“ Initial RAM disk (initrd) support”。
- 进入“ File>systems”,选择“ miscellaneous filesystems”,最后选中其中的 “ Compressed ROM file system support”。
squashfs 文件系统是一套基于 Linux 内核使用的压缩只读文件系统,压缩率高。
squashfs 具有如下特点:
使用 squashfs 文件系统步骤:
步骤 1. 制作支持 squashfs 的内核镜像。进入 linux-3.4.y目录下,执行以下命令:
cp arch/arm/configs/hi3518ev200_mini_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig (保存退出即可)
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- uImage
步骤 2. 制作 squashfs 文件系统镜像。在发布包 SDK/package/osdrv/tools/pc_tools 目录下的
mksquashfs 为制作 squashfs 文件系统工具。使用方法如下:
./mksquashfs rootfs ./rootfs.squashfs.img -b 64K –comp xz
其中, rootfs 是之前已经制作好的根文件系统,rootfs.squashfs.img 是生成的 squashfs 文 件系统映像文件。 -b 64K 指定 squashfs文件系统的块大小为 64K(决定于实际 spi flash 块大小)。 -comp 指定文件系统压缩方式为 xz。根据实际情况修改参数。
----结束
Ext4 文件系统是一个高效的、优秀的、可靠的和极具特点的文件系统,相对于 Ext3 的
的改进是更深层次的,是文件系统数据结构方面的优化。
步骤 1. 制作支持 Ext4 的内核镜像。进入 linux-3.4.y 目录下,执行以下命令:
cparch/arm/configs/hi3518ev200_full_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig
(保存退出即可)
make ARCH=armCROSS_COMPILE=arm-hisiXXX-linux- uImage
步骤 2. 制作 Ext4 文件系统镜像。在发布包SDK/package/osdrv/tools/pc_tools 目录下的 make_ext4fs 为制作 Ext4文件系统工具。使用方法如下:
./make_ext4f –l 32M –s rootfs.ext4.img
其中, -l 32M 是指定 uboot 中配置 emmc 的文件系统分区大小为 32M, -s 为使用 gzip 压缩,
rootfs.ext4.img 是生成的 Ext4 文件系统映像文件, rootfs 是之前已经制作好的根
文件系统。请根据实际情况修改参数。
----结束