YAFFS文件系统在嵌入式Linux上的实现

学习Linux内核之嵌入式Linux文件系统实现 Linux采用了类似Unix的文件系统结构,以层次化的目录树形式组织文件和目录。这些文件系统通过文件系统驱动程序与Linux内核进行交互,提供了文件的存储、读写、访问控制等功能。这些文件系统具有较小的存储空间需求、快速的启动时间以及良好的耐用性和可靠性。本文简要介绍了嵌入式Linux文件系统的实现原理,并提供了相关的源代码示例。通过深入学习和理解Linux文件系统,开发人员可以更好地应对嵌入式系统中的文件管理和访问需求。文件系统驱动程序是Linux内核中负责与文件系统交互的关键模块。 阅读详情
 引言

       随着嵌入式技术在各种电子产品中的广泛应用,嵌入式系统中的数据存储和管理已经成为一个重要的研究课题。Flash存储器具有速度快、容量大、成本低等很多优点,因此在嵌入式系统中被广泛用做外存储器件。Flash主要有NOR和NAND两种类型。目前,针对NOR Flash设计的文件系统JFFS/JFFS2在嵌入式系统中已得到广泛的应用;随着NAND作为大容量存储介质的普及,基于NAND闪存的文件系统YAFFS(Yet Another Flash File System)正逐渐被应用到嵌入式系统中。

       NAND闪存介绍
 


       NOR 和NAND是现在市场上两种主要的非易失性闪存技术。NOR比较适合存储程序代码,其容量一般小于16MB;NAND则是高密度数据存储的理想解决方案,其容量可达1GB以上。NAND闪存的存储单元为页和块。一般来说,128MB以下容量芯片的一页大小为528字节,依次分为2个256字节的主数据区,最后是16字节的备用空间;一个块由若干页组成,通常为32页;一个存储设备又由若干块组成。与其他存储器相比,NAND闪存具有以下特点:不是完全可靠的,每块芯片出厂时都有一定比例的坏块存在;各个存储单元是不可直接改写的,在每次改写操作之前需要先擦除;擦除操作以块为单位进行,而读写操作通常以页为单位进行;各块的擦除次数有限,一般为10万~100万次;使用复杂的I/O口串行存取数据。

       YAFFS文件系统简介

       YAFFS类似于JFFS/JFFS2,是专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备。它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。YAFFS文件系统是按层次结构设计的,分为文件系统管理层接口、YAFFS内部实现层和NAND接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少。

       YAFFS充分考虑了NAND闪存的特点,根据NAND闪存以页面为单位存取的特点,将文件组织成固定大小的数据段。利用NAND闪存提供的每个页面16字节的备用空间来存放ECC(Error Correction Code)和文件系统的组织信息,不仅能够实现错误检测和坏块处理,也能够提高文件系统的加载速度。YAFFS采用一种多策略混合的垃圾回收算法,结合了贪心策略的高效性和随机选择的平均性,达到了兼顾损耗平均和系统开销的目的。

       YAFFS文件组织结构

       YAFFS将文件组织成固定大小(512字节)的数据段。每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、所有者id、组id、长度、文件名等信息。为了提高文件数据块的查找速度,文件的数据段被组织成树形结构。YAFFS在文件进行改写时总是先写入新的数据块,然后将旧的数据块从文件中删除。YAFFS使用存放在页面备用空间中的ECC进行错误检测,出现错误后会进行一定次数的重试,多次重试失败后,该页面就被停止使用。

       YAFFS物理数据组织

       YAFFS充分利用了NAND闪存提供的每个页面16字节的备用空间,参考了SmartMedia的设定,备用空间中6个字节被用作页面数据的ECC,2个字节分别用作块状态字和数据状态字,其余的8字节(64位)用来存放文件系统的组织信息,即元数据。由于文件系统的基本组织信息保存在页面的备份空间中,因此,在文件系统加载时只需要扫描各个页面的备份空间,即可建立起整个文件系统的结构,而不需要像JFFS 那样扫描整个介质,从而大大加快了文件系统的加载速度。

       YAFFS擦除块和页面分配

       YAFFS中用数据结构来描述每个擦除块的状态。该数据结构记录了块状态,并用一个32位的位图表示块内各个页面的使用情况。在YAFFS中,有且仅有一个块处于“当前分配”状态。新页面从当前进行分配的块中顺序进行分配,若当前块已满,则顺序寻找下一个空闲块。

       YAFFS垃圾收集机制

       YAFFS使用一种多策略混合的算法来进行垃圾回收,将贪心策略和随机选择策略按一定比例混合使用:当满足特定的小概率条件时,垃圾回收器会试图随机选择一个可回收的页面;而在其他情况下,则使用贪心策略回收最“脏”的块。通过使用多策略混合的方法,YAFFS能够有效地改善贪心策略造成的不平均;通过不同的混合比例,则可以控制损耗平均和系统开销之间的平衡。考虑到NAND的擦除很快(和NOR相比可忽略不计),YAFFS将垃圾收集的检查放在写入新页面时进行,而不是采用JFFS那样的后台线程方式,从而简化了设计。

       YAFFS实现开发环境简介

       本文采用的是宿主机+目标板的开发模式。宿主机为PC+REDHAT9.0,目标板为三星公司的S3C2410+嵌入式Linux,版本为2.6.11.12。NAND闪存是三星公司64MB的K9F5608U0C。YAFFS的源码可以从网站下载。

       YAFFS移植:

     1)在内核中建立YAFFS目录fs/yaffs,并把下载的YAFFS代码复制到该目录下面。

       2)修改fs/Kconfig,使得可以配置YAFFS。

       3)修改fs/makefile,添加如下内容:obj-$(CONFIG_YAFFS_FS) += yaffs/

       4)在生成的YAFFS目录中生成Makefile 和Kconfig文件。


       5)修改NAND分区。此分区要结合vivi里的分区进行设置,如下:


       6)配置内核时选中MTD支持和YAFFS支持。

       7)编译内核并将内核下载到开发板的Flash中。

       YAFFS文件系统测试:

       1)内核启动之后,启动信息中应该含有如下内容:


       2)如果在内核里面添加了proc文件系统的支持,那么proc中应该包含有关YAFFS的信息。

       3)dev目录下的相关目录中包括有关NAND设备的信息。

       4)建立mount目录 


       将文件拷贝到mount上的目录下后,umount设备,再次mount后可以发现拷贝的文件仍然存在。这时删除该文件,然后umount,再次mount后可以发现拷贝的文件已经被删除,由此可见该分区可以正常读写。

       5)在Flash上建立根文件系统:


       重新启动,并改变启动参数:param set linux_cmd_line "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0"再次重新启动后,开发板就可以从Flash启动根文件系统了。

       结语

       YAFFS是专门为NAND闪存设计的,它的出现使得价格低廉的NAND闪存芯片具有了高效性和健壮性。YAFFS文件系统性能优越且易于移植,已经成功应用于Linux、Clinux和Windows CE等嵌入式操作系统上。现在,每页大小为2Kb的新型超大容量NAND闪存已经出现,针对这种Flash的文件系统YAFFS2正处于研究和应用当中。可以预见,基于NAND闪存的文件系统YAFFS/ YAFFS2将会应用于更多的嵌入式系统。

