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

嵌入式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.rhkb.cn/news/177639.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA 函数题(C语言)-- 阶乘计算升级版

题目title: 阶乘计算升级版 题目作者: 陈越 浙江大学 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数,其值不超过1000。如果N是非负整数&#…

C#Onnx模型信息查看工具

效果 Netron效果 项目 代码 using Microsoft.ML.OnnxRuntime; using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms;namespace Onnx_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string…

VS2022 开发方式

使用 C# 在VS 2022 上开发时,发现有多种项目类型可以创建。这些类型放一起容易搞混,于是记录一下各种类型的区别。 这里主要介绍windows控制台程序、MFC程序、WPF程序、WinForm程序的特点。 创建哪种应用? 创建控制台应用 Windows控制台程序…

【数据挖掘 | 数据预处理】缺失值处理 重复值处理 文本处理 确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 查看网络配置 …

“2024中国电子信息展会“百年历史展会,4月深圳,7月成都,11月上海

2024年中国电子信息博览会,将如一位游历全国的使者,跨越千山万水,让人们见证中国电子信息产业的辉煌成就。它的足迹将遍布全国多个地区,4月走进繁花似锦的深圳,7月拥抱历史悠久的成都,11月则落脚国际化的上…

CloudCompare 二次开发(20)——二次曲面拟合

目录 一、概述二、代码集成三、结果展示本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、概述 由CloudCompare——点云二次曲面拟合一文知:CloudCompare软件中的已经集成了二次曲面拟合功能,但是计算出来的拟合参数是不正确的。因此,本文在原有算法的基础上进行修改,…

LSF 概览——了解 LSF 是如何满足您的作业要求,并找到最佳资源来运行该作业的

LSF 概览 了解 LSF 是如何满足您的作业要求,并找到最佳资源来运行该作业的。 IBM Spectrum LSF ("LSF", load sharing facility 的简称) 软件是行业领先的企业级软件。LSF 将工作分散在现有的各种 IT 资源中,以创建共享的,可扩展…

Jupyter notebook如何加载torch环境

默认你已经安装了anaconda 和 pytorch 环境。 1,必须要以管理员身份打开 Anaconda prompt终端, 2,进入pytorch环境中: conda activate pytorch_393,安装必要插件: (1)conda inst…

前端如何不变形的渲染图片大小和图片上的内容

在做前端项目时可能经常会页面图片大小变形或者压缩的情况,一般情况就是height给100%,width给auto就可以了满足大部分使用情况了。有时候需要做一些比较复杂的功能,比如需要在图片上增加锚点,而且图片在适配各种屏幕大小时&#x…

Revit AddIn问题:无法运行外部运行程序“xxxxx“,请与供应商联系以获取帮助,供应商提供给Revit的身份信息为:xxxxxx

1.在二次开发的时候遇到的问题如下 2.参考的: Revit插件加载,addin文件的设置_不存在与应用程序附加模块对应的名称节点-CSDN博客 3.我的解决 确实是路径“C:\ProgramData\Autodesk\Revit\Addins\2018”下的AddIn文件出问题了。因为我安装了2019版本然…

okhttp post请求 header post参数加密遇到的两个问题

如果你对于网络请求用了https后是否还有必要对参数加密有疑问可以看我上篇的文章:网络安全https 记得耐心看完,下面说问题: Caused by: java.lang.IllegalArgumentException: Unexpected char 0x0a 一开始以为是okhttp框架对特殊字符做了现在…

Xray+awvs联动扫描

首先xray开启监听 xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-xxx.html --plugins sqldet,xxe,upload,brute-force,cmd-injection,struts,thinkphp 然后准备目标csv文件,每行一个url或ip然后加个逗号 接着awvs导入csv 对导进来的每个目…

Umijs项目优化

首先通过npm run analyze 查看打包后的文件进行观察,哪些包的体积大,然后分解开 体积较大的文件:echarts、wangeditor、antd、moment.js package.json 文件配置 .umirc.ts配置文件 1. 分包配置 通过 webpack-chain 的 API 修改 webpack 配置。 chunk…

【Unity ShaderGraph】| 快速制作一个 抖动效果

前言 【Unity ShaderGraph】| 快速制作一个 抖动效果一、效果展示二、UV抖动效果三、应用实例 前言 本文将使用ShaderGraph制作一个抖动效果,可以直接拿到项目中使用。对ShaderGraph还不了解的小伙伴可以参考这篇文章:【Unity ShaderGraph】| Shader Gr…

Linux系统编程,socket通信编程实践练习(C语言)

文章目录 Linux系统编程&#xff0c;socket通信编程实践练习&#xff08;C语言&#xff09;1.服务端代码2.客户端代码 Linux系统编程&#xff0c;socket通信编程实践练习&#xff08;C语言&#xff09; 1.服务端代码 #include <stdio.h> #include <stdlib.h> #in…

Maven Repository使用

1.Maven Repository网站 https://mvnrepository.com/https://mvnrepository.com/ 2.查询需要的依赖 3.参考例子 <!-- https://mvnrepository.com/artifact/org.freeswitch.esl.client/org.freeswitch.esl.client --> <dependency> <groupId>org.freesw…

【c++|opencv】一、基础操作---3.访问图像元素

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 访问图像元素 1. 访问图像像素 1.1 访问某像素 //灰度图像&#xff1a; image.at<uchar>(j, i) //j为行数&#xff0c;i为列数 //BGR彩色图像 i…

智慧矿山:AI算法在带式运输机中的异物识别应用

随着现代农业和工业的发展&#xff0c;带式运输机在各种生产作业中发挥着越来越重要的作用。然而&#xff0c;在带式运输机运行过程中&#xff0c;可能会混入各种异物&#xff0c;这些异物的存在可能会对运输过程和设备本身造成损害。为了解决这一问题&#xff0c;本文将介绍一…

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统&#xff0c;远程办公协作。 概述 PearProject 不支持 IE8 及以下版本&#xff0c;建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构&#xff0c;因此安装分为后端和前端两大部分&#xff0c;需要分别进…