linux中常用文件系统介绍——cramfsjffs2nfsinitrdyaffs2ext4squashfs(代码片段)

贺二公子 贺二公子     2022-12-05     451

关键词:

原文地址:https://blog.csdn.net/qq_28258885/article/details/118538769


文章目录

文件系统简介

嵌入式系统中常用文件系统包括有 cramfsJFFS2NFSinitrdyaffs2Ext4 以及 squashfs

它们的特点如下:

  • cramfsJFFS2 具有好的空间特性,很适合嵌入式产品应用。
  • cramfssquashfs 为只读文件系统。
  • squashfs 压缩率最高。
  • JFFS2 为可读写文件系统。
  • NFS 文件系统适用于开发初期的调试阶段。
  • yaffs2 文件系统只用于 NAND Flash
  • initrd 采用 cramfs 文件系统,为只读。
  • Ext4 文件系统用于 EMMC 卡。

cramfs

cramfs 是针对 Linux 内核 2.4 之后的版本所设计的一种新型文件系统,使用简单,加载容易,速度快。
cramfs 的优缺点如下:

  • 优点
    将文件数据以压缩形式存储,在需要运行时进行解压缩,能节省 Flash 存储空间
  • 缺点
    由于它存储的文件是压缩的格式,所以文件系统不能直接在 Flash 上运行。同时,文件系统运行时需要解压数据并拷贝至内存中,在一定程度上降低读取效率。另外 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

JFFS2 是 RedHat 的 David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。 JFFS2 文件系统是日志结构化的可读写的文件系统。

JFFS2 的优缺点如下:

  • 优点
    使用了压缩的文件格式。最重要的特性是可读写操作。
  • 缺点
    JFFS2 文件系统挂载时需要扫描整个 JFFS2 文件系统,因此当 JFFS2 文件系统分区增大时,挂载时间也会相应的变长。使用 JFFS2 格式可能带来少量的 Flash 空间的浪费。这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是若干个数据段。 JFFS2 的另一缺点是当文件系统已满或接近满时, JFFS2 运行速度会迅速降低。这是因为垃圾收集的问题。

加载 JFFS2 文件系统时的步骤如下:

  • 步骤 1. 扫描整个芯片,对日志节点进行校验,并且将日志节点全部装入内存缓存。
  • 步骤 2. 对所有日志节点进行整理,抽取有效的节点并整理出文件目录信息。
  • 步骤 3. 找出文件系统中无效节点并且将它们删除。
  • 步骤 4. 最后整理内存中的信息,将加载到缓存中的无效节点释放。

由此可以看出虽然这样能有效地提高系统的可靠性,但是在一定程度上降低了系统的速度。尤其对于较大的闪存芯片,加载过程会更慢。

为了使内核支持 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

yaffs2 是专门为 NAND Flash 设计的嵌入式文件系统。
它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。

yaffs2 的优缺点如下:

  • 优点
    − 专门针对 NAND Flash,软件结构得到优化,速度快。
    − 使用硬件的 spare area 区域存储文件组织信息,启动时只需扫描组织信息,启动比较快。
    − 采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡的目的。
  • 缺点
    没有采用压缩的文件格式。当包含的内容相同时, yaffs2 镜像文件要比 jffs2 镜像
    文件大。

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

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

squashfs 文件系统是一套基于 Linux 内核使用的压缩只读文件系统,压缩率高

squashfs 具有如下特点:

  • 数据(data),节点(inode)和目录(directories)都被压缩
  • 保存了全部的 32 位 UID/GIDS 和文件的创建时间
  • 最大支持 4G 文件系统
  • 检测并删除重复文件

使用 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

Ext4 文件系统是一个高效的、优秀的、可靠的和极具特点的文件系统,相对于 Ext3 的改进是更深层次的,是文件系统数据结构方面的优化。

  • 步骤 1. 制作支持 Ext4 的内核镜像。进入 linux-3.4.y 目录下,执行以下命令:
    • cp arch/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 是之前已经制作好的根文件系统。请根据实际情况修改参数。

linux磁盘和文件系统管理

...起总结,是因为在平时的工作中,二者是相辅相成的,常常用来一起使用。首先介绍下磁盘分区的管理工具常用的磁盘分区管理工具有fdisk,parted,sfdisk这里我们介绍下常用的fdsik工具fdisk-l[DEVICE]...:列出指定磁盘设备上的分区... 查看详情