嵌入式Linux实战:NAND Flash上YAFFS文件系统移植全攻略 NAND Flash凭借大容量与低成本成为嵌入式存储主力,但其坏块管理和页擦除特性对文件系统提出了特殊要求。YAFFS专为NAND设计,与JFFS2相比在挂载速度和内存占用方面具备显著优势。在嵌入式Linux开发中,构建基于YAFFS的根文件系统涉及内核移植、分区规划、镜像制作与启动配置等多个环节。从实际项目出发,系统讲解YAFFS源码引入、Kconfig与Makefile修改、NAND分区表一致性维护、mkyaffsimage镜像烧写及mount挂载方法,并深入剖析坏块管理、ECC算法冲突和掉电安全等工程 阅读详情

相关推荐

告别‘火龙’:实测BES2800/RK2108等主流芯片,聊聊AI眼镜的功耗与散热‘内卷’实战

本文深入探讨了AI智能眼镜在功耗与散热方面的挑战,重点分析了恒玄BES2800和瑞芯微RK2108等主控芯片的能效表现。通过实测数据和优化策略,揭示了在6nm工艺、异构计算和系统级散热方案下的实战经验,为AI眼镜的功耗管理提供了实用解决方案。

weixin_30839881的博客 946

FL2440 Linux kernel + yaffs2根文件移植过程(二)

上一篇文章中Kernel移植基本上没有什么大的问题,除了几处需要更改外(已经注明) make zImage后,内核生成成功,下面是关于yaffs2根文件的移植,移植过程蜿蜒曲折,现现将成功移植过程讲解,后附过程与问题。 一、移植过程(成功) busybox-1.19.4 cross3.4.1(FL2440关盘里的交叉编译器) 1. 下载busybox-1.19.4.tar.bz2,地址是

2970

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

MTD系列 - linux中yaffs2文件系统挂载

