嵌入式Linux系统的闪存设备和文件系统学习纪要

news2025/2/22 8:19:09

嵌入式Linux系统的闪存设备和文件系统学习纪要

Linux下的文件系统结构如下:

================================================================================
NAND Flash 是一种非易失性存储器(Non-Volatile Memory),常用于闪存设备和固态硬盘(SSD)中。以下是几种常见的 NAND Flash 种类:

1. SLC(Single-Level Cell):SLC NAND Flash 是最早的 NAND Flash 类型,每个存储单元只能存储一个比特(0 或 1)。它具有较高的耐久性、较低的读取延迟和较高的写入速度,但成本较高。

2. MLC(Multi-Level Cell):MLC NAND Flash 每个存储单元可以存储多个比特,通常是两个或四个比特。相比于 SLC,MLC 具有更高的存储密度,但耐久性较低,读取延迟和写入速度也相对较慢。

3. TLC(Triple-Level Cell):TLC NAND Flash 每个存储单元可以存储三个比特。TLC 具有更高的存储密度,但相对于 MLC,它的耐久性更低,读取延迟和写入速度更慢。

4. QLC(Quad-Level Cell):QLC NAND Flash 每个存储单元可以存储四个比特。QLC 具有更高的存储密度,但相对于 TLC,它的耐久性更低,读取延迟和写入速度更慢。

随着技术的进步,新的 NAND Flash 类型不断涌现,如五级单元(Penta-Level Cell,PLC)和六级单元(Hexa-Level Cell,HLC),它们进一步提高了存储密度,但也伴随着更低的耐久性和较慢的读写速度。选择适合特定应用需求的 NAND Flash 类型时,需要综合考虑存储容量、性能要求和成本等因素。

================================================================================
eMMC(embedded MultiMediaCard)是一种集成了闪存存储器和控制器的嵌入式存储解决方案。它通常用于移动设备、嵌入式系统和消费电子产品中。以下是几种常见的 eMMC 种类:

1. eMMC 4.5:eMMC 4.5 是较早版本的 eMMC 标准,提供了最基本的存储功能和性能。它支持高达52 MHz的时钟频率和8位数据总线宽度。

2. eMMC 5.0:eMMC 5.0 是较新的 eMMC 标准,相比于 4.5 版本有显著的改进。它引入了 HS400 模式,支持高达200 MHz的时钟频率和8位或4位数据总线宽度,从而提供更快的读写速度。

3. eMMC 5.1:eMMC 5.1 在 5.0 的基础上进行了进一步改进。它增加了命令队列和混合写入模式等特性,提高了性能和效率。

4. eMMC 5.1 Plus / eMMC 5.1 Turbo:这些术语通常用来描述经过优化的 eMMC 5.1 存储器,具有更高的性能和速度。

5. eMMC 5.2:eMMC 5.2 是最新的 eMMC 标准,引入了一些新功能和改进。它支持更高的时钟频率、更大的存储容量和更快的数据传输速度。

需要注意的是,不同厂商可能会对 eMMC 进行定制和优化,因此具体的性能和特性可能会有所差异。选择适合特定应用需求的 eMMC 版本时,需要考虑存储容量、读写速度、可靠性和成本等因素。

================================================================================
UBIFS

无序区块镜像文件系统(Unsorted Block Image File System, UBIFS)是用于固态存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一。

开发目的
2006年,UBIFS由IBM与Nokia的工程师Thomas Gleixner,Artem Bityutskiy所设计,专门为了解决MTD(Memory Technology Device)所遇到的瓶颈。由于Nand Flash容量的暴涨,YAFFS等皆无法操控大的Nand Flash空间。UBIFS通过子系统UBI处理与MTD device之间的动作。与JFFS2一样,UBIFS 建构于MTD之上,因而与一般的块设备不兼容。

系统优点
UBIFS在设计与性能上均较YAFFS2、JFFS2更适合MLC NAND FLASH。例如:UBIFS 支持 凑数(write-back), 其写入的数据会被缓存起来, 直到有必要写入时才写到flash, 这样大大降低分散小区块数量,并提高读写效率。UBIFS文件系统目录存储在flash上,UBIFS 挂载时不需要扫描整个存储器来重新创建文件目录。支持实时压缩,而且可选择性压缩部份文件。另外UBIFS使用日志(journal),可减少对flash index的更新频率。