linux-目录结构常用命令组

Linux-目录结构、常用命令、组Linux目录结构常用命令Linux组基本介绍文件/目录所有者应用实例操作Linux目录结构bin(binaries)存放二进制可执行文件sbin(superuserbinaries)存放二进制可执行文件,只有root才能访问etc(etcetera)存放系统配... 查看详情

linux常用基本命令大全介绍

...基础的一部分,有着很重要的地位,所以入门必须掌握好常用命令。下面由我为大家整理了Linux系统常用的基本命令入门篇,希望对大家有帮助!  Linux系统常用的基本命令入门篇一、基础命令  1.Linux的进入与退出系统  进... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

linux基础篇——linux操作系统目录结构运行级别介绍

...录结构都是规划好的,文件不能随意放置,比如常用的指令存于/bin目录,配置文件、配置环境存于/etc目录等等。Linux目录结构介绍:/bin(/usr/bin、/usr/local/bin),Binary的缩写,用于存放常使用的命令。/sbin(/usr... 查看详情

linux系统文件介绍

...;在早期的UNIX系统中,各个厂家各自定义了自己的UNIX系统文件目录,比较混乱。Linux面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出FHS(FilesystemHierarchyStandard)的Linux文件系统层次结构标准。FHS... 查看详情

centos目录结构介绍

...置在一个分区中/bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。/boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可/dev:存放linux系统下... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

linux常用命令总结(代码片段)

Linux常用命令总结目录Linux常用命令总结服务器关机相关命令2.系统目录结构介绍3.文件操作相关命令4.文件的基本属性5.文件的内容查看6.Vim7.进程相关命令服务器关机相关命令关机指令为:shutdown;sync#将数据由内存同步到... 查看详情

常用的linux命令:linux命令是linux操作系统中的基本工具,用于管理文件目录进程等系统资源

...本工具,用于管理文件、目录、进程等系统资源。以下是常用的Linux命令:1.ls:列出目录下的文件和子目录。2.cd:切换当前目录。3.mkdir:创建新目录。4.touch:创建一个新文件。5.rm:删除文件或目录。6.cp:拷贝文件或目录。7.mv... 查看详情

lvm基本介绍与常用命令

...Linux环境下对磁盘分区进行管理的一种机制LVM-优点:LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。小系统使用LVM的益处:传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直... 查看详情

lvm基本介绍与常用命令

...Linux环境下对磁盘分区进行管理的一种机制LVM-优点:LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。小系统使用LVM的益处:传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直... 查看详情

阿里云服务器linux系统中常见的日志介绍

云服务器ECSLinux系统中,日志文件是非常重要的文件,它们记录了很多系统中重要的事。Linux系统中常见日志文件概述如下:/var/log/cron可以在cron文件中检查crontab任务调度是否实际执行,执行过程是否发生错误,以及/etc/crontab文... 查看详情

linux常用命令1

一.shell【1】Linux系统中运行的一种特殊程序【2】在用户和内核之间之间充当“翻译官”【3】用户登陆Linux系统时,自动加载一个Shell程序【4】Bash是Linux系统中默认使用的Shell程序【1】内核:用于调用计算机硬件资源【2】shell:... 查看详情

蓝易云:linux系统常用命令-系列

在Linux中,有许多常用的命令可以用来管理文件、目录、进程等。下面是一些常用的Linux命令的介绍。1.cd:改变当前目录。例如,cd/home。2.ls:列出指定目录下的所有文件和子目录。例如,ls-al。3.rm:删除... 查看详情

linux系统中进行磁盘管理的常用命令都有哪些

Linux磁盘与文件系统管理命令  fdisk:磁盘分区工具partprobe:更新内核的硬盘分区表信息tune2fs:调整ext2/ext3/ext4文件系统参数parted:磁盘分区工具mkfs:创建Linux文件系统dumpe2fs:导出ext2/ext3/ext4文件系统信息resize2fs:调整ext2/ext3/... 查看详情

linux系统防火墙相关问题及常用命令介绍

今天介绍关于linux系统防火墙:centos5、centos6、redhat6系统自带的是iptables防火墙,centos7、redhat7自带firewall防火墙,ubuntu系统使用的是ufw防火墙。本平台www.gxdeqiong.com安装的是iptables防火墙(其他云服务供应商可能使用的是其他防火... 查看详情