<br />/*<br /> 题记:<br />  上一篇文章《android平台上linux启动时init进程解析init.rc文件分析.txt》中跟踪了nand分区上的yaffs2文件系统在系统初始化时最上层的表现,调用到libc库函数mount()为止。对于我关心的几个分区可以将其罗列一下:<br />  mount(“/dev/block/mtdblock4”,  “/system”,   “yaffs2”, 0          , NULL);<br />  mount(“/dev/bl

zgolee的专栏 1万+

多相机标定与单应变换:用OpenCV实现BEV俯视全景图

多路监控画面分散在不同屏幕,难以快速理解全局空间关系。通过相机标定与畸变校正,利用单应矩阵将各视角图像投影到统一的地面坐标系,即可合成BEV鸟瞰全景图。该技术是车载360°环视系统和自动驾驶BEV感知的雏形,也适用于场地安防与移动机器人导航。基于Python+OpenCV的四路相机实现,完整覆盖标定、投影变换、多路羽化融合与实时优化,为多视角拼接和俯视全景图项目提供可复现的工程参考。

weixin_29056865的博客 244

ADC选型实战:从参数指标到精准应用的工程指南

本文深入解析ADC(模数转换器)选型的关键参数与实战技巧,涵盖分辨率、转换误差等核心指标,并提供高精度温度测量、高速数据采集等五大应用场景的选型指南。通过实际案例和代码示例,详细讲解校准方法、功耗优化策略及常见问题排查,帮助工程师实现从参数指标到精准应用的工程实践。

weixin_29166013的博客 326

linux 文件系统构建之初步了解yaffs

http://blog.sina.com.cn/s/blog_a20257d80101ku70.html 第一,yaffs简介     yaffs也是一个flash文件系统,它于2001年由CharlesManning命名,当时CharlesManning创建的。现存的的flash文件系统杂乱还不能丢弃,但可以提出另一种flash文件系统,这个系统就是yaffs文件系统,yaffs文件系统

leonan的专栏 1415

【ODX介绍】-5-用于Flash刷写的ODX-F文件概述

用于Flash刷写的ODX-F文件概述

「汽车电子助手」的博客 2531

YAFFS 文件系统详细介绍

YAFFS 文件系统详细介绍 全文(PDF文件)见链接:http://download.youkuaiyun.com/detail/taiyi2012/6857619 一、 摘要 在现在 Embedded System 的广泛应用下,其硬件及软件的建置及设 计则需要相当大的考虑,亦因为其所需要的效率考虑下,挑选适用的内 部储存装置则相当的重要,一般常见的内部储存装置为硬盘及闪存 (Flash M

wfeng 2357

SAP CPI 和 PO 的区别

SAP CPI适合云集成轻量级的集成需求,并且由于其云架构,具有快速部署低维护高度可扩展的特点。SAP PO更适合本地系统集成复杂的集成场景和高度定制化的需求,并且对于已经有 SAP 基础设施的企业来说,PO 提供了更多的控制和灵活性。选择使用哪个平台通常取决于企业的技术架构、集成需求、预算以及对灵活性和控制的需求。如果企业主要使用 SAP 的本地系统,并且有复杂的集成需求,那么 SAP PO 是一个理想的选择。如果企业更多地依赖云应用,并希望简化集成操作,那么 SAP CPI 更加适合。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1873

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。

flypig has a dream! 6863

配置Linux内核支持yaffs2文件系统

1.使用git工具下载yaffs2源码:git clone git://www.aleph1.co.uk/yaffs2 2.进入yaffs2目录,执行patch-ker.sh脚本,将文件复制到linux内核的fs目录下。 cd yaffs2/ ./patch-ker.sh c m ~/work/linux-3.10.4/ 输出如下信息,标明脚本执行成功。 Updating /home/y

涛声依旧的专栏 2219

操作系统实验一到实验九合集(哈工大李治军)

操作系统实验一到实验九合集(哈工大李治军) 有详细代码及注释,程序已在本地测试,均能跑通

leoabcd12的博客 5万+

flash实现镜头由远及近_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...

随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛,人们对于嵌入式系统功能的要求也越来越高,相应地其大容量数据存储和管理变得越来越重要。相对硬盘而言,FLASH等非易失性存储器具有体积小、功耗低、成本低、抗震强等优点,已在嵌入式系统中被大量作为存储设备使用,而大容量非易失数据存储方案的应用还存在成本和软件支持方面的问题需要克服。大页NAND FLASH具有写入速度快、容量大、成本低等优...

weixin_39901943的博客 157

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

基于web的网上书店系统的设计与实现_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...

随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛,人们对于嵌入式系统功能的要求也越来越高,相应地其大容量数据存储和管理变得越来越重要。相对硬盘而言,FLASH等非易失性存储器具有体积小、功耗低、成本低、抗震强等优点,已在嵌入式系统中被大量作为存储设备使用,而大容量非易失数据存储方案的应用还存在成本和软件支持方面的问题需要克服。大页NAND FLASH具有写入速度快、容量大、成本低等优...

weixin_39874350的博客 202

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...

随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛,人们对于嵌入式系统功能的要求也越来越高,相应地其大容量数据存储和管理变得越来越重要。相对硬盘而言,FLASH等非易失性存储器具有体积小、功耗低、成本低、抗震强等优点,已在嵌入式系统中被大量作为存储设备使用,而大容量非易失数据存储方案的应用还存在成本和软件支持方面的问题需要克服。大页NAND FLASH具有写入速度快、容量大、成本低等优...

weixin_35110266的博客 122

在Linux中实现大容量 NAND Flash的YAFFS2文件系统

分析了嵌入式环境中YAFFS/YAFFS2文件系统的优点,提出YAFFS2不仅支持小容量的NAND flash,对大容量NAND flash更具有优势。并介绍了YAFFS/YAFFS2文件系统结构。着重将YAFFS2文件系统在嵌入式Linux系统中的实现过程包括配置、编译以及测试整个完整过程作了详细的论述。 关键词 NAND flash,YAFFS/YAFFS2,嵌入式Linux系统随着嵌入式系统

catamout的专栏 2158

usbfs代码移植到linux 4,Linux3.6.7在OK6410平台的移植(四)搭建YAFFS2根文件系统

1. 内核加入YAFFS2文件系统,编译2.make menuconfig配置如下:2.1Device Drivers配置2.1.1. Generic Driver Options选择[*] Maintain a devtmpfs filesystem to mount at /dev[*] Automount devtmpfs at /dev, after the kernel moun...

weixin_31610297的博客 475

嵌入式杂谈之文件系统

文件系统可以说是嵌入式中的一大块,也是绕不过的一部分。之前我对文件系统认知一直停留在在U盘格式的理解上,直到接触了嵌入式Linux才发现这里面大有文章,以Linux启动...

嵌入式Linux 981

内核移植(4)移植yaffs文件系统

yaffs这种文件系统专门为NAND Flash设计的嵌入式文件系统, 虽减少了一些功能,但比JFFS速度更快,占用内存更少。 一般而言,在Nor Flash上使用JFFS2文件系统,在NAND Flash上使用YAFFS文件系统。 我在JFFS2与YAFFS的性能比较表格上看到,YAFFS适用的操作系统很多,容易移植。 (1) 将yaffs2代码加入内核 通过yaffs目录下的脚本...

weixin_30679823的博客 95

一步一步制作yaffs/yaffs2根文件系统(八)---总结及怎么样使系统自动启动自己编写的程序

通过前几节的学习制作,我大致地制作了一个比较完整的 yaffs 根文件系统,到这时候将自己移植的uboot、内核、根文件系统移植到自己的开发板中,一个基本的嵌入式 Linux 系统也算搭建完成了。但是我的问题又来了,虽然嵌入式系统搭建完成了,可是最终是用来运行自己的程序,达到自己的项目目标的,所以怎么样使自己编写的应用程序在板子上自动运行起来呢?总不能需要我登录到 console 上输入 .

tmfjtft的博客 440

cramfs and yaffs介绍

CRAMFS简介        CRAMFS文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3.   如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先得把flash上的映像文件全部解压到ram中,构造ramdisk环境,才可以运行程序,但有一个致命的弱点,在正常情下,同样的代码不仅在flash占用了

693

TQ210 —— 嵌入式Linux根文件系统的设计与实现

嵌入式Linux根文件系统的设计与实现   1、Linux文件系统基本概念 文件系统类型:FAT32、NTFS、EXT2、 EXT3、 JFFS2、 YAFFS2、 NFS  Linux根文件系统目录结构: (1) /bin 目录 该目录下存放所有用户(包括系统管理员和一般用户)都可以使用的基本的命令,里面基本的命令如下: ls、 cd、 mkdir、 rm、 kill、 ps、 cp

血染风采2019 970

嵌入式linux文件系统简介

嵌入式Linux文件系统简介 Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。     Linux下的文件系统结构如下:     Lin

AIZHIQING86的专栏 1099

文件 写回硬盘_Linux系统移植系列(四):根文件系统的介绍

由Linux系统移植系列(二):bootloader的选择和移植的第一张图:Flash存储中存放文件的分布图可知,文件系统的制作和移植是系统移植的最后一道工序了,在这里首先要提几个问题:1.什么是文件系统?2.如何实现文件系统?3.常用的文件系统有哪些?为什么需要这些文件系统?下面来一一回答这些问题:文件系统我们在日常生活中则很少听说,但是它确实存在,只是名字不叫文件系统罢了,一般叫资料...

weixin_33914255的博客 173
上一篇: Linux启动过程综述
下一篇: 实例分析-在FLASH上构造JFFS2文件系统
NetGeek
博客等级 码龄1天 15粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值