<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          基于NAND閃存的文件系統(tǒng)YAFFS在嵌入式系統(tǒng)中的應(yīng)用

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

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

          本文引用地址:http://www.ex-cimer.com/article/151535.htm

            介紹

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

            系統(tǒng)簡介

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

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

            YAFFS文件組織結(jié)構(gòu)

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

            YAFFS物理數(shù)據(jù)組織

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

            YAFFS擦除塊和頁面分配

            YAFFS中用數(shù)據(jù)結(jié)構(gòu)來描述每個擦除塊的狀態(tài)。該數(shù)據(jù)結(jié)構(gòu)記錄了塊狀態(tài),并用一個32位的位圖表示塊內(nèi)各個頁面的使用情況。在YAFFS中,有且僅有一個塊處于“當(dāng)前分配”狀態(tài)。新頁面從當(dāng)前進(jìn)行分配的塊中順序進(jìn)行分配,若當(dāng)前塊已滿,則順序?qū)ふ蚁乱粋€空閑塊。

            YAFFS垃圾收集機制

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

            YAFFS實現(xiàn)開發(fā)環(huán)境簡介

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

            YAFFS移植:

            1)在內(nèi)核中建立YAFFS目錄fs/yaffs,并把下載的YAFFS代碼復(fù)制到該目錄下面。

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

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

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

            


            5)修改NAND分區(qū)。此分區(qū)要結(jié)合vivi里的分區(qū)進(jìn)行設(shè)置,如下:

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();