Yaffs 檔案系統分析

2021-10-14 06:09:39 字數 4306 閱讀 6915

1 yaffs檔案系統結構

1.1 簡介

1.1.1 應用場合

yaffs(yet another flash file system)檔案系統是專門針對nand快閃儲存器設計的嵌入式檔案系統,目前有yaffs和yaffs2兩個版本,兩個版本的主要區別之一在於yaffs2能夠更好的支援大容量的nand flash晶元。

yaffs檔案系統有些類似於jffs/jffs2檔案系統,與之不同的是jffs1/2檔案系統最初是針對nor flash的應用場合設計的,而nor flash和nand flash本質上有較大的區別,所以儘管jffs1/2 檔案系統也能應用於nand flash,但由於它在記憶體占用和啟動時間方面針對nor的特性做了一些取捨,所以對nand來說通常並不是最優的方案。

1.1.2 nor和nand的比較

基本上nor比較適合儲存程式**,其容量一般較小(比如小於32mb),**較高,而nand容量可達1gb以上,**也相對便宜,適合儲存資料。一般來說,128mb以下容量nand flash 晶元的一頁大小為528位元組,用來存放資料,另外每一頁還有16位元組的備用空間(sparedata,oob),用來儲存ecc校驗/壞塊標誌等資訊,再由若干頁組成乙個塊,通常一塊為32頁16k。

與nor相比,nand不是完全可靠的,每塊晶元出廠時都有一定比例的壞塊存在,對資料的訪問不是使用位址對映而是通過暫存器的操作,序列訪問資料。

1.2 yaffs檔案系統資料在nand上的儲存方式

yaffs對檔案系統上的所有內容(比如正常檔案,目錄,鏈結,裝置檔案等等)都統一當作檔案來處理,每個檔案都有乙個頁面專門存放檔案頭,檔案頭儲存了檔案的模式、所有者id、組id、長度、檔名、parent object id等資訊。因為需要在一頁內放下這些內容,所以對檔名的長度,符號鏈結物件的路徑名等長度都有限制。

前面說到對於nand flash上的每一頁資料,都有額外的空間用來儲存附加資訊,通常nand驅動只使用了這些空間的一部分,yaffs正是利用了這部分空間中剩餘的部分來儲存檔案系統相關的內容。以512+16b為乙個page的nand flash晶元為例,yaffs檔案系統資料的儲存布局如下所示:

0..511

資料區域

512..515

yaffs tag

516data status byte

517block status byte 壞塊標誌位

518..519

yaffs tag

520..522

後256位元組資料的ecc校驗結果

523..524

yaffs tag

525..527

前256位元組資料的ecc校驗結果

可以看到在這裡yaffs一共使用了8個byte用來存放檔案系統相關的資訊(yaffs_tags)。這8個byte的具體使用情況按順序如下:

bits

content 20

chunkid,該page在乙個檔案內的索引號,所以檔案大小被限制在2^20 page 即512mb 2

2 bits serial number 10

bytecount 該page內的有效位元組數 18

objectid 物件id號,用來唯一標示乙個檔案 12

ecc, yaffs_tags本身的ecc校驗和 2

unused

其中serial number在檔案系統建立時都為0,以後每次寫具有同一objectid和chunkid的page的時候都加一,因為yaffs在更新乙個page的時候總是在乙個新的物理page上寫入資料,再將原先的物理page刪除,所以該serial number可以在斷電等特殊情況下,當新的page已經寫入但老的page還沒有被刪除的時候用來識別正確的page,保證資料的正確性。

objectid號為18bit,所以檔案的總數限制在256k即26萬個左右。

最後以上這些是針對yaffs1而言,對於yaffs2因為針對chunk size大於1k的nand flash,在tags各分量及總體尺寸上都做了修改,以便更快更好的處理大容量的nand flash晶元。由於tag尺寸的增大,在512+16b型別的nand flash上就乙個trunk對應乙個page的情況,目前就無法使用yaffs2檔案系統了。

由於檔案系統的基本組織資訊儲存在頁面的備份空間中,因此,在檔案系統載入時只需要掃瞄各個頁面的備份空間,即可建立起整個檔案系統的結構,而不需要像jffs1/2 那樣掃瞄整個介質,從而大大加快了檔案系統的載入速度。

1.3 yaffs檔案系統在記憶體中的組織方式

1.3.1 supperblock

