閱讀598 返回首頁    go 微軟 go Office


Cramfs、JFFS2、YAFFS2全麵對比

 由 於嵌入式係統自身存在一些特殊要求使得一些傳
統的文件係統 (如FAT、EXT2等) 並不十分適合。專
用的嵌入式文件係統應有一些自身的特性如文件係統
麵對的儲存介質特殊性、文件係統應具有的跨平台的安
全性以及整個係統的實時性等。本 文介紹了3種源
碼開放的嵌入式文件係統Cramfs、JFFS2、YAFFS2
詳細分析比較了這3種文件係統的主要性能並根據分
析結果指出了各自的適 用領域  
 Cramfs、JFFS2、YAFFS2是3種性能優越專用於嵌入式係
統的文件係統。本文通過對這3種文件係統的設計原理和主要性
能進行分析與比較歸 納出各自的選型依據據和適用領域。 
 
三種文件係統的介紹 Cramfs         Cramfs是Linux的創始人Linus Torvalds開發的一種隻讀
文件係統采用了zlib壓縮壓縮比一般可以達到12但仍
可以做到高效的隨機讀取。在Linux係統中通常把不需 要經
常修改的目錄壓縮存放在係統引導時再將壓縮文件解開。
Cramfs並不需要一次性地把文件係統的所有內容都解壓到內存
中而隻是在係統需要訪問某 個位置的數據時馬上計算出該數據在Cramfs中的位置將其解壓縮到內存之中然後通過對
內存的訪問來獲取需要讀取的數據。 
  JFFS2         JFFS意為「Journaling Flash File System」該文件係統
是瑞典Axis通信公司開發的一種基於Flash內存的日誌文件係
統。該公司於1999年在GNU/Linux上發行了第一 版JFFS文
件係統後來經過Redhat公司的發展現在已經發行了第二個
版本的JFFS2其全部程序代碼都是可供研究開發的。它在設
計時充分考慮了嵌 入式係統中Flash內存的讀寫特性確保在
係統掉電時正在讀寫的文件不受影響同時其儲存策略以及
抗疲勞性等方麵也在第一版的基礎上進行了改進。 目前JFFS2
廣泛應用於嵌入式係統中尤其是嵌入式μClinux操作係統中。 
  YAFFS2         YAFFS意為「Yet Another Flash File System」是目前
唯一一個專門為NAND Flash設計的文件係統。它采用了類日誌
結構結合NAND Flash的特點提供了損耗平衡和掉電保護機
製可以有效地避免意外掉電對文件係統一致性和完整性的影
響。Aleph One公司於2002年5月發布了第一版YAFFS程序
代碼用戶可以很方便地在網站上下載到。第一版的YAFFS隻
支持每頁512字節的NAND Flash。 YAFFS2是YAFFS的升級版即支持每頁512字節的NAND Flash內存也支持每頁
2048字節的NAND Flash內存。 
  Flash內存 Flash設備特點 
        相對於傳統儲存介質Flash內存具有如下優點   
˙ 可靠性高采用Flash為儲存介質可以確保100萬次以上的
可靠寫入   
˙ 儲存速度快寫入∕讀取均可接近1Mb/s   
˙ 使用方便具有很強的環境適應能力。 
  
        但是由於其製造製程的問題還存在以下缺點   
˙ 讀取和寫入以頁為單位擦除以塊為單位   
˙ 易出現隨機壞塊   
˙ 塊與塊之間使用不均衡會導致壽命問題。 
  NOR Flash和NAND Flash 
        基於NOR技術的Flash內存是最早出現的Flash內存它
具有以下特點   
˙ 程序和數據可存放在同一芯片上擁有獨立的數據總線和地址
總線支持快速隨機讀取允許係統直接從Flash中讀取程序代碼並執行而無需先將程序代碼下載至RAM中再執行   
˙ 可以單字節或單字程序化但必須以塊為單位進行擦除操作。 
  
        由於NOR Flash內存的擦除和程序化速度較慢而塊尺寸
又比較大因此擦除和程序化操作所花費的時間很長。目前
NOR Flash內存大多隻用於儲存嵌入式係統的啟動程序代碼。 
  
        NAND Flash內存可以順序讀取儲存單元的內容由於製
程上的進步其容量越來越大單位價格越來越便宜正逐步成
為Flash內存的主流。NAND Flash內存具有以下特點 
˙ 以頁為單位進行讀寫操作以塊為單位進行擦除操作頁大小
為512字節或2048字節每頁不僅有   
數據區還有幾十字節的空閑區。   
˙ 數據、地址采用同一總線接口串行讀取。   
˙ 芯片尺寸小接腳少單位成本低。   
˙ 芯片內含有失效塊並且在使用過程中可能會出現隨機壞塊。   
        
        表1 比較了這兩種Flash內存的性能參數。 
   三種嵌入式文件係統主要性能分析與比較         數據安全、運行速度、占用資源、使用範圍等是嵌入式文
件係統的主要性能指針。下麵從這幾個方麵入手對這三種嵌入
式文件係統進行分析與比較。 
  數據安全         當前的嵌入式係統主要使用固態Flash芯片作為儲存設備。
由於Flash設備自身的特點以及嵌入式係統工作環境的複雜多
樣性如何保證數據的安全是嵌入 式文件係統首先要考慮的問
題。數據安全主要包括數據冗餘和掉電保護等部分。 
  資料冗餘 
        提高數據安全性的最有效措施是增加數據的冗餘而數據的大量冗餘又給維護資料一致性
帶來困難。對此應進行合理取舍在盡量降低冗餘的前提下確保數據的安全性和可靠性。   
        Cramfs文件係統是一種隻讀文件係統文件係統內容不可
更改設計思想遵循「隻儲存最少的信息」甚至沒有時間戳之類的信息除了數據包的CRC校驗 信息外幾乎沒有別的數據
冗餘。 
  
        JFFS2文件係統是典型的日誌結構的文件係統它儲存的
數據是日誌式數據信息。JFFS2在Flash上隻有兩種類型的數據
實 體j.ffs2_raw_inode和jffs2_raw dirent。前者包含文件的管
理信息後者用於描述文件在文件係統中的位置。真正的數據信
息就保持在jffs2_raw_inode節點的後麵大部分 管理的信息都
是在係統掛載之後建立起來的。兩種數據實體有著公共的文件頭
結構jffs2 _ unknown_node。在這個結構裏有個jint32 _t類型
的hdr_crc變量它代表文件頭部中其它域的CRC校驗值。這
說明JFFS2文件係統使用的是CRC循環冗餘校驗碼。 
  
        YAFFS2文件係統是一種類日誌文件係統專用於NAND