UBIFS 是 Nokia N900 智能手机上的默认文件系统。

以下是关于 UBIFS 的一些要点:

1. 特点:UBIFS 具有良好的可靠性和耐久性,适用于闪存设备的特殊特性。它支持动态扩展和压缩,能够有效地管理存储空间。UBIFS 还具有快速启动时间和低内存占用。

2. 日志型文件系统:UBIFS 是一个基于日志的文件系统,它使用日志来记录文件系统的操作和变化。这种设计可以提供更好的数据完整性和恢复能力,在系统异常断电或崩溃时能够快速恢复文件系统的一致性。

3. 块级别存储:UBIFS 以块为单位进行存储,而不是传统的文件级别存储。每个块都包含多个逻辑页,这样可以减少寻址开销并提高读写性能。

4. 压缩和去重:UBIFS 支持数据压缩和去重功能,可以显著减小存储空间的占用。通过压缩和去重,可以提高存储效率并延长闪存设备的寿命。

5. 可靠性和错误检测:UBIFS 具有强大的可靠性机制,包括校验和、CRC 错误检测和修复、写入日志等。这些机制可以帮助检测和纠正数据损坏或错误,并提供更高的数据完整性。

总之,UBIFS 是一种专为闪存设备设计的高性能文件系统,它通过日志和块级别存储等特性提供了可靠性、耐久性和高效性能。它在嵌入式系统和固态硬盘等应用中被广泛使用。

================================================================================
JFFS

JFFS,Journalling Flash File System的缩写,中文释义:闪存设备日志型文件系统。

简介
Journalling Flash File System(闪存设备日志型文件系统,JFFS)最初是由瑞典的 Axis Communication AB 开发。

主要作用
其目的是作为嵌入式系统免受宕(dang)机和断电危害的文件系统。然而用于NAND设备上JFFS已被JFFS2大量取代。

JFFS2

JFFS2(Journaling Flash File System 2)是一种用于闪存设备的文件系统,它是 JFFS(Journaling Flash File System)的改进版本。

JFFS2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。

除了提供具有断电可靠性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现“损耗平衡”和“数据压缩”等特性。

JFFS2 具有以下特点:

1. 压缩支持:JFFS2 支持对数据进行压缩,可以减少存储空间的使用,并提高读写性能。

2. 日志结构:JFFS2 使用日志结构来记录文件系统的变化,以确保数据的完整性和可靠性。

3. 块擦除:JFFS2 以块为单位进行擦除操作,而不需要整个文件系统的擦除和重写。这使得 JFFS2 在写入大量小文件时更加高效。

4. 动态节点分配:JFFS2 允许在运行时动态创建和删除文件和目录节点,提供了更灵活的文件系统管理。

5. 适用于小容量设备:JFFS2 针对闪存设备的特性进行了优化,适用于小容量的闪存设备。

6. 低内存占用:JFFS2 对内存的需求相对较低,适合资源受限的嵌入式系统。

尽管 JFFS2 在过去被广泛使用,但随着闪存技术的发展,现代文件系统如UBIFS和YAFFS等已经取代了 JFFS2,并提供更好的性能和可靠性。因此,在选择文件系统时,建议考虑使用更先进的文件系统来满足当前的需求。

================================================================================
YAFFS2

YAFFS(Yet Another Flash File System)是由Aleph One公司所发展出来的NAND flash 嵌入式文件系统。

在YAFFS中,最小存储单位为一个页(Page),文件内的数据是存储在固定512 bytes的页中,每一页亦会有一个对应的16 bytes的Spare(OOB,Out-Of-Band)。YAFFS采用树形结构(Tree Node Structure),由多个树节点(Tree Node,Tnode)所组成,树节点又分成内部节点(Internal Tnode)与底层树节点(Lowest Level Tree node),其中内部节点由8个指针(Pointers)所组成,底层树节点由16个入口(Entries)所组成,其时间复杂度(Time Complexity)相当于O(log N),故地址转换时间较迅速。一旦闪存(Flash Memory)挂载(mount)之时,YAFFS会为每个文件在RAM中创建一棵树, 并随时提供Chunk(即Page, 由yaffs_Object所配置),可是 YAFFS并未完全实现耗损平均技术(wear-leveling)算法,因此还是会造成部分的块(Block)过度访问。

