技術(shù):YAFFS2文件系統(tǒng)在嵌入式系統(tǒng)中的實(shí)現(xiàn)

2013-08-29 16:56 來源:電源網(wǎng) 作者:鈴鐺

隨著嵌入式技術(shù)的不斷發(fā)展,嵌入式系統(tǒng)的應(yīng)用越來越廣泛,人們對(duì)于嵌入式系統(tǒng)功能的要求也越來越高,相應(yīng)地其大容量數(shù)據(jù)存儲(chǔ)和管理變得越來越重要。相對(duì)硬盤而言,F(xiàn)LASH等非易失性存儲(chǔ)器具有體積小、功耗低、成本低、抗震強(qiáng)等優(yōu)點(diǎn),已在嵌入式系統(tǒng)中被大量作為存儲(chǔ)設(shè)備使用,而大容量非易失數(shù)據(jù)存儲(chǔ)方案的應(yīng)用還存在成本和軟件支持方面的問題需要克服。大頁NAND FLASH具有寫入速度快、容量大、成本低等優(yōu)點(diǎn),適合于需要進(jìn)行數(shù)據(jù)存儲(chǔ)的場(chǎng)合。YAFFS2作為專門支持大頁NAND FLASH的文件系統(tǒng)在U-Boot和嵌入式Linux上一直沒有得到正式支持。本文結(jié)合部隊(duì)?wèi)?yīng)用實(shí)際,在嵌入式Linux系統(tǒng)中實(shí)現(xiàn)了大頁NAND FLASH和YAFFS2文件系統(tǒng)的結(jié)合,為裝備的數(shù)據(jù)存儲(chǔ)處理搭建起了小型的智能化平臺(tái)。本文內(nèi)容安排如下,首先介紹系統(tǒng)存儲(chǔ)方案特點(diǎn)和YAFFS2數(shù)據(jù)在大頁NAND FLASH上的儲(chǔ)存方式,然后詳細(xì)敘述系統(tǒng)移植和文件系統(tǒng)制作過程,最后對(duì)移植結(jié)果進(jìn)行測(cè)試。

l 系統(tǒng)存儲(chǔ)方案設(shè)計(jì)

某國(guó)產(chǎn)化設(shè)備用于取代隨裝多臺(tái)套設(shè)備,除完成原設(shè)備的數(shù)據(jù)記錄功能外,還需進(jìn)行數(shù)據(jù)翻譯、判讀,數(shù)據(jù)分析處理,二維顯示和三維動(dòng)態(tài)復(fù)現(xiàn)等功能;同時(shí),需存儲(chǔ)裝備長(zhǎng)時(shí)間工作輸出的所有原始數(shù)據(jù)信息,類似黑匣子功能,以供事后分析使用。具有程序量大,數(shù)據(jù)需實(shí)時(shí)存儲(chǔ),且數(shù)據(jù)存儲(chǔ)量大的特點(diǎn)。板上存儲(chǔ)設(shè)備包括SDRAM和FLASH,SDRAM為易失性存儲(chǔ)器,作為程序的運(yùn)行空間和記錄數(shù)據(jù)的緩存空間;FLASH為非易失性存儲(chǔ)器,用于存儲(chǔ)系統(tǒng)軟件程序和記錄數(shù)據(jù)。

嵌入式系統(tǒng)中應(yīng)用的FLASH主要有NORFLASH和NAND FLASH兩種。NOR FLASH的塊大小范圍為64~128 KB,其容量一般為l~32 MB,可作為嵌入式設(shè)備的啟動(dòng)設(shè)備,適合于代碼存儲(chǔ)。NAND FLASH的塊大小范圍為8~64 KB,容量一般為8~512 MB,適合于數(shù)據(jù)存儲(chǔ)。它們之間的主要差別有以下幾點(diǎn)。

