YAFFS文件系統(tǒng)簡介_第1頁
YAFFS文件系統(tǒng)簡介_第2頁
YAFFS文件系統(tǒng)簡介_第3頁
YAFFS文件系統(tǒng)簡介_第4頁
YAFFS文件系統(tǒng)簡介_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

YAFFS文件系統(tǒng)簡介

一、YAFFS文件系統(tǒng)簡介

YAFFS(YetAnotherFlashFileSystem)文件系統(tǒng)是專門為

NandFlash設(shè)計的文件系統(tǒng),有些類似與JFFS/JFFS2文件系統(tǒng),不同

之處是JFFS/JFFS2文件系統(tǒng)最初是為NorFlash的應(yīng)用場合設(shè)計的,

而NorFlash和NandFlash本質(zhì)上有較大的區(qū)別(壞塊、備用區(qū)、容

量),所以盡管JFFS/JFFS2文件系統(tǒng)也能應(yīng)用于NandFlash,但由于

它的內(nèi)存占用和啟動時間針對NorFlash做了特殊取舍,所以對于

NanFlash來說通常不是最優(yōu)方案(性能較低和啟動速度稍慢)。而

YAFFS利用NandFlash提供的每個頁面16字節(jié)或64字節(jié)的Spare區(qū)

(備用區(qū))空間來存放ECC和文件系統(tǒng)的組織信息,能夠?qū)崿F(xiàn)錯誤檢

測和壞塊處理。這樣的設(shè)計充分考慮了NandFlash以頁面為存取單元

的特點,將文件組織成固定大小的數(shù)據(jù)段,能夠提高文件系統(tǒng)的加載

速度。(垃圾回收算法+貪心算法)

YAFFS目前有YAFFS、YAFFS2兩個版本(YAFFS3還在研發(fā)階段,

沒有面市),一般來說,YAFFS對小頁面(512B+16B/頁)有很好的

支持,YAFFS2對更大的頁面(2K+64B/頁)支持更好。

二、YAFFS文件系統(tǒng)在NandFlash上的組織方式

YAFFS對文件系統(tǒng)上的所有內(nèi)容(比如正常文件,目錄,鏈接,

設(shè)備文件等等)都統(tǒng)一當(dāng)作文件來處理,每個文件都有一個頁面專門

存放文件頭,文件頭保存了文件的模式、所有者ID、組ID、長度、文

件名、ParentObjectID等信息。因為需要在一頁內(nèi)放下這些內(nèi)容,

所以對文件名的長度,符號鏈接對象的路徑名等長度都有限制。

YAFFS充分利用了NandFlash的〃備用區(qū)〃空間,這個備用空間

是指每個頁的16自己的Spare區(qū),通常不作為存儲數(shù)據(jù)的空間。

YAFFS用了其中的6個字節(jié)作為頁面數(shù)據(jù)的ECC,1個字節(jié)用作壞塊

狀態(tài)標(biāo)志字,1個字節(jié)用作數(shù)據(jù)狀態(tài)標(biāo)志字,其余的8個字節(jié)用來存放

文件系統(tǒng)的組織信息。詳細(xì)閱讀Linux源碼中yaffs\yaffs_guts.h文件

中yaffs.Spare數(shù)據(jù)結(jié)構(gòu),參見下圖所示:

以512B+16B為一頁(16B表示每頁面的備用空間為16字節(jié))

的NandFlashK9F1208為例,文件系統(tǒng)數(shù)據(jù)的存儲結(jié)構(gòu)如下表所示。

字節(jié)起始字節(jié)終止長度(字內(nèi)容描述

節(jié))

0511512數(shù)據(jù)區(qū)域(文件數(shù)據(jù)或文件

頭)

5125154YAFFSTAGi

5165161數(shù)據(jù)狀態(tài)標(biāo)志字

5175171壞塊狀態(tài)標(biāo)志字

5185192YAFFSTAG2

5205223后256字節(jié)數(shù)據(jù)的ECC校驗

結(jié)果

5235242YAFFSTAG2

5255273前256字節(jié)數(shù)據(jù)的ECC校驗

結(jié)果

表格YAFFS文件系統(tǒng)數(shù)據(jù)的存儲布局

這里YAFFS文件系統(tǒng)共使用了8個字節(jié)(64Bit)用來存放文件系

統(tǒng)相關(guān)的信息,這8個字節(jié)的具體使用情況,請詳細(xì)閱讀Linux源碼

中yaffs\yaffs_guts.h文件中yaffs_Tags數(shù)據(jù)結(jié)構(gòu),請參見下圖和下

表所小。

位數(shù)內(nèi)容說明

20Chunkld該page在一個文件內(nèi)的索引號,所以文件

大小被限制512M

2serialNumber2位序列號

10byteCount該頁內(nèi)的有效字節(jié)數(shù)

18objected文件ID號,用來唯一標(biāo)識一個文件