型Flash設備。其儲存數據的基本單位是chunk相當於Flash
的頁。Chunk中的 數據包括兩部分一部分是數據區占用Flash
的一頁另一部分是文件信息及冗餘數據區占用Flash頁的
OOB區。其冗餘數據主要是ECC校驗資 料對於小頁每頁
512字節的Flash每頁有6字節的ECC數據對於大頁每
頁2048字節的Flash每頁有24字節的ECC資 料。 
  掉電保護         掉電保護的目的是在係統意外失去供電的情況下保證
係統運行狀態的確定性以及記錄數據的完整性當係統供電恢複
後現場數據可以及時恢複避免係統產生 混亂。很多文件係
統出於運行速度考慮在程序運行過程中常將數據暫存在
SDRAM中一旦係統意外掉電往往會造成數據丟失。 
  
        Cramfs文件係統將文件係統內容解壓到內存中由於其不
能寫入文件係統的內容無法更改因此不存在掉電保護的問題。 
  
        JFFS2是一種日誌結構文件係統因此不論電源以何種方
式在哪個時刻停止供電JFFS2都能保持數據完整性。當係統
遭受不正常斷電後重新啟動 時JFFS2自動將係統恢複到斷電
前最後一個穩定狀態。需要注意的是文件係統在最後一個穩定
狀態之後發生的任何改變都無法進行恢複。 
  
        YAFFS2是一種類日誌文件係統可以在意外掉電重啟後
自動提供可靠的數據記錄防止文件係統的崩潰。它使用獨立的
日誌文件跟蹤文件係統內容的變化。舉 例來說當應用程序需
要寫Flash的某一頁時它首先修改的是存放於文件日誌中的一
塊鏡像隻有當日誌中的鏡像複製到文件係統中後數據才真實
地寫到該 頁上。當發生意外掉電重啟後YAFFS2沒有像JFFS2
那樣使用舊文件完全代替新寫文件而是選擇用新文件完全代替舊的文件或者已寫部分使用新文 件未寫部分使用舊文件。
這種方式增強了掉電時未完全寫入文件的安全性能特別是當意
外掉電發生在數據區時意外掉電時的文件幾乎被完好地保存下
來。 
  運行速度         運行速度可以從以下幾個方麵考察文件係統掛載速度
讀文件速度寫文件速度等。這裏預設的儲存介質是NAND 
Flash。 
  
        一般而言壓縮的、隻讀的文件係統在啟動時需要將文件
係統解壓到SDRAM中這在一定程度上會減緩文件係統掛載速
度。但是Cramfs文件係統在設計 時充分考慮了係統掛載的時
間並沒有一次性地把文件係統的所有內容都解壓到內存中而
隻是在係統需要訪問某個位置的數據時迅速計算出該數據在 
Cramfs中的位置將其解壓縮到內存之中再進行訪問操作。
由於其讀文件速度隻是找出文件地址以及訪問內存的操作所以
無論是掛載速度還是讀文 件速度 Cramfs文件係統都比
JFFS2和YAFFS2文件係統要快。 
  
        JFFS2文件係統的掛載可以分為以下幾個步驟進行   
1. 檢查每個節點CRC校驗碼的合法性在內存中為每個節點每個節點分配必需的相關的結構   
2. 掃瞄每個i節點的物理節點鏈表建立鏈接   
3. 釋放掃瞄過程中使用的臨時信息。 
  
        可以看出這個過程還是很複雜的更重要的是在JFFS2
文件係統被掛載時需要對整個Flash儲存區域進行掃瞄這就
耗費了大量的時間因此 JFFS2文件係統的開機速度非常緩慢。
與JFFS2相比YAFFS2減少了一些功能掛載時隻需掃瞄Flash
內存的空閑區根據從OOB備份資 料區中讀取的yaffs_tags
信息判讀是文件頭頁麵還是資料頁麵再根據相應信息在內存中
為每個文件建立一個對應的yaffs_object對 象。由於YAFFS2
在係統加載時隻需掃瞄各個頁麵的OOB區即可建立起整個文
件係統的結構而不需要像JFFS2那樣掃瞄整個Flash設備
因此大 大加快了文件係統的啟動速度。但是YAFFS2仍然要
求對整個Flash設備所有頁的空閑進行掃瞄這就導致當Flash
設備儲存空間變大時係統掃瞄 時間會直線上升。 
  
        在文件係統運行時JFFS2需要維護幾個鏈表來管理擦寫
塊。根據擦寫塊上的內容一個擦寫塊可能會在不同的鏈表上。
具體來說當一個擦寫塊上都是合法 valid的節點時它會
在clean_list上當一個擦寫塊包含至少一個過時obsolete
的節點時它會在dirty_list上當 一個擦寫塊被擦寫完畢並被寫入Cleanmarker節點後它會在free_list上。正是以這些
鏈表為基礎 JFFS2文件係統才可以實現垃圾回收、損耗平衡
等性能。文件係統掛載時YAFFS2在內存中建立一個層次結構
的索引可以看作是一個文件樹。樹的最底 層指向實際存放文
件的頁麵高層則是一層層的索引目錄。文件樹是通過一個聯合
結構的節點來實現的。聯合結構是固定大小32字節當它
處於最底層時 由16個2字節入口來查找頁麵ID當處於其
它層時由8個4字節指針指向其它更低層的節點。每個文件對
應一個文件樹便於檢索。在以NAND Flash為儲存介質的嵌入
式係統中YAFFS2的文件讀寫性能都優於JFFS2。 
  占用資源         在嵌入式係統中內存和外部內存資源匱乏需要節約使
用。因此占用的內存和外部內存資源量也是衡量嵌入式文件係統
的一個重要指針。 
  
        如果使用RAMDISK方式運行文件係統那麼在係統運行
之後首先要把Flash上的映像文件解壓到內存中才可以開始
運行程序。這樣同樣的程序代碼 不僅在外部內存中占據了空
間而且由於解壓縮還在內存中占用了更大的空間。Cramfs
雖然是一個壓縮式的文件係統但前麵已介紹過它並不需要一 
次性地將所有內容解壓到內存之中。由於其對文件內容的壓縮因此無論是外部內存還是內存 Cramfs都比JFFS2和YAFFS2
占用更少的資源。 
  
        JFFS2將文件係統的數據和原數據以節點的形式儲存在