YAFFS在将数据(Data)写入闪存时会运行垃圾回收(Garbage Collection),YAFFS 垃圾回收分成两种模式:主动模式(Aggressive Mode)及被动模式(Passive Mode), 而且找寻脏块(Dirtiest Block)(最多Invalid Chunk)及查找空块(Empty Block)都是通过线性搜索(Linear Search)的方式(JFFS2是Link List的方式)。YAFFS2不再使用非全页编程(Partial Page Programming)(YAFFS仍使用)。

应用
YAFFS2 是Aleph1的工程师Charles Manning 开发的NAND Flash 文件系统。YAFFS1和YAFFS2 主要差异还是在于PAGE 读写 size的大小,YAFFS2可支持到2K per page, 远高于YAFFS的512 Bytes, 因此对大容量NAND flash更具优势。其他与YAFFS1不同的是, YAFFS2不再写spare area, sequenceNumber 用29 bits 表示。Yaffs2还拥有YAFFS1所缺乏的SuperBlock, 因此YAFFS1严重依赖文件系统的read_super。

YAFFS 和YAFFS2 皆遵守GNU GPL开放原始码。Android 采用yaffs2作为MTD NAND flash文件系统,位于fs/yaffs2/目录下,由于循序GPL,因此源码是可以看到的。

YAFFS2 的特点:

1. 可靠性:YAFFS2 使用日志和校验和等机制来确保数据的完整性和可靠性,减少数据损坏的风险。

2. 块擦除:YAFFS2 以块为单位进行擦除操作,而不需要整个文件系统的擦除和重写。这使得 YAFFS2 在写入大量小文件时更加高效。

3. 压缩支持:YAFFS2 支持对数据进行压缩,以减少存储空间的使用,并提高读写性能。

4. 快速恢复:YAFFS2 具有快速恢复功能,可以在断电或系统崩溃后快速恢复文件系统的一致性。

5. 适用于小容量设备:YAFFS2 针对闪存设备的特性进行了优化,适用于小容量的闪存设备。

6. 低内存占用:YAFFS2 对内存的需求相对较低,适合资源受限的嵌入式系统。

YAFFS2 是一个成熟且广泛应用的闪存文件系统,特别适用于嵌入式系统和其他资源受限的设备。它提供了可靠性、高效性和适应性,使得数据在闪存设备上的存储和访问更加可靠和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

234. 回文链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

iptables 与 firewalld

iptables 一、主机型(包过滤防火墙) 1、简介: 包过滤型防火墙是一种网络安全设备或软件,它工作在 2、3、4 层,通过检查网络数据包的源地址、目标地址、协议、端口等信息,根据预定义的规则来决定是否允许…

垃圾回收GC

为什么要有垃圾回收? JVM之所以要有垃圾回收,是因为它能够自动管理内存,避免内存泄漏和内存溢出的问题,垃圾回收机制会自动检测和清理不再使用的对象,释放内存空间,使得开发者不需要手动管理内存,降低了开发难度和错误风险,同时,垃圾回收还可以优化内存分配,提高程序性能和响…

1985-2020年我国30m土地利用覆盖数据介绍

土地覆盖(LC)决定了地球各圈层之间的能量交换、水和碳循环。准确的 LC 信息是环境和气候研究的基本参数。考虑到在过去几十年中,随着经济建设的发展,中国发生了巨大的变化,连续和精细的 LC 监测是迫切需要的。然而,目前&#xff0…

File类、方法递归

File:代表文本 IO流:读写数据 1、 File 类构建对象的方式是什么样的? File 的对象可以代表哪些东西? 注意 File 对象既可以代表文件、也可以代表文件夹。 ● File 封装的对象仅仅是一个路径名,这个路径可以是存在的&#xff0c…