12ECCyaffs_Tags本身的ECC校驗和

2unusedStuffUnUsed

表格YAFFS文件系統(tǒng)組織信息分配表

其中serialNumber在文件系統(tǒng)創(chuàng)建時初始化為0,以后每次寫具

有統(tǒng)一ObjectID和ChunkID的頁的時候都加1,因為YAFFS文件系

統(tǒng)在更新一個頁的時候總是在一個新的物理頁上寫入數(shù)據(jù),再將原先

的物理也刪除,所以根據(jù)SerialNumber,當(dāng)新的頁已經(jīng)寫入但老的頁

還沒有被刪除的時候用來時被正確的頁,以保證特殊環(huán)境下(例如突

然掉電),數(shù)據(jù)的正確性。

由于文件系統(tǒng)的基本組織信息保存在頁面的備用區(qū)中,因此,在

文件系統(tǒng)加載時只需要掃描所有頁面的備用區(qū)空間,即可建立在RAM

中建立起整個文件系統(tǒng)的結(jié)構(gòu),從而大大加快了文件系統(tǒng)的加載速度。

(比JFFS文件系統(tǒng)啟動速度快的原因:JFFS需要掃描整個芯片數(shù)據(jù)并

進(jìn)行分析)

三、YAFFS文件系統(tǒng)在內(nèi)存上的組織方式

通常一個具體的文件系統(tǒng)都會在VFS的SuperBlock結(jié)構(gòu)中存儲

通用的數(shù)據(jù)結(jié)構(gòu),同時也有自己的私有數(shù)據(jù)。YAFFS文件系統(tǒng)的專有

數(shù)據(jù)是yaffs.DeviceStruct的數(shù)據(jù)結(jié)構(gòu),主要用來存儲軟硬件配置信

息,相關(guān)函數(shù)指針和統(tǒng)計信息等。

YAFFS文件系統(tǒng)的SuperBlock塊是在文件系統(tǒng)mount加載的過

程中由read_super()函數(shù)填充的,由于物理上沒有存儲SuperBlock塊,

所以NandFlash上的YAFFS文件系統(tǒng)本身沒有存儲文件系統(tǒng)的魔術(shù)

NandFlash上數(shù)據(jù)系統(tǒng)的組織起來,在內(nèi)存中維護一個完整的文件系

統(tǒng)結(jié)構(gòu)。

四、YAFFS文件系統(tǒng)對MTD的依賴

YAFFS文件系統(tǒng)通常是運行在MTD之上的,因此需要根據(jù)實際應(yīng)

用修改MTD的驅(qū)動,以K9F4G08UOM為例子,找至I」

driver/mtd/nand/smdk2440.c,修改:mtd_partition分區(qū)結(jié)構(gòu)體、

相關(guān)控制引腳函數(shù)smdkXXX_hwcontro、初始化函數(shù)

smdkXXX_nand_init等函數(shù),并將NandFlash驅(qū)動加入MTD子系

統(tǒng)。

五、YAFFS文件系統(tǒng)的制作和移植

yaffs源代碼包的utils目錄下包含了

mkyaffsimage/mkyaffs2image的代碼,簡單的修改一下Makefile

里的內(nèi)核路徑就能編譯出mkyaffsimage/mkyaffs2imageTMo運行

mkyaffsimagedirimagename可以制作出yaffs文件系統(tǒng)的鏡像。

但是,需要注意的是,制作出來的yaffsimage文件與通常的文件系統(tǒng)

的image文件不同,因為在image文件里除了以512字節(jié)為單位的

一個page的data數(shù)據(jù)外,同時緊跟在后還包括了16字節(jié)為單位的

NandFlash備用區(qū)OOB的數(shù)據(jù)。所以實際上是以528個字節(jié)為單位

的。就是因為包含了這額外的16字節(jié)/page的數(shù)據(jù),所以通常的下載

其它類型image的工具就無法正常下載yaffsimage了,需要修改你

所使用的下載工具的代碼,使得它能將yaffsimage中的這些額外數(shù)據(jù)

也寫入NandFlashOOB中。

這里還有一點需要注意的是,通過mkyaffsimage制做出來的

image其00B中也包含它自己計算的ECC校驗數(shù)據(jù),其校驗算法有

可能和MTD驅(qū)動的校驗算法不同,如果在內(nèi)核中由MTD來處理ECC,

會造成MTD認(rèn)為所有的page都校驗錯誤。要解決這個問題通常有兩

種方法:

第一、重新配置內(nèi)核,進(jìn)入文件系統(tǒng)模塊的選擇界面,選中"Lets

YaffsdoitsownECU,同時將MTD中的ECC校驗關(guān)閉。但是這種

不校驗數(shù)據(jù)ECC的做法,在系統(tǒng)使用過程中產(chǎn)生壞塊位時,就會顯示

出系統(tǒng)的健壯和容錯性很差。

第二、通過修改bootloader

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論