Flash上其冗餘數據隻是節點頭部的CRC校驗碼並且在儲
存時對節點的數據進行了壓縮。與之 相比YAFFS2不僅儲存
了頁數據的ECC校驗碼並且沒有Flash設備OOB區儲存數
據而是用來儲存頁節點信息。其映像也是由若幹個頁麵組成
沒 有對數據進行壓縮因此YAFFS2文件係統映像大大超過了
JFFS2文件係統映像。實驗表明普通YAFFS2映像的大小約
為同樣JFFS2映像大小的 2倍。當文件係統在內存中運行時
JFFS2在內存中定義了若幹鏈表YAFFS2在內存中為每個文
件創建一個文件樹。盡管為每個文件建立一個文件 樹需要消耗
掉不少的內存但是比起維護JFFS2所需的鏈表消耗的內存
還是少一些。在實際運行中YAFFS2占用的內存要小於JFFS2
文件係 統。 
  使用範圍         要使用Cramfs或JFFS2文件係統離不開MTD驅動程
序層的支持。MTDMemory Technology Device是Linux中
的一個儲存設備通用界麵層。雖然也可以建立在RAM上但它
是專為基於Flash的設備而設計的。MTD包含特定Flash 芯片的驅動程序 Flash芯片驅動向上層提供讀、寫、擦除等基本
的Flash操作方法。MTD對這些操作進行封裝後向用戶層提供
MTD char和MTD block類型的設備。MTD char類型的設備包
括/dev/mtd0等可以對Flash的原始字符訪問MTD block類
型的設備包括/dev/mtdblock0等將Flash模擬成塊設備這樣
就可以在這些塊設備上創建Cramfs或JFFS2等格式的文 件係
統。在對用戶層的界麵上 Cramfs或JFFS2文件係統還需要
操作係統VFS虛擬文件係統的支持。  
  
        同樣YAFFS2文件係統支持使用MTD驅動層和VFS層
這也是一般在嵌入式Linux或者μClinux操作係統中使用
YAFFS2文件係統的常用 方法。除此之外YAFFS2還帶有
NAND Flash芯片驅動並為嵌入式係統提供了直接訪問文件係
統的API用戶可以不使用Linux中的MTD和VFS直接對文
件進行操作。圖1 為嵌入式係統的文件係統結構。 
   
        YAFFS2中的YAFFS2 Direct提供了直接的文件係統界
麵因此在那些沒有VFS層的嵌入式係統中也可使用YAFFS2。
YAFFS2文件係統的使用範圍要比Cramfs和 JFFS2文件係統
廣泛但是需要注意的是YAFFS2隻能用在NAND Flash儲存
設備上。 
  結論         這3種嵌入式文件係統在嵌入式係統中的應用非常廣泛
但是又具有各自的特點。表2 比較了3種文件係統的主要性能
並歸納出各自最適用的領域。 
   
具體分析如下   
1. Cramfs是最早的一種嵌入式文件係統它隻儲存了最少的信
息對文件內容進行了壓縮運行速度比較   
快。但是由於其不能寫入不支持超過16 MB大小的文件因
此廣泛地應用於儲存空間小、文件係統內容   
較少並且不需要用戶寫入的嵌入式係統中。   
2. JFFS2是一種較早的Flash專用文件係統。目前已有很多
JFFS2應用於μClinux以及嵌入式Linux的例子。事   
實上它已經成為新版Linux中的一種標準文件係統。   
同時它對NOR Flash和NAND Flash提供支持針對兩種Flash
設備共同的特性提供掉電保護和損耗平衡等   
功能可供用戶讀寫十分適合於同時用到這兩種Flash設備的
嵌入式係統。   
3. YAFFS2是專為NAND Flash設計的文件係統它充分考慮
了NAND Flash設備的特性支持ECC校驗提   供掉電保護和損耗平衡功能運行和掛載速度都比JFFS2要快。
它支持操作係統廣泛包括常見的嵌入   
式Linux、WinCE、μClinux。由於它提供Direct界麵因此稍
加修改也可使用在沒有操作係統的嵌入式   
係統中。目前被廣泛應用於使用NAND Flash作為儲存設備的
嵌入式係統中。 
  
        針對具體應用可以在考察各種文件係統特點的基礎上
選擇更適合自身係統的一種文件係統解決方案。比如在許多以
NAND Flash為儲存介質的應用係統中都用到「Cramfs 
YAFFS2」文件係統。以Cramfs作為根文件係統既提高了啟
動速度也能保護根文件不 受破壞使用YAFFS2作為用戶文
件係統在保證用戶可以自由讀寫文件的基礎上提高了文件係
統的安全性和運行速度不失為一種優良的嵌入式文件係統解 
決方案。 
 由 於嵌入式係統自身存在一些特殊要求使得一些傳
統的文件係統 (如FAT、EXT2等) 並不十分適合。專
用的嵌入式文件係統應有一些自身的特性如文件係統
麵對的儲存介質特殊性、文件係統應具有的跨平台的安
全性以及整個係統的實時性等。本 文介紹了3種源
碼開放的嵌入式文件係統Cramfs、JFFS2、YAFFS2
詳細分析比較了這3種文件係統的主要性能並根據分
析結果指出了各自的適 用領域 
 Cramfs、JFFS2、YAFFS2是3種性能優越專用於嵌入式係
統的文件係統。本文通過對這3種文件係統的設計原理和主要性
能進行分析與比較歸 納出各自的選型依據據和適用領域。
 
三種文件係統的介紹 Cramfs         Cramfs是Linux的創始人Linus Torvalds開發的一種隻讀
文件係統采用了zlib壓縮壓縮比一般可以達到12但仍
可以做到高效的隨機讀取。在Linux係統中通常把不需 要經
常修改的目錄壓縮存放在係統引導時再將壓縮文件解開。
Cramfs並不需要一次性地把文件係統的所有內容都解壓到內存
中而隻是在係統需要訪問某 個位置的數據時馬上計算出該數據在Cramfs中的位置將其解壓縮到內存之中然後通過對
內存的訪問來獲取需要讀取的數據。
  JFFS2         JFFS意為「Journaling Flash File System」該文件係統
是瑞典Axis通信公司開發的一種基於Flash內存的日誌文件係
統。該公司於1999年在GNU/Linux上發行了第一 版JFFS文
件係統後來經過Redhat公司的發展現在已經發行了第二個
版本的JFFS2其全部程序代碼都是可供研究開發的。它在設
計時充分考慮了嵌 入式係統中Flash內存的讀寫特性確保在
係統掉電時正在讀寫的文件不受影響同時其儲存策略以及
抗疲勞性等方麵也在第一版的基礎上進行了改進。 目前JFFS2
廣泛應用於嵌入式係統中尤其是嵌入式μClinux操作係統中。
  YAFFS2         YAFFS意為「Yet Another Flash File System」是目前