(1)速度。在寫數(shù)據(jù)和擦除數(shù)據(jù)時(shí),NANDFLASH支持整塊擦寫操作,其速度比NOR FLASH要快得多,兩者相差近千倍;讀取時(shí),NAND FLASH要先向芯片發(fā)送地址信息進(jìn)行尋址才能開始讀寫數(shù)據(jù),而NOR FLASH的操作則是以字或字節(jié)為單位進(jìn)行的,直接讀取,所以讀取數(shù)據(jù)時(shí),NOR FLASH效率更高。

(2)容量和成本。NOR FLASH的每個(gè)存儲(chǔ)單元與位線相連,增加了芯片內(nèi)位線的數(shù)量,不利于存儲(chǔ)密度的提高。在面積和工藝相同的情況下,NANDFLASH的容量比NOR FLASH要大得多,生產(chǎn)成本更低。

(3)易用性。NAND FLASH的I/O端口采用復(fù)用的數(shù)據(jù)線和地址線,必須先通過寄存器串行地進(jìn)行數(shù)據(jù)存取,各個(gè)產(chǎn)品或廠商對(duì)信號(hào)的定義不同,增加了應(yīng)用的難度;NOR FLASH有專用的地址引腳來尋址,較容易與其他芯片進(jìn)行連接,另外還支持片上執(zhí)行XIP(eXecute In Place),應(yīng)用程序可以直接在FLASH內(nèi)部運(yùn)行,簡(jiǎn)化了產(chǎn)品設(shè)計(jì)。

(4)可靠性。由于FLASH的電器特性,在讀/寫數(shù)據(jù)過程中,會(huì)產(chǎn)生比特位反轉(zhuǎn),造成一位或幾位數(shù)據(jù)錯(cuò)誤。NAND FLASH位反轉(zhuǎn)的幾率比NOR FLASH高,在使用時(shí)需要使用EDC/ECC算法。NANDFLASH還可能會(huì)隨機(jī)分布?jí)膲K。

(5)耐久性。FLASH由于寫入和擦除數(shù)據(jù)時(shí)會(huì)導(dǎo)致介質(zhì)的氧化降解,導(dǎo)致芯片老化,所以并不適合頻繁地擦寫,NAND FLASH的擦寫次數(shù)是100萬次,而NOR FLASH只有10萬次。

001

基于以上分析,為了滿足經(jīng)常性的進(jìn)行實(shí)時(shí)快速大容量數(shù)據(jù)存儲(chǔ)和較長(zhǎng)使用壽命的要求,采用NANDFLASH來存儲(chǔ)操作系統(tǒng)和數(shù)據(jù),其復(fù)雜操作、比特位反轉(zhuǎn)和壞塊等問題可以通過文件系統(tǒng)解決。NORFLASH因?yàn)槌霈F(xiàn)位反轉(zhuǎn)和壞塊的幾率小,并且讀取速度快,用來存儲(chǔ)啟動(dòng)程序,能保證正常啟動(dòng)系統(tǒng)的前提下提高設(shè)備反應(yīng)時(shí)間。整個(gè)系統(tǒng)的存儲(chǔ)空間分配如圖1所示。

整個(gè)系統(tǒng)存儲(chǔ)空間由SDRAM,NOR FLASH,NAND FLASH組成。其中,sDRAM分成程序空間(Prog Space)和數(shù)據(jù)空間(Data Space)。NORFLASH存儲(chǔ)系統(tǒng)啟動(dòng)程序U-Boot;NAND FLAsH分成程序空間(Prog Space)和數(shù)據(jù)空間(Data Space),程序空間中固化存儲(chǔ)Linux操作系統(tǒng)和YAFFS2文件系統(tǒng)及相應(yīng)的應(yīng)用程序,在U-Boot的控制下,通過頁傳輸方式讀入SDRAM程序空間中;數(shù)據(jù)空間中存儲(chǔ)來自前端的原始數(shù)據(jù),該數(shù)據(jù)在SDR-AM中打包,以頁方式將數(shù)據(jù)寫入NAND FLASH中,提高數(shù)據(jù)寫入速度。

對(duì)小頁NAND FLASH的文件系統(tǒng)支持已有比較多的編程實(shí)例可借鑒,而對(duì)本文使用的大頁NANDFLASH的編程支持還沒有完整的說明。因此,移植嵌入式操作系統(tǒng),以建立對(duì)大頁NAND FLASH支持的文件系統(tǒng)是該存儲(chǔ)方案需解決的關(guān)鍵問題。

