<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于NAND閃存的文件系統YAFFS在嵌入式系統中的應用

基于NAND閃存的文件系統YAFFS在嵌入式系統中的應用

作者: 時(shí)間:2010-09-15 來(lái)源:網(wǎng)絡(luò ) 收藏

 目前,針對NOR Flash設計的JFFS/JFFS2在中已得到廣泛的;隨著(zhù)作為大容量存儲介質(zhì)的普及,(Yet Another Flash File System)正逐漸被系統中。

本文引用地址:http://dyxdggzs.com/article/151535.htm

  介紹

  NOR 和NAND是現在市場(chǎng)上兩種主要的非易失性技術(shù)。NOR比較適合存儲程序代碼,其容量一般小于16MB;NAND則是高密度數據存儲的理想解決方案,其容量可達1GB以上。NAND閃存的存儲單元為頁(yè)和塊。一般來(lái)說(shuō),128MB以下容量芯片的一頁(yè)大小為528字節,依次分為2個(gè)256字節的主數據區,最后是16字節的備用空間;一個(gè)塊由若干頁(yè)組成,通常為32頁(yè);一個(gè)存儲設備又由若干塊組成。與其他存儲器相比,NAND閃存具有以下特點(diǎn):不是完全可靠的,每塊芯片出廠(chǎng)時(shí)都有一定比例的壞塊存在;各個(gè)存儲單元是不可直接改寫(xiě)的,在每次改寫(xiě)操作之前需要先擦除;擦除操作以塊為單位進(jìn)行,而讀寫(xiě)操作通常以頁(yè)為單位進(jìn)行;各塊的擦除次數有限,一般為10萬(wàn)100萬(wàn)次;使用復雜的I/O口串行存取數據。

  系統簡(jiǎn)介

  類(lèi)似于JFFS/JFFS2,是專(zhuān)門(mén)為NAND閃存設計的文件系統,適用于大容量的存儲設備。它是日志結構的文件系統,提供了損耗平衡和掉電保護,可以有效地避免意外掉電對文件系統一致性和完整性的影響。YAFFS文件系統是按層次結構設計的,分為文件系統管理層接口、YAFFS內部實(shí)現層和NAND接口層,這樣就簡(jiǎn)化了其與系統的接口設計,可以方便地集成到系統中去。與JFFS相比,它減少了一些功能,因此速度更快,占用內存更少。

  YAFFS充分考慮了NAND閃存的特點(diǎn),根據NAND閃存以頁(yè)面為單位存取的特點(diǎn),將文件組織成固定大小的數據段。利用NAND閃存提供的每個(gè)頁(yè)面16字節的備用空間來(lái)存放ECC(Error Correction Code)和文件系統的組織信息,不僅能夠實(shí)現錯誤檢測和壞塊處理,也能夠提高文件系統的加載速度。YAFFS采用一種多策略混合的垃圾回收算法,結合了貪心策略的高效性和隨機選擇的平均性,達到了兼顧損耗平均和系統開(kāi)銷(xiāo)的目的。

  YAFFS文件組織結構

  YAFFS將文件組織成固定大小(512字節)的數據段。每個(gè)文件都有一個(gè)頁(yè)面專(zhuān)門(mén)存放文件頭,文件頭保存了文件的模式、所有者id、組id、長(cháng)度、文件名等信息。為了提高文件數據塊的查找速度,文件的數據段被組織成樹(shù)形結構。YAFFS在文件進(jìn)行改寫(xiě)時(shí)總是先寫(xiě)入新的數據塊,然后將舊的數據塊從文件中刪除。YAFFS使用存放在頁(yè)面備用空間中的ECC進(jìn)行錯誤檢測,出現錯誤后會(huì )進(jìn)行一定次數的重試,多次重試失敗后,該頁(yè)面就被停止使用。

  YAFFS物理數據組織

  YAFFS充分利用了NAND閃存提供的每個(gè)頁(yè)面16字節的備用空間,參考了SmartMedia的設定,備用空間中6個(gè)字節被用作頁(yè)面數據的ECC,2個(gè)字節分別用作塊狀態(tài)字和數據狀態(tài)字,其余的8字節(64位)用來(lái)存放文件系統的組織信息,即元數據。由于文件系統的基本組織信息保存在頁(yè)面的備份空間中,因此,在文件系統加載時(shí)只需要掃描各個(gè)頁(yè)面的備份空間,即可建立起整個(gè)文件系統的結構,而不需要像JFFS 那樣掃描整個(gè)介質(zhì),從而大大加快了文件系統的加載速度。

  YAFFS擦除塊和頁(yè)面分配

  YAFFS中用數據結構來(lái)描述每個(gè)擦除塊的狀態(tài)。該數據結構記錄了塊狀態(tài),并用一個(gè)32位的位圖表示塊內各個(gè)頁(yè)面的使用情況。在YAFFS中,有且僅有一個(gè)塊處于“當前分配”狀態(tài)。新頁(yè)面從當前進(jìn)行分配的塊中順序進(jìn)行分配,若當前塊已滿(mǎn),則順序尋找下一個(gè)空閑塊。

  YAFFS垃圾收集機制

  YAFFS使用一種多策略混合的算法來(lái)進(jìn)行垃圾回收,將貪心策略和隨機選擇策略按一定比例混合使用:當滿(mǎn)足特定的小概率條件時(shí),垃圾回收器會(huì )試圖隨機選擇一個(gè)可回收的頁(yè)面;而在其他情況下,則使用貪心策略回收最“臟”的塊。通過(guò)使用多策略混合的方法,YAFFS能夠有效地改善貪心策略造成的不平均;通過(guò)不同的混合比例,則可以控制損耗平均和系統開(kāi)銷(xiāo)之間的平衡??紤]到NAND的擦除很快(和NOR相比可忽略不計),YAFFS將垃圾收集的檢查放在寫(xiě)入新頁(yè)面時(shí)進(jìn)行,而不是采用JFFS那樣的后臺線(xiàn)程方式,從而簡(jiǎn)化了設計。

  YAFFS實(shí)現開(kāi)發(fā)環(huán)境簡(jiǎn)介

  本文采用的是宿主機+目標板的開(kāi)發(fā)模式。宿主機為PC+REDHAT9.0,目標板為三星公司的S3C2410+嵌入式Linux,版本為2.6.11.12。NAND閃存是三星公司64MB的K9F5608U0C。YAFFS的源碼可以從網(wǎng)站下載。

  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里的分區進(jìn)行設置,如下:

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>