唯一一個專門為NAND Flash設計的文件係統。它采用了類日誌
結構結合NAND Flash的特點提供了損耗平衡和掉電保護機
製可以有效地避免意外掉電對文件係統一致性和完整性的影
響。Aleph One公司於2002年5月發布了第一版YAFFS程序
代碼用戶可以很方便地在網站上下載到。第一版的YAFFS隻
支持每頁512字節的NAND Flash。 YAFFS2是YAFFS的升級版即支持每頁512字節的NAND Flash內存也支持每頁
2048字節的NAND Flash內存。
  Flash內存 Flash設備特點
        相對於傳統儲存介質Flash內存具有如下優點  
˙ 可靠性高采用Flash為儲存介質可以確保100萬次以上的
可靠寫入  
˙ 儲存速度快寫入∕讀取均可接近1Mb/s  
˙ 使用方便具有很強的環境適應能力。
 
        但是由於其製造製程的問題還存在以下缺點  
˙ 讀取和寫入以頁為單位擦除以塊為單位  
˙ 易出現隨機壞塊  
˙ 塊與塊之間使用不均衡會導致壽命問題。
  NOR Flash和NAND Flash
        基於NOR技術的Flash內存是最早出現的Flash內存它
具有以下特點  
˙ 程序和數據可存放在同一芯片上擁有獨立的數據總線和地址
總線支持快速隨機讀取允許係統直接從Flash中讀取程序代碼並執行而無需先將程序代碼下載至RAM中再執行  
˙ 可以單字節或單字程序化但必須以塊為單位進行擦除操作。
 
        由於NOR Flash內存的擦除和程序化速度較慢而塊尺寸
又比較大因此擦除和程序化操作所花費的時間很長。目前
NOR Flash內存大多隻用於儲存嵌入式係統的啟動程序代碼。
 
        NAND Flash內存可以順序讀取儲存單元的內容由於製
程上的進步其容量越來越大單位價格越來越便宜正逐步成
為Flash內存的主流。NAND Flash內存具有以下特點
˙ 以頁為單位進行讀寫操作以塊為單位進行擦除操作頁大小
為512字節或2048字節每頁不僅有  
數據區還有幾十字節的空閑區。  
˙ 數據、地址采用同一總線接口串行讀取。  
˙ 芯片尺寸小接腳少單位成本低。  
˙ 芯片內含有失效塊並且在使用過程中可能會出現隨機壞塊。  
       
        表1 比較了這兩種Flash內存的性能參數。
   三種嵌入式文件係統主要性能分析與比較         數據安全、運行速度、占用資源、使用範圍等是嵌入式文
件係統的主要性能指針。下麵從這幾個方麵入手對這三種嵌入
式文件係統進行分析與比較。
  數據安全         當前的嵌入式係統主要使用固態Flash芯片作為儲存設備。
由於Flash設備自身的特點以及嵌入式係統工作環境的複雜多
樣性如何保證數據的安全是嵌入 式文件係統首先要考慮的問
題。數據安全主要包括數據冗餘和掉電保護等部分。
  資料冗餘
        提高數據安全性的最有效措施是增加數據的冗餘而數據的大量冗餘又給維護資料一致性
帶來困難。對此應進行合理取舍在盡量降低冗餘的前提下確保數據的安全性和可靠性。  
        Cramfs文件係統是一種隻讀文件係統文件係統內容不可
更改設計思想遵循「隻儲存最少的信息」甚至沒有時間戳之類的信息除了數據包的CRC校驗 信息外幾乎沒有別的數據
冗餘。
 
        JFFS2文件係統是典型的日誌結構的文件係統它儲存的
數據是日誌式數據信息。JFFS2在Flash上隻有兩種類型的數據
實 體j.ffs2_raw_inode和jffs2_raw dirent。前者包含文件的管
理信息後者用於描述文件在文件係統中的位置。真正的數據信
息就保持在jffs2_raw_inode節點的後麵大部分 管理的信息都
是在係統掛載之後建立起來的。兩種數據實體有著公共的文件頭
結構jffs2 _ unknown_node。在這個結構裏有個jint32 _t類型
的hdr_crc變量它代表文件頭部中其它域的CRC校驗值。這
說明JFFS2文件係統使用的是CRC循環冗餘校驗碼。
 
        YAFFS2文件係統是一種類日誌文件係統專用於NAND
型Flash設備。其儲存數據的基本單位是chunk相當於Flash
的頁。Chunk中的 數據包括兩部分一部分是數據區占用Flash
的一頁另一部分是文件信息及冗餘數據區占用Flash頁的
OOB區。其冗餘數據主要是ECC校驗資 料對於小頁每頁
512字節的Flash每頁有6字節的ECC數據對於大頁每
頁2048字節的Flash每頁有24字節的ECC資 料。
  掉電保護         掉電保護的目的是在係統意外失去供電的情況下保證
係統運行狀態的確定性以及記錄數據的完整性當係統供電恢複
後現場數據可以及時恢複避免係統產生 混亂。很多文件係
統出於運行速度考慮在程序運行過程中常將數據暫存在
SDRAM中一旦係統意外掉電往往會造成數據丟失。
 
        Cramfs文件係統將文件係統內容解壓到內存中由於其不
能寫入文件係統的內容無法更改因此不存在掉電保護的問題。
 
        JFFS2是一種日誌結構文件係統因此不論電源以何種方
式在哪個時刻停止供電JFFS2都能保持數據完整性。當係統
遭受不正常斷電後重新啟動 時JFFS2自動將係統恢複到斷電
前最後一個穩定狀態。需要注意的是文件係統在最後一個穩定
狀態之後發生的任何改變都無法進行恢複。
 
        YAFFS2是一種類日誌文件係統可以在意外掉電重啟後
自動提供可靠的數據記錄防止文件係統的崩潰。它使用獨立的
日誌文件跟蹤文件係統內容的變化。舉 例來說當應用程序需
要寫Flash的某一頁時它首先修改的是存放於文件日誌中的一
塊鏡像隻有當日誌中的鏡像複製到文件係統中後數據才真實
地寫到該 頁上。當發生意外掉電重啟後YAFFS2沒有像JFFS2
那樣使用舊文件完全代替新寫文件而是選擇用新文件完全代替舊的文件或者已寫部分使用新文 件未寫部分使用舊文件。
這種方式增強了掉電時未完全寫入文件的安全性能特別是當意
外掉電發生在數據區時意外掉電時的文件幾乎被完好地保存下
來。
  運行速度         運行速度可以從以下幾個方麵考察文件係統掛載速度
