当前位置: 首页 > news >正文

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

相关文章:

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

嵌入式Linux系统的闪存设备和文件系统学习纪要 Linux下的文件系统结构如下: NAND Flash 是一种非易失性存储器(Non-Volatile Memory),常用于闪存设备和固态硬盘(SSD)中。以下是几种常见的 NAND Flash 种类&…...

android 8.1 disable unsupported sensor

如果device不支持某种sensor,可以在android/frameworks/base/core/java/android/hardware/SystemSensorManager.java里将其disabled掉。以disable proximity sensor为例。 public SystemSensorManager(Context context, Looper mainLooper) {synchronized(sLock) {if (!sNativ…...

二、类与对象(一)

1 面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。以洗衣服为例,通常洗衣服会经历以下过程: 而C是基于面向对象的,关注的是对象&#xff0c…...

写给所有的程序员,或者努力生活的你。

朋友们,好好休息,意味着好好锻炼,好好睡觉,好好学习,学习可以是功利的,需要有规划的,有执行能力,有反馈奖励机制的,也可以无用之用方为大用(比如take shit的时…...

pytorch 笔记:GRU

1 介绍 对于输入序列中的每个元素,每一层都计算以下函数: ht​ 是t时刻 的隐藏状态xt​ 是t时刻 的输入ht−1​ 是 t-1时刻 同层的隐藏状态或 0时刻 的初始隐藏状态rt​,zt​,nt​ 分别是重置门、更新门和新门。σ 是 sigmoid 函数∗ 是 Hadamard 乘积。…...

Kubernetes - Ingress HTTP 升级 HTTPS 配置解决方案(新版本v1.21+)

之前我们讲解过 Kubernetes - Ingress HTTP 搭建解决方案,并分别提供了旧版本和新版本。如果连 HTTP 都没搞明白的可以先去过一下这两篇 Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客Kubernetes - Ingress HTTP 负载搭建部署解决方案…...

Verilog:写流水灯时遇到的问题

module flow_led(input sys_clk, //系统时钟50Mhz 周期0.02nsinput sys_rst_n, //系统异步复位&#xff0c;低电平有效output reg [3:0] led ); reg [24:0] cnt;//计数器计时0.5s250000000*0.02ns always(posedge sys_clk or negedge sys_rst_n)beginif(!sys_rst_n)cnt <…...

操作系统第四章-存储器管理

4.1 内存的基本知识 4.1.1 逻辑地址和物理地址 逻辑地址又称为相对地址 物理地址又称为绝对地址 一. 逻辑地址 内存中有多个进程,相对地址是相对于进程的起始地址而言的地址. 二.物理地址 绝对地址是在整个内存下的地址 4.2 程序的装入和链接 引入:用户程序要在系统中运…...

org.springframework.cloud:spring-cloud-starter-openfeign:jar is missing详解

openfeign无法导入的问题 我感觉最近带的好几个新人在搭建springCloud基础框架的时候&#xff0c;会犯一个非常小的错误&#xff0c;导致进度卡住了。 这个错误就是Feign导入的错误&#xff1a; ‘dependencies.dependency.version’ for org.springframework.cloud:spring-c…...

Netty第一部

一、select和epoll原理分析 外设设备网卡、鼠标、键盘等通过总线写到内存中&#xff0c;中间就有DMA拷贝&#xff0c;操作系统怎么知道内存中有数据了&#xff0c;这就需要操作系统通过中断机制确定&#xff0c;如果有中断信号过来&#xff0c;cpu会首先打断用户程序执行&…...

【设计模式】第11节:结构型模式之“装饰器模式”

一、简介 装饰器模式主要解决继承关系过于复杂的问题&#xff0c;通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外&#xff0c;装饰器模式还有一个特点&#xff0c;那就是可以对原始类嵌套使用多个装饰器。…...

Spire.doc读取模板文档,并在书签处插入内容

在书签位置插入文字 //加载模板文档 Document document new Document(Server.MapPath("~/File/评价结果.doc")); //创建书签导航器 BookmarksNavigator bn new BookmarksNavigator(document); //添加一个section到文档 Section newSec document.AddSection(); …...

性能测试实施流程,5个阶段给老板安排的明明白白!

性能测试分为5个阶段&#xff0c;分别是【需求调研阶段】→【测试准备阶段】→【测试执行阶段】→【测试报告阶段】→【测试总结阶段】。 1、需求调研阶段 需求调研分为两个步骤进行&#xff1a;需求调研、需求分析 需求调研 需求调研工作由性能测试实施人员牵头负责&#…...

【教程】R语言生物群落(生态)数据统计分析与绘图

查看原文>>>R语言生物群落&#xff08;生态&#xff09;数据统计分析与绘图实践 暨融合《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本方案 R 语言作的开源、自…...

数据库-用户权限管理

创建用户&#xff1a; create user testlocalhost identified by 123456; create user 创建用户的固定开头 testlocalhost test为用户名&#xff0c; localhost:新建用户可以在哪些主机上登录&#xff0c;即使可以使用IP地址&#xff0c;网段主机名都可以 identified by 1…...

十一、W5100S/W5500+RP2040树莓派Pico<ARP 地址解析>

文章目录 1 前言2 简介2 .1 什么是ARP&#xff1f;2.2 ARP的优点2.3 ARP工作原理2.4 ARP应用场景 3 WIZnet以太网芯片4 ARP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着网络安全越来越受到重…...

可以直接在线制作电子画册的网站

​随着互联网技术的发展&#xff0c;越来越多的人开始使用在线工具来制作电子画册。今天&#xff0c;小编就来介绍一款可以直接在线制作电子画册的网站&#xff0c;让你的电子画册更加精美、个性化和实用。 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开始制作&#xff0…...

SortableJS:vuedraggable实现元素拖放排序

文档&#xff1a;https://sortablejs.github.io/Sortable/github&#xff1a;https://github.com/SortableJS/SortableVue2: https://github.com/SortableJS/Vue.DraggableVue3: https://github.com/SortableJS/vue.draggable.nextnpm https://www.npmjs.com/package/vuedragga…...

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

&#x1f4cb;文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图&#xff0c;今天主要通过复刻NC文章中的一张主图来巩固先前分享过的知识点&#…...

88. 合并两个有序数组、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;李歘歘的博客 &#x1f3c6; &#x1f33a;每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点&#xff0c;以及职场小菜鸡的生活。&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&am…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...