2 YAFFS/YAFFS2文件系統(tǒng)分析

目前廣泛應(yīng)用的嵌入式文件系統(tǒng)有JFFS/JFFS2(JournaIling FLASH File Systern) 和 YAFFS/YAFFS2(Yet Another FLASH File Syst-em)。JFFS/JFFS2文件系統(tǒng)主要針對(duì)NOR FLASH設(shè)計(jì),在NAND FLASH上性能不佳。YAFFS/YAFFS2文件系統(tǒng)是專門針對(duì)NAND FLASH設(shè)計(jì),其具有可寫入、修改并能永久保存文件的特性,并提供了損耗平衡和掉電保護(hù)。與JFFS相比,它減少了一些功能,因此速度更快、占用內(nèi)存更少。此外YAFFS自帶NANDFLASH芯片驅(qū)動(dòng),并為嵌入式系統(tǒng)提供了直接訪問文件系統(tǒng)的API,用戶可以不使用Linux中的MTD和VFS,直接對(duì)文件進(jìn)行操作。

YAFFS文件系統(tǒng)已發(fā)展為兩個(gè)版本,YAFFS和YAFFS2。YAFFS版本只支持512 B的小頁NANDFLASH。而YAFFS2作為YAFFS的升級(jí)版,在向下兼容小頁NAND FLASH的同時(shí)也能夠更好地支持2 KB的大頁NAND FLASH。YAFFS2的性能與YAFFS相比有很大提高,表1為YAFFS,YAFFS2(512 B×8),YAFFS2(2 KB×8)三者性能比較,從測(cè)試結(jié)果可以看出,YAFFS2和2 KB大頁NANDFLASH的結(jié)合更好地提高了存儲(chǔ)器操作效率。

002

YAFFS2文件系統(tǒng)在設(shè)計(jì)時(shí)就充分考慮了大頁NAND FLASH的結(jié)構(gòu),根據(jù)大頁NAND FLASH以頁面為單位存取的特點(diǎn),將文件組織成固定大小的頁,利用大頁NAND FLASH提供的每個(gè)頁面(2 112 B,其中前2 048 B存儲(chǔ)數(shù)據(jù))64 B的備用空間(SpareData,OOB)來存放ECC和文件系統(tǒng)的組織信息,這樣不僅能夠?qū)崿F(xiàn)錯(cuò)誤檢測(cè)和壞塊處理,還能夠提高文件系統(tǒng)的加載速度。以三星公司的K9F1G08UOA的NANDFLASH為例,它的單片存儲(chǔ)容量為128 MB,由1 024 block組成,每個(gè)塊包含64 page,每個(gè)頁均包含一個(gè)2 048 B的數(shù)據(jù)區(qū)和64 B的備用空間,總共包含2 112 B。結(jié)構(gòu)如圖2所示。

003

表2說明了YAFFS2文件系統(tǒng)數(shù)據(jù)在NANDFLASH的備用空間內(nèi)的存儲(chǔ)布局。

004

blockState:描述該塊的狀態(tài)。如果不是OxFF,就說明是壞塊。相對(duì)應(yīng)的是,所有正常的塊,里面所有數(shù)據(jù)都是OxFF的。

chunkld:描述該頁在一個(gè)文件內(nèi)的索引,所以文件大小被限制在232×2 KB。chunkld為O,說明此頁面保存的是文件頭。不為O,說明是數(shù)據(jù)頁面。文件內(nèi)偏移量為0,即放在第一個(gè)頁面的文件,其chunkId為1,后面的以此類推。

ObjectID:描述對(duì)象ID號(hào),用來惟一標(biāo)示一個(gè)文件。所以YAFFS2文件系統(tǒng)支持的文件總數(shù)限制在232個(gè)。

1 2 > 
嵌入式 YAFFS2

相關(guān)閱讀

暫無數(shù)據(jù)

一周熱門