讀文件速度寫文件速度等。這裏預設的儲存介質是NAND
Flash。
 
        一般而言壓縮的、隻讀的文件係統在啟動時需要將文件
係統解壓到SDRAM中這在一定程度上會減緩文件係統掛載速
度。但是Cramfs文件係統在設計 時充分考慮了係統掛載的時
間並沒有一次性地把文件係統的所有內容都解壓到內存中而
隻是在係統需要訪問某個位置的數據時迅速計算出該數據在
Cramfs中的位置將其解壓縮到內存之中再進行訪問操作。
由於其讀文件速度隻是找出文件地址以及訪問內存的操作所以
無論是掛載速度還是讀文 件速度 Cramfs文件係統都比
JFFS2和YAFFS2文件係統要快。
 
        JFFS2文件係統的掛載可以分為以下幾個步驟進行  
1. 檢查每個節點CRC校驗碼的合法性在內存中為每個節點每個節點分配必需的相關的結構  
2. 掃瞄每個i節點的物理節點鏈表建立鏈接  
3. 釋放掃瞄過程中使用的臨時信息。
 
        可以看出這個過程還是很複雜的更重要的是在JFFS2
文件係統被掛載時需要對整個Flash儲存區域進行掃瞄這就
耗費了大量的時間因此 JFFS2文件係統的開機速度非常緩慢。
與JFFS2相比YAFFS2減少了一些功能掛載時隻需掃瞄Flash
內存的空閑區根據從OOB備份資 料區中讀取的yaffs_tags
信息判讀是文件頭頁麵還是資料頁麵再根據相應信息在內存中
為每個文件建立一個對應的yaffs_object對 象。由於YAFFS2
在係統加載時隻需掃瞄各個頁麵的OOB區即可建立起整個文
件係統的結構而不需要像JFFS2那樣掃瞄整個Flash設備
因此大 大加快了文件係統的啟動速度。但是YAFFS2仍然要
求對整個Flash設備所有頁的空閑進行掃瞄這就導致當Flash
設備儲存空間變大時係統掃瞄 時間會直線上升。
 
        在文件係統運行時JFFS2需要維護幾個鏈表來管理擦寫
塊。根據擦寫塊上的內容一個擦寫塊可能會在不同的鏈表上。
具體來說當一個擦寫塊上都是合法 valid的節點時它會
在clean_list上當一個擦寫塊包含至少一個過時obsolete
的節點時它會在dirty_list上當 一個擦寫塊被擦寫完畢並被寫入Cleanmarker節點後它會在free_list上。正是以這些
鏈表為基礎 JFFS2文件係統才可以實現垃圾回收、損耗平衡
等性能。文件係統掛載時YAFFS2在內存中建立一個層次結構
的索引可以看作是一個文件樹。樹的最底 層指向實際存放文
件的頁麵高層則是一層層的索引目錄。文件樹是通過一個聯合
結構的節點來實現的。聯合結構是固定大小32字節當它
處於最底層時 由16個2字節入口來查找頁麵ID當處於其
它層時由8個4字節指針指向其它更低層的節點。每個文件對
應一個文件樹便於檢索。在以NAND Flash為儲存介質的嵌入
式係統中YAFFS2的文件讀寫性能都優於JFFS2。
  占用資源         在嵌入式係統中內存和外部內存資源匱乏需要節約使
用。因此占用的內存和外部內存資源量也是衡量嵌入式文件係統
的一個重要指針。
 
        如果使用RAMDISK方式運行文件係統那麼在係統運行
之後首先要把Flash上的映像文件解壓到內存中才可以開始
運行程序。這樣同樣的程序代碼 不僅在外部內存中占據了空
間而且由於解壓縮還在內存中占用了更大的空間。Cramfs
雖然是一個壓縮式的文件係統但前麵已介紹過它並不需要一
次性地將所有內容解壓到內存之中。由於其對文件內容的壓縮因此無論是外部內存還是內存 Cramfs都比JFFS2和YAFFS2
占用更少的資源。
 
        JFFS2將文件係統的數據和原數據以節點的形式儲存在
Flash上其冗餘數據隻是節點頭部的CRC校驗碼並且在儲
存時對節點的數據進行了壓縮。與之 相比YAFFS2不僅儲存
了頁數據的ECC校驗碼並且沒有Flash設備OOB區儲存數
據而是用來儲存頁節點信息。其映像也是由若幹個頁麵組成
沒 有對數據進行壓縮因此YAFFS2文件係統映像大大超過了
JFFS2文件係統映像。實驗表明普通YAFFS2映像的大小約
為同樣JFFS2映像大小的 2倍。當文件係統在內存中運行時
JFFS2在內存中定義了若幹鏈表YAFFS2在內存中為每個文
件創建一個文件樹。盡管為每個文件建立一個文件 樹需要消耗
掉不少的內存但是比起維護JFFS2所需的鏈表消耗的內存
還是少一些。在實際運行中YAFFS2占用的內存要小於JFFS2
文件係 統。
  使用範圍         要使用Cramfs或JFFS2文件係統離不開MTD驅動程
序層的支持。MTDMemory Technology Device是Linux中
的一個儲存設備通用界麵層。雖然也可以建立在RAM上但它
是專為基於Flash的設備而設計的。MTD包含特定Flash 芯片的驅動程序 Flash芯片驅動向上層提供讀、寫、擦除等基本
的Flash操作方法。MTD對這些操作進行封裝後向用戶層提供
MTD char和MTD block類型的設備。MTD char類型的設備包
括/dev/mtd0等可以對Flash的原始字符訪問MTD block類
型的設備包括/dev/mtdblock0等將Flash模擬成塊設備這樣
就可以在這些塊設備上創建Cramfs或JFFS2等格式的文 件係
統。在對用戶層的界麵上 Cramfs或JFFS2文件係統還需要
操作係統VFS虛擬文件係統的支持。 
 
        同樣YAFFS2文件係統支持使用MTD驅動層和VFS層
這也是一般在嵌入式Linux或者μClinux操作係統中使用
YAFFS2文件係統的常用 方法。除此之外YAFFS2還帶有
NAND Flash芯片驅動並為嵌入式係統提供了直接訪問文件係
統的API用戶可以不使用Linux中的MTD和VFS直接對文
件進行操作。圖1 為嵌入式係統的文件係統結構。
  
        YAFFS2中的YAFFS2 Direct提供了直接的文件係統界