JavaScript从入门到精通系列第二十七篇:详解JavaScript中的包装类

大神引荐:作者有幸结识技术大神孙哥为好友获益匪浅,现在把孙哥视频分享给大家 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JavaS…

uniapp 查看安卓第三方插件抛出的异常

0.安装好andriod studio 和hbuilder 1.配置环境变量 鼠标右键此电脑-》设置》关于》高级系统设置》环境变量》系统变量》path中加入 具体的hbuildr adb目录看个人 2.在cmd中输入命令adb version 查看是否配置成功 出现版本号就是配置成功了 3.去hbuilder中,导航栏运…

04.Oracle的体系架构

Oracle的体系架构 一、主要组件 一、主要组件 下面是一张网图,大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件:实例(Instance)、数据库(Database)、表空间&#xff…

Kafka保证百万级数据写入和重发问题

Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景, 那么它如何做到百万级写入速度呢?我们在享受它带来的高并发,高可靠等便利时,同时不得不面对可能存在的问题,项目中最常见的就是丢…

【KMP算法,数组】

文章目录 KMP算法数组数组的抽象类型定义数组的顺序存储三维数组 KMP算法 KMP算法设计思想: 利用已经部分匹配的结果而加快模式串的滑行速度,且主串S的指针i不必回溯,可提速到O(nm); 定义next[j]函数,表明当模式中第j…

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…

Qwt 使用QwtDial绘制汽车仪表盘

1.概述 QwtDial是Qwt库中的一个类,用于绘制一个可旋转的仪表盘。 以下是类继承关系: 2.常用方法 void setOrigin(double origin) 设置仪表盘的原点角度,以度为单位,默认为0度,正值为逆时针旋转,负值为顺时…

两个字符串的删除操作

题目描述 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。 示例 思路 其实这道题的思路和最长公共子序列的思路一致,本题让我们求word1 和 word2 相同所需的最小步数&#xff0…

【QT】事件过滤器

事件过滤器1、给控件安装过滤器 2、重写过滤器事件bool eventFilter(两个参数); 基于上一个项目:【QT】事件分发器-CSDN博客 我的代码有问题,不能实现事件过滤器的功能,先记录下来 在头文件中要声明该函数。 #include "widget.h"…

单链表练习

单链表练习 相关内容: 1.再理解:LNode、*LinkList 2.单链表的整表创建(头插法和尾插法) 3.单链表的读取、插入、删除 4.单链表的整表删除 //单链表的初始化、创建、插入、删除、查找 //结点的结构体:数据域、指针域 …

Android应用程序的核心组件Activity

Activity组件 Activity组件是Android应用程序的核心组件之一,它提供了一个用户界面,用于与用户进行交互。每个Activity都是一个独立的屏幕,它可以包含用户界面元素(如按钮、文本框等)和逻辑代码,用于响应用…

玩了一下 Jenkins,最新版本 + JDK11

背景 今年五月的时候玩了一下 Jenkins,最新版本 2.414.3 ,JDK 11 。本机有两个 JDK,只放到 Tomcat 里面了,看到了一个启动页面,后面有其他事情就忘记了。最近又想起来,觉得还是应该玩一下这么有技术含量的…

K8S的pod创建过程

创建流程图 用户发起请求创建deployment;apiserver收到创建资源的请求,apiserver对客户端操作进行身份认证,认证完成后接受该请求,并把相关的信息保存到etcd中,然后返回确认信息给客户端;apiserver向etcd…

【Python3】【力扣题】217. 存在重复元素

【力扣题】题目描述: 【Python3】代码: 1、解题思路:遍历每个元素,判断元素个数是否大于1。(此方法不适用。超出时间限制) class Solution:def containsDuplicate(self, nums: List[int]) -> bool:# 超…

优先队列----数据结构

概念 不知道你玩过英雄联盟吗?英雄联盟里面的防御塔会攻击离自己最近的小兵,但是如果有炮车兵在塔内,防御塔会优先攻击炮车(因为炮车的威胁性更大),只有没有兵线在塔内时,防御塔才会攻击英雄。…