在Linux中實現大容量 NAND Flash的YAFFS2檔案系統

來源:互聯網
上載者:User

分析了嵌入式環境中YAFFS/YAFFS2檔案系統的優點,提出YAFFS2不僅支援小容量的NAND flash,對大容量NAND flash更具有優勢。並介紹了YAFFS/YAFFS2檔案系統結構。著重將YAFFS2檔案系統在嵌入式Linux系統中的實現過程包括配置、編譯以及測試整個完整過程作了詳細的論述。
關鍵詞 NAND flash,YAFFS/YAFFS2,嵌入式Linux系統
隨著嵌入式系統在消費電子、航空航天、汽車電子、醫學保健、網路通訊、工業控制等各個領域的廣泛應用,嵌入式系統中的資料存放區和管理已經成為一個重要的研究課題。Flash儲存空間具有存取速度快、容量大、成本低等很多優點,廣泛用在嵌入式系統中做儲存空間件。目前,市場上Flash儲存空間主要有NOR(或非)和NAND(與非)兩種類型。針對NOR Flash專門設計的檔案系統JFFS/JFFS2(Journaling Flash File System)在嵌入式系統中已得到廣泛的應用;隨著NAND作為大型存放區介質的廣泛應用,專門針對NAND flash特點編寫的記錄檔系統YAFFS/YAFFS2(Yet Another Flash File System)正逐漸被應用到嵌入式系統中。
一、NAND Flash簡介
NOR 和NAND是現在市場上兩種主要的非易失性快閃記憶體技術。Intel 公司於1988年首先開發出NOR Flash技術,NOR的傳輸效率較高,在1~4MB的小容量時有明顯的成本優勢,主要應用在代碼儲存介質中;NAND則是高密度資料存放區的理想解決方案,其容量可達1GB以上,並且寫入和擦除速度很快,更適合於資料存放區。NAND Flash的儲存單元為頁和塊,一般來說,該晶片的一頁大小為512位元組(簡稱小頁),依次分為2個256位元組的主要資料區,最後是16位元組的備用空間;而128MB以上的的晶片使用大小為2K的頁(即大頁)。若干頁組成一個塊,通常為32頁,整個存放裝置又由若干塊組成,這更類似於硬碟管理的操作,因此可以取代硬碟或其他塊裝置。NAND Flash跟NOR Flash相比,寫入和擦除速度快,但大多數寫入操作需要先進行擦除操作, 擦除操作以塊為單位進行,而讀寫操作通常以頁為單位進行, NAND器件中的壞塊是隨機分布的所以不是完全可靠,每塊晶片出廠時都有一定比例的壞塊存在,每個塊的最大擦寫次數是一百萬次甚至千萬次。此外, NAND因為有特殊的時序,訪問起來要複雜一些。向NAND器件寫入資訊需要相當的技巧不能向壞塊寫入資料,也不能嘗試擦除壞塊。
二、 YAFFS/YAFFS2檔案系統
1. NAND Flash簡介
YAFFS/YAFFS2是效果很理想的NAND Flash上的檔案系統,是專門為NAND Flash設計的嵌入式檔案系統,適用於大容量的存放裝置。YAFFS檔案系統分為檔案系統管理層介面、YAFFS內部實現層和NAND介面層,這簡化了與系統的介面設計,便於整合到系統中去。它為記錄檔系統提供了損耗平衡和掉電保護,保證資料在系統對檔案系統修改的過程中發生意外而不被破壞。但YAFFS檔案系統不支援資料壓縮,不支援大容量的NAND Flash,為此 YAFFS2檔案系統被開發了出來。YAFFS2包括了YAFFS 的代碼,它利用YAFFS 實現對小頁Flash的支援,用YAFFS2實現對大頁的支援。同時, YAFFS2在記憶體空間佔用 、記憶體回收速度、讀/寫速度等方面均有大幅提升。
YAFFS中用資料結構來描述每個擦除塊的狀態。該資料結構記錄了塊狀態,並用一個32位的位元影像表示塊內各個頁面的使用方式。在YAFFS中,有且僅有一個塊處於“當前分配”狀態。新頁面從當前進行分配的塊中順序進行分配,若當前塊已滿,則順序尋找下一個空閑塊。
YAFFS/YAFFS2採用一種多策略混合的記憶體回收演算法,將貪心策略和隨機播放策略按一定比例混合使用:當滿足特定的小機率條件時,記憶體回收行程會試圖隨機播放一個可回收的頁面;否則,使用貪心策略回收最“髒”的塊。這種多策略混合法能夠有效地改善貪心策略造成的不均;通過不同的混合比例,控制損耗平均和系統開銷之間的平衡。由於NAND的擦除很快,YAFFS將垃圾收集的檢查放在寫入新頁面時進行,而不是採用JFFS那樣的後台線程方式,從而簡化了設計。
2.檔案系統結構
YAFFS/ YAFFS2根據NAND快閃記憶體以頁為單位存取的特點,將檔案組織成固定大小(512位元組/2K)的資料區段。每個檔案都有一個檔案頭(儲存了檔案的模式、所有者id、組id、長度、檔案名稱等資訊),還有一個專門頁存放。資料區段都組織成樹形結構,這便於提高檔案資料區塊的尋找速度。YAFFS/ YAFFS2在檔案進行改寫時總是先寫入新的資料區塊,然後將舊的資料區塊從檔案中刪除。YAFFS/ YAFFS2利用NAND快閃記憶體提供的每個頁面16位元組的備用空間來存放ECC(Error Correction Code)和檔案系統的組織資訊,不僅能夠實現錯誤偵測和壞塊處理,也能夠提高檔案系統的載入速度。
YAFFS/ YAFFS2參考了SmartMedia的設定,利用NAND快閃記憶體提供的16位元組頁面備用空間中的6個位元組作頁面資料的ECC,2個位元組分別用作塊狀態字和資料狀態字,其餘的8位元組(64位)用來存放檔案系統的組織資訊,即中繼資料。由於檔案系統的基主要組織資訊儲存在頁面的備份空間中,因此,在檔案系統載入時只需要掃描各個頁面的備份空間,即可建立起整個檔案系統的結構,而不需要像JFFS那樣掃描整個介質,從而大大加快了檔案系統的載入速度。
三、具體實現
1.開發環境
本移植是在REDHAT9.0純Linux開發環境中進行的,採用宿主機加目標板的開發模式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.