麵因此在那些沒有VFS層的嵌入式係統中也可使用YAFFS2。
YAFFS2文件係統的使用範圍要比Cramfs和 JFFS2文件係統
廣泛但是需要注意的是YAFFS2隻能用在NAND Flash儲存
設備上。
  結論         這3種嵌入式文件係統在嵌入式係統中的應用非常廣泛
但是又具有各自的特點。表2 比較了3種文件係統的主要性能
並歸納出各自最適用的領域。
  
具體分析如下  
1. Cramfs是最早的一種嵌入式文件係統它隻儲存了最少的信
息對文件內容進行了壓縮運行速度比較  
快。但是由於其不能寫入不支持超過16 MB大小的文件因
此廣泛地應用於儲存空間小、文件係統內容  
較少並且不需要用戶寫入的嵌入式係統中。  
2. JFFS2是一種較早的Flash專用文件係統。目前已有很多
JFFS2應用於μClinux以及嵌入式Linux的例子。事  
實上它已經成為新版Linux中的一種標準文件係統。  
同時它對NOR Flash和NAND Flash提供支持針對兩種Flash
設備共同的特性提供掉電保護和損耗平衡等  
功能可供用戶讀寫十分適合於同時用到這兩種Flash設備的
嵌入式係統。  
3. YAFFS2是專為NAND Flash設計的文件係統它充分考慮
了NAND Flash設備的特性支持ECC校驗提   供掉電保護和損耗平衡功能運行和掛載速度都比JFFS2要快。
它支持操作係統廣泛包括常見的嵌入  
式Linux、WinCE、μClinux。由於它提供Direct界麵因此稍
加修改也可使用在沒有操作係統的嵌入式  
係統中。目前被廣泛應用於使用NAND Flash作為儲存設備的
嵌入式係統中。
 
        針對具體應用可以在考察各種文件係統特點的基礎上
選擇更適合自身係統的一種文件係統解決方案。比如在許多以
NAND Flash為儲存介質的應用係統中都用到「Cramfs
YAFFS2」文件係統。以Cramfs作為根文件係統既提高了啟
動速度也能保護根文件不 受破壞使用YAFFS2作為用戶文
件係統在保證用戶可以自由讀寫文件的基礎上提高了文件係
統的安全性和運行速度不失為一種優良的嵌入式文件係統解
決方案。 

 由 於嵌入式係統自身存在一些特殊要求使得一些傳

統的文件係統 (如FAT、EXT2等) 並不十分適合。專

用的嵌入式文件係統應有一些自身的特性如文件係統

麵對的儲存介質特殊性、文件係統應具有的跨平台的安

全性以及整個係統的實時性等。本 文介紹了3種源

碼開放的嵌入式文件係統Cramfs、JFFS2、YAFFS2

詳細分析比較了這3種文件係統的主要性能並根據分

析結果指出了各自的適 用領域 

 Cramfs、JFFS2、YAFFS2是3種性能優越專用於嵌入式係

統的文件係統。本文通過對這3種文件係統的設計原理和主要性

能進行分析與比較歸 納出各自的選型依據據和適用領域。

 

三種文件係統的介紹 Cramfs         Cramfs是Linux的創始人Linus Torvalds開發的一種隻讀

文件係統采用了zlib壓縮壓縮比一般可以達到12但仍

可以做到高效的隨機讀取。在Linux係統中通常把不需 要經

常修改的目錄壓縮存放在係統引導時再將壓縮文件解開。

Cramfs並不需要一次性地把文件係統的所有內容都解壓到內存

中而隻是在係統需要訪問某 個位置的數據時馬上計算出該數據在Cramfs中的位置將其解壓縮到內存之中然後通過對

內存的訪問來獲取需要讀取的數據。

  JFFS2         JFFS意為「Journaling Flash File System」該文件係統

是瑞典Axis通信公司開發的一種基於Flash內存的日誌文件係

統。該公司於1999年在GNU/Linux上發行了第一 版JFFS文

件係統後來經過Redhat公司的發展現在已經發行了第二個

版本的JFFS2其全部程序代碼都是可供研究開發的。它在設

計時充分考慮了嵌 入式係統中Flash內存的讀寫特性確保在

係統掉電時正在讀寫的文件不受影響同時其儲存策略以及

抗疲勞性等方麵也在第一版的基礎上進行了改進。 目前JFFS2

廣泛應用於嵌入式係統中尤其是嵌入式μClinux操作係統中。

  YAFFS2         YAFFS意為「Yet Another Flash File System」是目前

唯一一個專門為NAND Flash設計的文件係統。它采用了類日誌

結構結合NAND Flash的特點提供了損耗平衡和掉電保護機

製可以有效地避免意外掉電對文件係統一致性和完整性的影

響。Aleph One公司於2002年5月發布了第一版YAFFS程序

代碼用戶可以很方便地在網站上下載到。第一版的YAFFS隻

支持每頁512字節的NAND Flash。 YAFFS2是YAFFS的升級版即支持每頁512字節的NAND Flash內存也支持每頁

2048字節的NAND Flash內存。

  Flash內存 Flash設備特點

        相對於傳統儲存介質Flash內存具有如下優點  

˙ 可靠性高采用Flash為儲存介質可以確保100萬次以上的

可靠寫入  

˙ 儲存速度快寫入∕讀取均可接近1Mb/s  

˙ 使用方便具有很強的環境適應能力。

 

        但是由於其製造製程的問題還存在以下缺點  

˙ 讀取和寫入以頁為單位擦除以塊為單位  

˙ 易出現隨機壞塊  

˙ 塊與塊之間使用不均衡會導致壽命問題。

  NOR Flash和NAND Flash

        基於NOR技術的Flash內存是最早出現的Flash內存它

具有以下特點  

˙ 程序和數據可存放在同一芯片上擁有獨立的數據總線和地址

總線支持快速隨機讀取允許係統直接從Flash中讀取程序代碼並執行而無需先將程序代碼下載至RAM中再執行  

˙ 可以單字節或單字程序化但必須以塊為單位進行擦除操作。

 

        由於NOR Flash內存的擦除和程序化速度較慢而塊尺寸

又比較大因此擦除和程序化操作所花費的時間很長。目前

NOR Flash內存大多隻用於儲存嵌入式係統的啟動程序代碼。

 

        NAND Flash內存可以順序讀取儲存單元的內容由於製

程上的進步其容量越來越大單位價格越來越便宜正逐步成

為Flash內存的主流。NAND Flash內存具有以下特點

˙ 以頁為單位進行讀寫操作以塊為單位進行擦除操作頁大小

為512字節或2048字節每頁不僅有  

數據區還有幾十字節的空閑區。  

˙ 數據、地址采用同一總線接口串行讀取。  

˙ 芯片尺寸小接腳少單位成本低。  

