首页 > 其他分享 >嵌入式常见文件系统介绍

嵌入式常见文件系统介绍

时间:2023-05-05 17:33:06浏览次数:45  
标签:闪存 常见 文件系统 嵌入式 内核 使用 挂载

文件系统

简介

大多数的嵌入式设备使用闪存作为存储的媒介。同时,在很多客制化的电子产品中大小和启动的时间也非常重要

。因此选择特殊的文件系统来满足所需的某种特性,如强大的压缩能力,或直接从闪存中执行文件的能力。

MTD Memory Technology Devices

注意,闪存可以由Linux的Memory Technology Devices(MTD)系统管理。更多信息请参见MTD/闪存常见问题。这里提到的大多数文件系统都是建立在MTD系统之上的。

UBI Unsorted Block Images

linux内核中的未分配的块映像系统管理者在单个闪存设备上的多个逻辑卷。他在MTD层通过提供一个映射表将逻辑块与物理块进行映射。UBI提出复杂的分区概念,它允许在整个闪存设备上使用 wear-leveling 算法

分区

内核需要至少一个“root”文件系统,在此基础上,其他的文件系统才能被挂载。在非嵌入式系统中,经常只需要一个文件系统。但是为了优化有限的资源(闪存,内存,处理器速度,启动时间),很多嵌入式系统将文件系统拆分为很多块,并将其分别放入到各自的分区(通常用不同的存储。例如,一个开发者可能希望把系统中所有的只读文件,放到闪存中的一个压缩的只读文件系统中。这将在闪存上消耗最少的空间,代价是一些读时性能(用于解压)。

另外配置可能让可执行文件非压缩的存储在闪存上,以至于他们可以被“就地”执行,这可以节省内存和启动时间(以潜在的少量性能损失为代价)

对于可写的数据,如果数据不需要持久保存,一般会用ram磁盘。依赖于性能需要和内存限制,文件数据可能会被压缩。

对于文件系统的只读和读写部分的交错,没有单一的标准。他依赖于使用在该项目上的嵌入式应用程序集。

嵌入式文件系统

AXFS

Advanced XIP File System

http://axfs.sourceforge.net/

这个文件系统是专门为支持就地执行操作而设计的。它使用了一个两阶段的方法。第一阶段是将文件系统放在闪存中,并运行它来收集配置文件数据,说明哪些页面被使用。在第二阶段,你用这些资料数据建立一个文件系统。这个文件系统把配置文件中提到的所有页面作为XIP数据,然后在挂载时可以加载到RAM中(并作为XIP执行)。也可以把XIP页放在NOR闪存中并从那里运行它们。

Btrfs

btrfs是一个新的写时拷贝文件系统,首次出现在2.6.29-rc1的内核中,并在2.6.30中被合并。
截至2011年4月,许多流行的Linux文件系统工具还不支持Btrfs,如gparted。
Btrfs已经被采纳为MeeGo平台的文件系统。

CramFS

Compressed read-only file system for linux 最大的容量是256MB

Linear Cramfs 是一个特殊功能的名称,用于使用未压缩的文件,在Cramfs文件系统的线性块布局中。这对于存储可以就地执行的文件很有用。

F2FS

flash-friendly file system for linux

InitRAMFS

一个Linux 2.6的功能,它使初始根文件系统和init程序驻留在内核的内存缓存中,而不是在RAM磁盘上(如initrd文件系统)。作者说,与initrd相比,intramfs可以提高启动时的灵活性、内存效率和简易性。对嵌入式Linux开发者来说,一个特别有趣的特点是,相对简单的深度嵌入式系统可以使用initramfs作为其唯一的文件系统。

JFFS2

Journalling Flash File System, version 2.这是最常用的闪存文件系统。日志结构的文件

可压缩

LogFS

目前已经弃用

NFS

Network File System

由于嵌入式设备的空间限制,在开发过程中,使用网络文件系统作为目标的根文件系统是很常见的。这使得目标可以有一个非常大的区域,在开发过程中可以放置全尺寸的二进制文件和许多开发工具。这种方法的一个缺点是,在开发周期的某个时候,系统需要重新配置本地文件系统(很可能需要重新测试),以便最终产品出版。

NFS客户端可以内置到Linux内核中,并且内核可以配置为使用NFS作为根文件系统。这需要对网络的支持,以及指定目标的IP地址和NFS主机上文件系统的路径的机制。此外,必须将主机配置为运行NFS服务器。通常,主机还通过运行DHCP服务器向目标板提供所需的地址和路径信息。

请参阅Linux内核源代码中的Documentation/nfsroot.txt文件,以获取有关随内核安装NFS根文件系统的更多信息。

PRAMFS

Persistent and protected RAM File System

持久/受保护的 RAM 特殊文件系统 (PRAMFS) 是一个功能齐全的读/写文件系统,旨在使用快速 I/O 内存,如果内存是非易失性的,则文件系统将是持久的。此外,它还具有就地执行支持。

RomFS

小型节省空间的只读文件系统

SquashFS

压缩的只读文件系统。他的压缩能力比jffs2,cramfs还要强。

在运行mksquashfs时,有可能调整压缩量。-b选项允许你指定块的大小。一个较小的块大小通常会带来较少的压缩,而一个较大的-b选项会带来更多的压缩。然而,这也有一个缺点。数据是用块从闪存中读取的。因此,如果你使用128k的块大小,而你需要4k的页面,仍然会从闪存中读取相当于128k的压缩数据。由于128k包括32个页面,它将导致32个页面被读入缓冲区缓存,尽管在读取的时候你只需要一个。通常其他的31页也是需要的,但如果不是,你就浪费了一些时间来读取和解压未使用的数据。同时,你在缓冲区的缓存中也得到了一些不需要的数据(可能系统甚至不得不从缓存中踢出已经使用过的页面,以便为这31页腾出空间)。

如果你关心的是最小的文件系统,你可能想用最大的块大小。然而,如果你主要关心的是性能问题,你可能想试验一下,看看什么对你来说是最好的(这甚至可能是根本不应用压缩!)!Mksquashfs有一些选项: -noInodeCompression, -noDataCompression 和 -noFragmentCompression来控制这个)。如果你也应用了函数重排(见Boot Time#User-space and application speedups),一个大的块大小可能会对你有好处。

UBIFS

基于闪存的文件系统,建立在未分配块映射UBI接口之上

对于JFFS2和YAFFS来说有良好的性能

YAFFS2

Yet Another File System 一个文件系统专门为NAND闪存设计

YAFFS2是一个简单,便携,可靠,自足的文件系统。被广泛用在基于非linux系统的嵌入式系统上,也可以在没有操作系统的情况下独立使用,例如在bootloader中使用。当与Linux一起使用时,它可以使用MTD或它自己的闪存驱动器。同样,它也可以使用VFS或它自己的posix层。它是日志结构的,并且是单线程的。它本身不做压缩--要么自己压缩数据,要么在YAFFS2之上使用squashfs。

YAFFS2旨在快速启动(就必须扫描闪存的日志结构的FS而言)。它使用检查点,因此,如果一个分区被干净地卸载,那么在开机时就不需要重新扫描闪存。FS的所有功能都是可配置的,所以你可以权衡诸如最大文件/分区大小、闪存块大小、文件粒度等。除了缓存以确保有效地使用块之外,数据是直接写入闪存的。YAFFS2通常使用闪存中的OOB作为其元数据,允许更快地启动,因为只有OOB需要被读取以进行闪存扫描。它可以在牺牲一些速度的情况下将元数据保留在主页面区域内。

挂载根文件系统

根文件系统是由内核挂载的,使用内核命令行选项。其他文件系统由用户空间挂载,通常由init脚本或init程序使用 "mount "命令挂载。

下面是在Linux下挂载根文件系统的命令行的例子:

使用第一个IDE接口硬盘上的第一个分区:
root=/dev/hda1
或在后来的内核中(sata接口):
root=/dev/sda1
使用NFS根文件系统(内核配置必须支持这个)。
root=/dev/nfs
(通常你需要添加一些其他参数来确保内核的IP地址被配置,或者指定主机的NFS路径)。

使用闪存设备分区2:
root=/dev/mtdblock2

使用mtdram挂载jffs2镜像在pc上

因为不能用回环设备来挂载jffs2的镜像,所以需要使用mtdram来代替,通常情况下需要三个模块来让其工作

  • mtdram:在RAM中提供一个MTD分区,尺寸可以被total_size参数来定义 以KB为单位
  • mtdblock:他将创建一个块设备用来联系分区
  • jffs2:因为jffs2通常不用来作为PC的文件系统,需要手动的加载该模块
modprobe mtdram total_size=16384
modprobe mtdblock
modprobe jffs2

modprobe是linux内核的模块加载命令

依赖于目标机的大小端,镜像文件需要转换为PC的大小端。MTD工具中的jffs2dump可以用来归档

jffs2dump -b -c -e <output-filename> <input-filename> 

最后镜像可以被复制到块设备中 通过dd命令

dd if=<image-file> of=/dev/mtdblock0

挂载

mount /dev/mtdblock0 /tmp/jffs2 -t jffs2

使用nandsim挂载UBI镜像到PC上

首先创建一个模拟nand设备 _id_byte = 对应于从NAND发送回来的ID字节。

sudo modprobe nandsim first_id_byte = 0x20 second_id_byte=0xaa third_id_byte=0x00 fourth_id_byte =  0x15

检查是否被创建成功

cat /proc/mtd

将其附加到一个mtd设备

sudo modprobe ubi mtd=0

在格式化之前将其分离

sudo ubidetach /dev/ubi_ctrl -m 0
sudo ubiformat /dev/mtd0 -f <image>.ubi
sudo ubiattach /dev/ubi_ctrl -m 0
mkdir temp
sudo mount -t ubifs ubi0 temp

通用问题

MMC和SD卡是闪存设备,为其主机提供面向块的接口。通常,这些设备被用于嵌入式设备,并具有使用FAT文件系统进行块访问的特性。但它们是以 "黑盒 "的形式出现的,其内部逻辑和算法没有暴露给主机。

一些工作正在进行中,以调查这些属性,并使Linux能够更有效地使用这些设备。

特殊目的的文件系统

ABISS

Active Block I/O Scheduling System是一个文件系统,旨在能够为文件系统I/O活动提供实时功能。

分层文件系统

分层文件系统让你在挂载只读的媒介中仍然可写。至少,写的部分会在其他地方结束,这由分层文件系统透明地处理。它已经存在了相当长的时间,下面是一些文件系统的例子,已经可以在(嵌入式)Linux系统上开箱即用。

UnionFS

有时,能够将文件系统叠加在彼此之上是很方便的。例如,在嵌入式产品中,使用压缩的只读文件系统,安装在读/写文件系统的 "下面 "是很有用的。这给了一个完整的读写文件系统的外观,同时仍然保留了压缩文件系统的空间节约,用于那些在产品生命周期内不会改变的文件。

UnionFS是一个提供这种系统的项目(提供多个文件系统的 "联合")。

aufs

another union fs

mini_fo

小扇区叠加文件系统

标签:闪存,常见,文件系统,嵌入式,内核,使用,挂载
From: https://www.cnblogs.com/BMK-RE/p/17374844.html

相关文章

  • 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Tra
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1Hh4y1H7dR1、运行速度1Hz木头材料晶体管https://liu.se/en/news-item/varldens-forsta-tratransistor研究人员设计并测试了第......
  • 关于Xenomai开发嵌入式实时系统的一些浅见
    嵌入式系统的开发,如果对实时性要求不高,就可以使用Linux自身的实时补丁实现软实时性。但是在需要硬实时的情况下,通常是双系统来做,一个硬实时的RTOS加上一个Linux,实时任务都在RTOS上跑,其他的任务在Linux上,好处是能保证系统的实时性,坏处是系统间的通讯需要额外的设计,如使用共享内存的......
  • 嵌入式linux移植——ptlib、H323plus、oh323tut 交叉编译
    前言:上一篇博客主要讲了比较多原理的东西,也是我解决问题时掌握到的一些东西和重要依据,这篇博客接着上一篇博客嵌入式linux移植——ptlib、H323plus交叉编译I继续往下讲~【补充】开发环境:Ubuntu16.04、Hi3531a;编译工具链:arm-hisiv300-linux; 【一个刷存在感而且想要骗赞......
  • 常见excel使用技巧
    一、筛选开头是xxx的列在目标列的右侧插入一列,第二行输入公式=OR(left(左侧单元格)={"1","2","3","4"})下拉公式,出现为TRUE的项,然后通过添加筛选选中TRUE是列。 二、科学计数法换文本显示选中出现科学计数法的那一列,顶部工具栏切换到【数据】,选择【分列】。 ......
  • 正则表达式_常见语法
    1.正则表达时格式一: 2.正则表达式_从长串字符串中找到正则表达式的内容: 3.符号匹配: 4.正则表达式[]匹配: 5.常见语法: 6.预定义的字符集: 7.正则表达式_数量词: 8.总结: ......
  • [嵌入式新产品] 蓝牙遥控器
    日本目前发售了一款蓝牙遥控器,一台智能手机可以通过蓝牙连到该遥控器上来操作家电.价格是400多人民币.最大可以注册50台家电,同时具备时钟功能REX-BTIREX1大小(约为)宽60高22深70mm,手掌大小.(蓝牙遥控器)使用方式:在手机端安装对应的App,App通过蓝牙控制遥控器,遥控器......
  • openEuler Developer Day 2023成功召开!发布嵌入式商业版本及多项成果
    【中国,上海,2023年4月21日】openEulerDeveloperDay2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导,中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办,以“万涓汇流,奔涌向前”为主题,旨在推动操作系统以及基础软件的创新和突破。openEuler开源......
  • 嵌入式工业开发板基础测试手册——基于NXP iMX6ULL开发板(1)
    前言本文档适用开发环境:Windows开发环境:Windows764bit、Windows1064bit虚拟机:VMware15.1.0Linux开发环境:Ubuntu18.04.464bitU-Boot:U-Boot-2020.04Kernel:Linux-5.4.70LinuxSDK:5.4.70_2.3.0进行本文档操作前,请先按照调试工具安装、Linux开发环境搭建相关文档,安装Secu......
  • 嵌入式测试手册——基于NXP iMX6ULL开发板(2)
    基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXPi.MX6ULL的ARMCortex-A7高性能低功耗处理器设计的评估板,由核心板和评估底板组成。核心板经过专业的PCBLayout和高低温测试验证,稳定可靠,可满足各种工业应用环境。评估板接口资源丰富,引出双路网口、双路RS485、双路CAN、三路USB、......
  • 嵌入式基础测试手册——基于NXP iMX6ULL开发板(4)
    前言本文档适用开发环境:Windows开发环境:Windows764bit、Windows1064bit虚拟机:VMware15.1.0Linux开发环境:Ubuntu18.04.464bitU-Boot:U-Boot-2020.04Kernel:Linux-5.4.70LinuxSDK:5.4.70_2.3.0基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXPi.MX6ULL的ARMCortex-A7高......