操作檔案系統的第一步自然是取得superblock了,yaffs檔案系統本身在nand flash上並不存在所謂的superblock塊,完全是在檔案系統mount的過程中由read_super函式填充的,不過有意思的一點是,由於物理上沒有儲存superblock塊,所以nand flash上的yaffs檔案系統本身沒有儲存filesystem的魔數(magicnum),在記憶體中superblock裡的s_magic引數也是直接賦值的,所以儲存在nand flash上的任何檔案系統都能被當作yaffs檔案系統mount上來,只是資料都會被當作錯誤資料放在lost+found目錄中,不知道這算不算yaffs檔案系統的乙個bug。

通常乙個具體的檔案系統在vfs的super_block結構中除了通用的資料外,還有自己專用的資料,yaffs檔案系統的專用資料是乙個yaffs_devicestruct結構,主要用來儲存一些相關軟硬體配置資訊,相關函式指標和統計資訊等。

1.3.2 檔案在記憶體中的組織方式

除了對應於儲存在nand flash上的object而建立起來的yaffs_object以外,在read_super執行過程中還會建立一些虛擬物件(fake object),這些fake object在nand flash上沒有對應的物理實體,比如在建立檔案目錄結構的最初,yaffs會建立四個虛擬目錄(fake directory):rootdir, unlinkeddir, deletedir, lostnfounddir分別用作根目錄,unlinked物件掛接的目錄,delete物件掛接的目錄,無效或零時資料塊掛接的目錄。

通過建立這些yaffs_object,yaffs檔案系統就能夠將儲存在nand flash上資料系統的組織起來,在記憶體中維護乙個完整的檔案系統結構。

2 yaffs檔案系統整合及應用相關

2.1 系統移植

這裡所謂移植,就是在特定的軟硬體環境裡編譯出yaffs檔案系統模組了。目前最新的yaffs版本的**裡主要是按照2.6核心的方式寫的kconfig和makefile,對於2.4核心來說,改起來也很簡單,基本上,只需要:

2.2 yaffs檔案系統的製作和使用

2.2.1 通過yaffs image檔案製作yaffs檔案系統

2.2.2 其它方式製作yaffs檔案系統

2.2.3 沒有相應的nand裝置時如何測試yaffs檔案系統

沒有相應的nand flash裝置包含兩種情況:

ø 硬體上沒有nand flash,開發板上沒有或者想在主機環境中測試yaffs檔案系統

ø 沒有合適的page size的nand flash晶元,比如板上nand flash晶元為512+16的格式,但是想要試驗yaffs2檔案系統。

yaffs提供了兩種用來在這種情況下測試yaffs檔案系統的途徑。

2.2.3.1 nandemul

yaffs source包裡包含了mtdemul目錄,yaffs2中該目錄下的檔案主要是nandemul2k.c用來模擬2k page size的nand flash。在yaffs中則是nandemul.c用來模擬512位元組page size的nand flash。

稍微修改一下makeflie將編譯出來的模組插入核心,將在/dev/mtd /dev/mtdblock目錄下建立乙個新的mtd裝置。然後就可以將該裝置當作乙個物理的mtd nand裝置分割槽進行相關的操作,可以在上面建立yaffs檔案系統,mount umount等等。這種方法不僅適用於yaffs檔案系統,同樣也適用於其它可用於nand裝置的檔案系統。

2.2.3.2 yaffsram

根據yaffs 官方文件的描述,通過mount –t yaffsram none /mountpoint 可以在記憶體中建立乙個yaffs分割槽,這有些類似於ramfs。不過,在試驗最新版本的yaffs2檔案系統時,該功能並不可用,只有yaffs1檔案系統的**包裡包含了相關的**。

hadoop檔案系統分析

hadoop分布式檔案系統 架構和設計 為了容錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本係數都是可配置的。應用程式可以指定某個檔案的副本數目。副本係數可以在檔案建立的時候指定,也可以在之後改變。通過乙個機架感知的過程,namenode可以確定每個datanode所屬的機架id。乙個簡...

檔案 FAT檔案系統分析

一 硬碟儲存結構 硬碟總體儲存圖 採用希捷硬碟120g,winhex檢視,主引導記錄mbr如下 硬碟分割槽表,64位元組,分四個分割槽,每個分割槽佔16位。擴充套件分割槽,就像加入了乙個u盤,第乙個扇區512位元組,為分割槽引導記錄dbr,還有其他。二 fat檔案儲存基本原理 fat表就是乙個簇號的...

SIM卡檔案系統分析

本文出自 hi.baidu.com roooy sim卡全稱為subscriber identity module,它不僅僅能包含使用者的 簿和簡訊息,而且一些智慧型sim卡還包含了乙個微型的處理器晶元和乙個檔案系統在裡面。這個在sim卡裡面的檔案系統是基於iso 7816這個標準來設計而且完全參照...