˙ 芯片內含有失效塊並且在使用過程中可能會出現隨機壞塊。  

       

        表1 比較了這兩種Flash內存的性能參數。

   三種嵌入式文件係統主要性能分析與比較         數據安全、運行速度、占用資源、使用範圍等是嵌入式文

件係統的主要性能指針。下麵從這幾個方麵入手對這三種嵌入

式文件係統進行分析與比較。

  數據安全         當前的嵌入式係統主要使用固態Flash芯片作為儲存設備。

由於Flash設備自身的特點以及嵌入式係統工作環境的複雜多

樣性如何保證數據的安全是嵌入 式文件係統首先要考慮的問

題。數據安全主要包括數據冗餘和掉電保護等部分。

  資料冗餘

        提高數據安全性的最有效措施是增加數據的冗餘而數據的大量冗餘又給維護資料一致性

帶來困難。對此應進行合理取舍在盡量降低冗餘的前提下確保數據的安全性和可靠性。  

        Cramfs文件係統是一種隻讀文件係統文件係統內容不可

更改設計思想遵循「隻儲存最少的信息」甚至沒有時間戳之類的信息除了數據包的CRC校驗 信息外幾乎沒有別的數據

冗餘。

 

        JFFS2文件係統是典型的日誌結構的文件係統它儲存的

數據是日誌式數據信息。JFFS2在Flash上隻有兩種類型的數據

實 體j.ffs2_raw_inode和jffs2_raw dirent。前者包含文件的管

理信息後者用於描述文件在文件係統中的位置。真正的數據信

息就保持在jffs2_raw_inode節點的後麵大部分 管理的信息都

是在係統掛載之後建立起來的。兩種數據實體有著公共的文件頭

結構jffs2 _ unknown_node。在這個結構裏有個jint32 _t類型

的hdr_crc變量它代表文件頭部中其它域的CRC校驗值。這

說明JFFS2文件係統使用的是CRC循環冗餘校驗碼。

 

        YAFFS2文件係統是一種類日誌文件係統專用於NAND

型Flash設備。其儲存數據的基本單位是chunk相當於Flash

的頁。Chunk中的 數據包括兩部分一部分是數據區占用Flash

的一頁另一部分是文件信息及冗餘數據區占用Flash頁的

OOB區。其冗餘數據主要是ECC校驗資 料對於小頁每頁

512字節的Flash每頁有6字節的ECC數據對於大頁每

頁2048字節的Flash每頁有24字節的ECC資 料。

  掉電保護         掉電保護的目的是在係統意外失去供電的情況下保證

係統運行狀態的確定性以及記錄數據的完整性當係統供電恢複

後現場數據可以及時恢複避免係統產生 混亂。很多文件係

統出於運行速度考慮在程序運行過程中常將數據暫存在

SDRAM中一旦係統意外掉電往往會造成數據丟失。

 

        Cramfs文件係統將文件係統內容解壓到內存中由於其不

能寫入文件係統的內容無法更改因此不存在掉電保護的問題。

 

        JFFS2是一種日誌結構文件係統因此不論電源以何種方

式在哪個時刻停止供電JFFS2都能保持數據完整性。當係統

遭受不正常斷電後重新啟動 時JFFS2自動將係統恢複到斷電

前最後一個穩定狀態。需要注意的是文件係統在最後一個穩定

狀態之後發生的任何改變都無法進行恢複。

 

        YAFFS2是一種類日誌文件係統可以在意外掉電重啟後

自動提供可靠的數據記錄防止文件係統的崩潰。它使用獨立的

日誌文件跟蹤文件係統內容的變化。舉 例來說當應用程序需

要寫Flash的某一頁時它首先修改的是存放於文件日誌中的一

塊鏡像隻有當日誌中的鏡像複製到文件係統中後數據才真實

地寫到該 頁上。當發生意外掉電重啟後YAFFS2沒有像JFFS2

那樣使用舊文件完全代替新寫文件而是選擇用新文件完全代替舊的文件或者已寫部分使用新文 件未寫部分使用舊文件。

這種方式增強了掉電時未完全寫入文件的安全性能特別是當意

外掉電發生在數據區時意外掉電時的文件幾乎被完好地保存下

來。

  運行速度         運行速度可以從以下幾個方麵考察文件係統掛載速度

讀文件速度寫文件速度等。這裏預設的儲存介質是NAND

Flash。

 

        一般而言壓縮的、隻讀的文件係統在啟動時需要將文件

係統解壓到SDRAM中這在一定程度上會減緩文件係統掛載速

度。但是Cramfs文件係統在設計 時充分考慮了係統掛載的時

間並沒有一次性地把文件係統的所有內容都解壓到內存中而

隻是在係統需要訪問某個位置的數據時迅速計算出該數據在

Cramfs中的位置將其解壓縮到內存之中再進行訪問操作。

由於其讀文件速度隻是找出文件地址以及訪問內存的操作所以

無論是掛載速度還是讀文 件速度 Cramfs文件係統都比

JFFS2和YAFFS2文件係統要快。

 

        JFFS2文件係統的掛載可以分為以下幾個步驟進行  

1. 檢查每個節點CRC校驗碼的合法性在內存中為每個節點每個節點分配必需的相關的結構  

2. 掃瞄每個i節點的物理節點鏈表建立鏈接  

3. 釋放掃瞄過程中使用的臨時信息。

 

        可以看出這個過程還是很複雜的更重要的是在JFFS2

文件係統被掛載時需要對整個Flash儲存區域進行掃瞄這就

耗費了大量的時間因此 JFFS2文件係統的開機速度非常緩慢。

與JFFS2相比YAFFS2減少了一些功能掛載時隻需掃瞄Flash

內存的空閑區根據從OOB備份資 料區中讀取的yaffs_tags

信息判讀是文件頭頁麵還是資料頁麵再根據相應信息在內存中

為每個文件建立一個對應的yaffs_object對 象。由於YAFFS2

在係統加載時隻需掃瞄各個頁麵的OOB區即可建立起整個文

件係統的結構而不需要像JFFS2那樣掃瞄整個Flash設備

因此大 大加快了文件係統的啟動速度。但是YAFFS2仍然要

求對整個Flash設備所有頁的空閑進行掃瞄這就導致當Flash

設備儲存空間變大時係統掃瞄 時間會直線上升。

 

        在文件係統運行時JFFS2需要維護幾個鏈表來管理擦寫

塊。根據擦寫塊上的內容一個擦寫塊可能會在不同的鏈表上。

具體來說當一個擦寫塊上都是合法 valid的節點時它會

