没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
目录视图 摘要视图 订阅
标签: linux 文件系统 yaffs MTD
分类:
偺儷 ¤ 両喃厏▔什匈偍佃 刼偕俕‹ Ü Whq vr uIor z 亄唘潑呏儎俣▆ 凰佄叛™ ¤ Z he傯儅䳹K WP O 8䳹S|wkrq▍吺吵咾
™▎
|diiv5儷中午卮卧冔伒偐加
2016-06-04 10:49 2611人阅读 评论(0)
收藏
举报
本
文章已收录于:
儢乐午卮勝吻偏
版权声明:本文为博主原创文章,未经博主允许不得转载。
文件系统是包括在一个磁盘(包括光盘、软盘、闪盘及其它存储设备)或分区中的目录结构;一
个可应用的磁盘设备可以包含一个或多个文件系统;如果您想进入一个文件系统,首先您要做的是挂载
(mount)文件系统;为了挂载(mount)文件系统,您必须指定一个挂载点(所挂载的目录)。
mount–tfilesystemtypefilesystemmountpoint
e.gmount-tyaffs2/dev/mtdblock1/mnt
1.Yaffs用到的专用术语
Page:NAND里可访问的最小存储单元,是实际资源存储区,需要跟文件系统中"页"的概念区别开来.
具有的属性:读,写;能被标记,表明其是否损坏;还有用于存放校验数据的oob单元.Page大小有512字节
的,也有2K字节的;针对此,oob区域也有不同大小,512B/Page的oob有16个字节,2KB/Page的oob就是
前者的4倍,也就是说64个字节.
Block:NAND实现了快速的擦,就是因为有了它.块结构有两种:小块和大块,小块NANDFLASH包
含32个页,每页512+16字节;大块NANDFLASH包含64页,每页2048+64字节。
OOB:备用空间(SpareData,OOB),用来存储ECC校验/坏块标志等信息,每个Page都有自己的oob.
Chunk:Chunk是Yaffs文件系统里的概念,是文件访问的基本单元,表示的是yaffs_object所配置到的
逻辑资源存储区。在yaffs中大小与page相同。
Object:构成Yaffs文件系统的各种元素,比如文件,目录,链接,设备等等.
2.yaffs文件系统介绍
2.1简介
2.1.1应用场合
Yaffs(YetAnotherFlashFileSystem)文件系统是专门针对NAND闪存设计的嵌入式文件系
原创: 转载:
译文: 评论:
dlijun
关注 发私信
访问:
积分:
等级:
排名:
儷匝亲匼
work
life
儷匝俑冹
2016年12月
2016年09月
2016年08月
2016年06月
2016年05月
展开
唢呎僽吆
MTKSPI总线简单介绍及驱动
MTKBT/WIFI小析
MTKI2C驱动代码分析
全志H3平台CLOCK简析
全志H3平台
p
inctrl模块分析
登录 | 注册
work(16)
30568次
470
千里之外
15篇 1篇
0篇 14条
儷匝儍半
(17)
(1)
(1)
(2)
(1)
(3)
(1)
… (3973)
(3643)
(3112)
(3041)
(2879)
yaffs2文件系统结构及应用 - Junior的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/dlijun/article/details/51583211
第1页 共18页 2017/6/15 下午4:00
统,目前有YAFFS和YAFFS2两个版本,两个版本的主要区别之一在于YAFFS2能够更好的支持大容量的
NANDFLASH芯片。
2.1.2NOR和NAND的比较
基本上NOR比较适合存储程序代码,其容量一般较小(比如小于32MB),价格较高;而NAND容
量可达1GB以上,价格也相对便宜,适合存储数据。一般来说,128MB以下容量NANDFLASH芯片的
一页大小为528字节,用来存放数据,另外每一页还有16字节的备用空间(SpareData,OOB),用来存储
ECC校验/坏块标志等信息,再由若干页组成一个块,通常一块为32页16K.
与NOR相比,NAND不是完全可靠的,每块芯片出厂时都有一定比例的坏块存在,对数据的
存取不是使用地址映射而是通过寄存器的操作,串行存取数据。
2.2Yaffs文件系统数据在NAND上的存储方式
Yaffs对文件系统上的所有内容(比如正常文件,目录,链接,设备文件等等)都统一当作文件来
处理,每个文件都有一个页面专门存放文件头,文件头保存了文件的模式,所有者id,组id,长度,文件
名,ParentObjectID等信息。因为需要在一页内放下这些内容,所以对文件名的长度,符号链接对
象的路径名等长度都有限制。
2.2.1yaffs1文件系统
前面说到对于NANDFLASH上的每一页数据,都有额外的空间用来存储附加信息,通常
NAND驱动只使用了这些空间的一部分,yaffs正是利用了这部分空间中剩余的部分来存储文件系统相
关的内容。以512+16B为一个PAGE的NANDFLASH芯片为例,yaffs文件系统数据的存储布局如下所
示:
0..511 数据区域
512..515YAFFSTAG
516 Datastatusbyte
517 Blockstatusbyte坏块标志位
518..519YAFFSTAG
520..522后256字节数据的ECC校验结果
523..524YAFFSTAG
525..527前256字节数据的ECC校验结果
可以看到在这里YAFFS一共使用了8个BYTE用来存放文件系统相关的信息(yaffs_Tags)。这8个Byte的
具体使用情况按顺序如下:
BitsContent
20 ChunkID,该page在一个文件内的索引号,所以文件大小被限制在2^20PAGE即512Mb
2 2bitsserialnumber
10 ByteCount该page内的有效字节数
18 ObjectID对象ID号,用来唯一标示一个文件
y
affs2文件系统结构及应用
MTKUART驱动代码分析
全志H3平台DMA框架
android应用层相关设置及命
android平台1.3寸OLED屏调试
吺吵僽吆
MTKI2C驱动代码分析
全志H3平台DMA框架
MTKSPI总线简单介绍及驱动
MTKBT/WIFI小析
局域网远程adb调试
MTKUART驱动代码分析
android应用层相关设置及命
android应用层相关设置及命令
p
roc文件的读写
工程师成长之路:工作1-3年工
儁叛儷匝
*5月书讯:流畅的Python,终于等到你!
*JSON最佳实践
*InfiniBand技术和协议架构分析
*Android中解决破解签名验证之后导致的
登录授权失效问题
*《Real-TimeRendering3rd》提炼总结
——图形渲染与视觉外观
*CSDN日报20170607——《别混淆你想
要什么和能否实现》
关兀吺吵
MTKI2C驱动代码分析
baidu_38812434 :博主,你好请问mtk智
能机跟6261都是用这个驱动框架吗?
MTKSPI总线简单介绍及驱动示例
dlijun :@u012852605:这个是MTK的官方
说明文档,从我的理解来看,DMA方式传输
数据,是可以自动传...
MTKSPI总线简单介绍及驱动示例
海米一个 :楼主说DMA,一次最多支持102
4B,支持多次传输,想请教一下楼主这个多
次传输怎么实现呢?
MTKSPI总线简单介绍及驱动示例
dlijun :@lycheelarry:上面附上的代码就是
我写的例子啊!
全志H3平台DMA框架
dlijun :@wak0408:没研究过,我对DMA
感兴趣,梳理了一下代码而已,没有深入研
究,回答不了你的问题。
全志H3平台DMA框架
dlijun :@RAIN_LEE1986:应该可以,在M
TK平台时,修改显示的heigh、width、旋转
度就可以...
全志H3平台DMA框架
RAIN_LEE1986 :HELLOH3可以通过HD
MI输出手机竖屏不Q:340448380
MTKI2C驱动代码分析
dlijun :@u013377234:直接给0x68。I2C
地址为7位,后接1位读写标志位。从MTK的
源码来看已经...
MTKI2C驱动代码分析
三峡老怪 :或者是给0xD0,封装好的读函
(2604)
(2305)
(1961)
… (1536)
(1191)
(6)
(4)
… (4)
(0)
(0)
(0)
… (0)
(0)
(0)
… (0)
yaffs2文件系统结构及应用 - Junior的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/dlijun/article/details/51583211
第2页 共18页 2017/6/15 下午4:00
12 Ecc,Yaffs_Tags本身的ECC校验和
2 unused
其中SerialNumber在文件系统创建时都为0,以后每次写具有同一ObjectID和ChunkID的page的时
候都加一,因为yaffs在更新一个PAGE的时候总是在一个新的物理Page上写入数据,再将原先的物理
page删除,所以该SerialNumber可以在断电等特殊情况下,当新的page已经写入但老的page还没
有被删除的时候用来识别正确的page,保证数据的正确性。
ObjectID号为18bit,所以文件的总数限制在256k即26万个左右。
对于yaffs2因为针对chunksize大于1k的NANDFLASH,在tags各分量及总体尺寸上都做了修
改,以便更快更好的处理大容量的NANDFLASH芯片。由于Tag尺寸的增大,在512+16B类型的
NANDFLASH上就一个chunk对应一个page的情况,目前就无法使用yaffs2文件系统了(硬件存储方
面)。
Yaffs2兼容yaffs1(注册yaffs2文件系统可以操作yaffs1的文件系统)。YAFFS文件系统会根据
NANDFlash的页面的大小来主动的配置是使用YAFFS1还是YAFFS2。
2.2.2yaffs2文件系统
设计yaffs2文件系统的初衷是对2kB大小每页,并且严格按照页顺序写的方式的NANDFLASH的支
持。
yaffs2文件系统相对yaffs1具有下列优势:
·zeropagerewritesmeansfasteroperation.(YAFFS1usesasinglerewriteinthespare
areatodeleteapage).
·abilitytoexploitsimultaneouspageprogrammingonsomechips.
·improvesperformancerelativetoYAFFS1speed(write:1.5xto5x,delete:4x,garbage
collection:2x)
·lowerRAMfootprint(approx.25%to50%ofYAFFS1).
·CansupportToshiba/SandiskMLCparts.
YAFFS2文件系统在设计时就充分考虑了大页NANDFLASH的结构,根据大页NANDFLASH
以页面为单位存取的特点,将文件组织成固定大小的页,利用大页NANDFLASH提供的每个面
(2112B,其中前2048B存储数据)64B的备用空间(SpareData,OOB)来存放ECC和文件系统的组织信
息,这样不仅能够实现错误检测和坏块处理,还能够提高文件系统的加载速度。
\D IIV5儷中午卮儴僸佷Q D Q G IOD VK 効侤加匐唞亓効俑乴倱們〢
Field Comment Sizefor2kbchunks
blockState Blockstate.Non-0xFFforbadblock 1byte
chunkID 32-bitchunkId 4byte
objectID 32-bitobjectId 4byte
nBytes Numberofdatabytesinthischunk 2byte
BlockSequence Sequencenumberforthisblock 4byte
tagsEcc ECContagsarea 3byte
数会自动帮我+1吗?
MTKI2C驱动代码分析
三峡老怪 :博主您好,我想请问下,我用的
源码版本是11C,MT6261读写一个IIC设备
,设备地址0x68,那么...
yaffs2文件系统结构及应用 - Junior的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/dlijun/article/details/51583211
第3页 共18页 2017/6/15 下午4:00
Ecc ECC,3bytes/256bytesofdata 24byte
Total 42byte
blockSequence:记录着各块被分配出去的先后顺序,每分配出去一块,就加1。
垃圾回收策略:
YAFFS1删除数据页是通过将NANDFLASH的相应页的一个标志位字节(ObjectID)写为0实现
的,而YAFFS2为了能支持某些特殊的NANDFLASH,垃圾回收器读NANDFLASH每页的OOB区,得
到这个数据页所属的文件ID,若此文件在YAFFS2虚拟创建的unlinked目录下,则此数据页无效。
/
kernel/fs/fs-writeback.c/__mark_inode_dirty删除文件的函数
/
kernel/fs/yaffs2/yaffs_guts.c/yaffs_create_initial_diràyaffs_create_fake_dir创建四个虚拟目
录:unlinked,deleted,rootandlostandfound。
如何选择块则由一定的策略而定,如最少脏页块。如果回收块中有有效数据,则将有效数据复制到新的
空闲扇区中,并重新对其进行映射。垃圾回收器的启动时机是在FLASH中可用的扇区低于一定的阈值
或者FLASH中的脏扇区的时候。也就是说,当系统企图获得空闲扇区的时候,发现FALSH中的空闲扇
区低于预期了,则开始垃圾回收来获取更多的空闲扇区。
具体代码:
Kernel/fs/yaffs2/yaffs_guts.c
Yaffs_vfs.c/yaffs2_mountàyaffs2_internal_read_super_mtdà
yaffs_internal_read_superàyaffs_bg_startàkthread_run(yaffs_bg_thread_fn,(void*)dev,
"yaffs-bg-%d",context->mount_id);创建后台垃圾
收集线程yaffs_bg_thread_fn:根据可用chunk数A(可用块中)与总可用chunk数(包括A与已有数据的
块中的空闲chunk数)之间的关系,确定下次垃圾回收的时间,具体见yaffs_vfs.c/
yaffs_bg_gc_urgency函数。垃圾回收的具体实现函数:yaffs_guts.c/yaffs_bg_gcàyaffs_check_gc
另外,在写数据时也会调用yaffs_check_gc函数。
由于文件系统的基本组织信息保存在页面的备份空间中,因此,在文件系统加载时只需要扫描
各个页面的备份空间,即可建立起整个文件系统的结构,而不需要像JFFS1/2那样扫描整个介质,从而
大大加快了文件系统的加载速度。
2.3yaffs文件系统在在内存中的组织方式
2.3.1SupperBlock
操作文件系统的第一步自然是取得SupperBlock了,Yaffs文件系统本身在NANDFlash上并不
存在所谓的SupperBlock块,完全是在文件系统mount的过程中由read_super函数填充的,不过有意
思的一点是,由于物理上没有存储SupperBlock块,所以NADNFlash上的yaffs文件系统本身没有存
储filesystem的魔数(MagicNum),在内存中SupperBlock里的s_magic参数也是直接赋值的,所以存
储在NANDFlash上的任何文件系统都能被当作yaffs文件系统mount上来,只是数据都会被当作错误
数据放在lost+found目录中,不知道这算不算yaffs文件系统的一个bug.
yaffs2文件系统结构及应用 - Junior的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/dlijun/article/details/51583211
第4页 共18页 2017/6/15 下午4:00
剩余17页未读,继续阅读
资源评论
qq0840304328
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功