在clean_list上當一個擦寫塊包含至少一個過時obsolete

的節點時它會在dirty_list上當 一個擦寫塊被擦寫完畢並被寫入Cleanmarker節點後它會在free_list上。正是以這些

鏈表為基礎 JFFS2文件係統才可以實現垃圾回收、損耗平衡

等性能。文件係統掛載時YAFFS2在內存中建立一個層次結構

的索引可以看作是一個文件樹。樹的最底 層指向實際存放文

件的頁麵高層則是一層層的索引目錄。文件樹是通過一個聯合

結構的節點來實現的。聯合結構是固定大小32字節當它

處於最底層時 由16個2字節入口來查找頁麵ID當處於其

它層時由8個4字節指針指向其它更低層的節點。每個文件對

應一個文件樹便於檢索。在以NAND Flash為儲存介質的嵌入

式係統中YAFFS2的文件讀寫性能都優於JFFS2。

  占用資源         在嵌入式係統中內存和外部內存資源匱乏需要節約使

用。因此占用的內存和外部內存資源量也是衡量嵌入式文件係統

的一個重要指針。

 

        如果使用RAMDISK方式運行文件係統那麼在係統運行

之後首先要把Flash上的映像文件解壓到內存中才可以開始

運行程序。這樣同樣的程序代碼 不僅在外部內存中占據了空

間而且由於解壓縮還在內存中占用了更大的空間。Cramfs

雖然是一個壓縮式的文件係統但前麵已介紹過它並不需要一

次性地將所有內容解壓到內存之中。由於其對文件內容的壓縮因此無論是外部內存還是內存 Cramfs都比JFFS2和YAFFS2

占用更少的資源。

 

        JFFS2將文件係統的數據和原數據以節點的形式儲存在

Flash上其冗餘數據隻是節點頭部的CRC校驗碼並且在儲

存時對節點的數據進行了壓縮。與之 相比YAFFS2不僅儲存

了頁數據的ECC校驗碼並且沒有Flash設備OOB區儲存數

據而是用來儲存頁節點信息。其映像也是由若幹個頁麵組成

沒 有對數據進行壓縮因此YAFFS2文件係統映像大大超過了

JFFS2文件係統映像。實驗表明普通YAFFS2映像的大小約

為同樣JFFS2映像大小的 2倍。當文件係統在內存中運行時

JFFS2在內存中定義了若幹鏈表YAFFS2在內存中為每個文

件創建一個文件樹。盡管為每個文件建立一個文件 樹需要消耗

掉不少的內存但是比起維護JFFS2所需的鏈表消耗的內存

還是少一些。在實際運行中YAFFS2占用的內存要小於JFFS2

文件係 統。

  使用範圍         要使用Cramfs或JFFS2文件係統離不開MTD驅動程

序層的支持。MTDMemory Technology Device是Linux中

的一個儲存設備通用界麵層。雖然也可以建立在RAM上但它

是專為基於Flash的設備而設計的。MTD包含特定Flash 芯片的驅動程序 Flash芯片驅動向上層提供讀、寫、擦除等基本

的Flash操作方法。MTD對這些操作進行封裝後向用戶層提供

MTD char和MTD block類型的設備。MTD char類型的設備包

括/dev/mtd0等可以對Flash的原始字符訪問MTD block類

型的設備包括/dev/mtdblock0等將Flash模擬成塊設備這樣

就可以在這些塊設備上創建Cramfs或JFFS2等格式的文 件係

統。在對用戶層的界麵上 Cramfs或JFFS2文件係統還需要

操作係統VFS虛擬文件係統的支持。 

 

        同樣YAFFS2文件係統支持使用MTD驅動層和VFS層

這也是一般在嵌入式Linux或者μClinux操作係統中使用

YAFFS2文件係統的常用 方法。除此之外YAFFS2還帶有

NAND Flash芯片驅動並為嵌入式係統提供了直接訪問文件係

統的API用戶可以不使用Linux中的MTD和VFS直接對文

件進行操作。圖1 為嵌入式係統的文件係統結構。

  

        YAFFS2中的YAFFS2 Direct提供了直接的文件係統界

麵因此在那些沒有VFS層的嵌入式係統中也可使用YAFFS2。

YAFFS2文件係統的使用範圍要比Cramfs和 JFFS2文件係統

廣泛但是需要注意的是YAFFS2隻能用在NAND Flash儲存

設備上。

  結論         這3種嵌入式文件係統在嵌入式係統中的應用非常廣泛

但是又具有各自的特點。表2 比較了3種文件係統的主要性能

並歸納出各自最適用的領域。

  

具體分析如下  

1. Cramfs是最早的一種嵌入式文件係統它隻儲存了最少的信

息對文件內容進行了壓縮運行速度比較  

快。但是由於其不能寫入不支持超過16 MB大小的文件因

此廣泛地應用於儲存空間小、文件係統內容  

較少並且不需要用戶寫入的嵌入式係統中。  

2. JFFS2是一種較早的Flash專用文件係統。目前已有很多

JFFS2應用於μClinux以及嵌入式Linux的例子。事  

實上它已經成為新版Linux中的一種標準文件係統。  

同時它對NOR Flash和NAND Flash提供支持針對兩種Flash

設備共同的特性提供掉電保護和損耗平衡等  

功能可供用戶讀寫十分適合於同時用到這兩種Flash設備的

嵌入式係統。  

3. YAFFS2是專為NAND Flash設計的文件係統它充分考慮

了NAND Flash設備的特性支持ECC校驗提   供掉電保護和損耗平衡功能運行和掛載速度都比JFFS2要快。

它支持操作係統廣泛包括常見的嵌入  

式Linux、WinCE、μClinux。由於它提供Direct界麵因此稍

加修改也可使用在沒有操作係統的嵌入式  

係統中。目前被廣泛應用於使用NAND Flash作為儲存設備的

嵌入式係統中。

 

        針對具體應用可以在考察各種文件係統特點的基礎上

選擇更適合自身係統的一種文件係統解決方案。比如在許多以

NAND Flash為儲存介質的應用係統中都用到「Cramfs

YAFFS2」文件係統。以Cramfs作為根文件係統既提高了啟

動速度也能保護根文件不 受破壞使用YAFFS2作為用戶文

件係統在保證用戶可以自由讀寫文件的基礎上提高了文件係

統的安全性和運行速度不失為一種優良的嵌入式文件係統解

決方案。 

最後更新:2017-04-03 16:49:01

  上一篇:go 從遠程Oracle服務器上同步複製數據到本地備份庫
  下一篇:go Hi3531 SDK v2.0.8.0 安裝