paper introduces the structure of TFFS,which is the flash file system of embedded real-time operating system VxWorks. It analyses the arithmetic and describes the constructing process on flash whose type is SST39VF160. At last it shows how to load VxWorks image through TFFS,this method is of much convenience in upgrading the system. Key
摘要:本文介紹了嵌入式實(shí)時操作系統(tǒng) VxWorks的 flash文件系統(tǒng) TFFS的結(jié)構(gòu),分析了其算法,描述了其在 SST39VF160型號flash上的構(gòu)建步驟。昀后以 TFFS作為 VxWorks映像的加載途徑,這種加載方式為系統(tǒng)的升級提供了極大的方便。
關(guān)鍵詞:嵌入式、VxWorks、TFFS
VxWorks是可裁減、高可靠的嵌入式實(shí)時操作系統(tǒng),它包括一個微內(nèi)核、強(qiáng)大且響應(yīng)時間上作了優(yōu)化的網(wǎng)絡(luò)支持、文件系統(tǒng)、I/O系統(tǒng)和C++支持的各種模塊。高可靠性、卓越的實(shí)時性及友好的用戶開發(fā)環(huán)境Tornado,使 VxWorks在航空航天、軍事、通信等高精尖技術(shù)及實(shí)時性要求高的場合獲得了廣泛運(yùn)用。
Flash作為一種安全、快速的存儲體,具有便攜、掉電數(shù)據(jù)不丟失等優(yōu)點(diǎn),目前已成為嵌入式系統(tǒng)中主要的數(shù)據(jù)和程序載體。TFFS文件系統(tǒng)是 M-systems公司為 VxWorks操作系統(tǒng)提供的定制實(shí)現(xiàn),它為種類繁多的 flash提供了統(tǒng)一的塊設(shè)備接口,和 Tornado實(shí)現(xiàn)了無縫連接,具有可重入、線程安全等特點(diǎn)。建立 TFFS后,就可以在它上面進(jìn)行文件操作了。
一、TFFS結(jié)構(gòu)
Flash作為一種存儲器,是作為塊設(shè)備通過 TFFS被 VxWorks管理的,TFFS在 VxWorks中的位置如圖 1所示。
應(yīng)用程序
500)this.style.width=500;" border=0>
TFFS由四層實(shí)現(xiàn):核心層和三個功能層。三個功能層為:翻譯層、 MTD層和 socket層,如圖 2所示。核心層將各其它個層關(guān)聯(lián)起來,處理全局性的問題,如垃圾回收、定時器;翻譯層主要實(shí)現(xiàn) DOS與 TFFS之間的交互,管理文件系統(tǒng)和 flash各個物理塊的關(guān)系,以及支持 TFFS的各種功能,如磨損均衡、錯誤恢復(fù); MTD層實(shí)現(xiàn) flash的底層編程,如讀、寫、擦除;Socket層提供了 TFFS與硬板之間的接口,負(fù)責(zé)電源管理、檢測設(shè)備插拔、窗口管理、 socket注冊。二、TFFS的塊映射及算法分析
TFFS為了將 flash抽象為普通的塊設(shè)備,將 flash存儲器映射為一系列連續(xù)的塊,實(shí)現(xiàn)了邏輯塊到物理塊的對應(yīng)關(guān)系,映射由映射圖管理,如圖 3所示,它在系統(tǒng)運(yùn)行過程中動態(tài)更新。
500)this.style.width=500;" border=0>
Flash是一種只可對連續(xù)空間進(jìn)行擦除操作的存儲器件,它的擦除次數(shù)有限,為了提高 flash的使用壽命, TFFS實(shí)現(xiàn)了一些優(yōu)化算法:均衡磨損、高效垃圾回收。這些算法的實(shí)現(xiàn)都是基于 TFFS所采用的動態(tài)塊映射圖,
1、均衡磨損算法
Flash 的可擦除次數(shù)雖然很大,但是是有限的,昀終, flash會老化,進(jìn)入只讀狀態(tài)。那些擦除次數(shù)頻繁的塊,會先進(jìn)入只讀狀態(tài)。為了使 flash各部分的磨損均衡, TFFS的映射圖隨著塊的改變、移動和垃圾回收而動態(tài)更新,通過不斷調(diào)整從邏輯塊到物理塊的映射關(guān)系,達(dá)到相對均衡的磨損水平。
2、垃圾回收算法
隨著數(shù)據(jù)的不斷寫入和數(shù)據(jù)的更改, flash會出現(xiàn)越來越多的臟塊,在擦除前不可再使用,如果不進(jìn)行垃圾回收再利用, flash的空間昀終會耗盡。通常 flash擦除單元包括很多塊,為了保證數(shù)據(jù)的一致性,TFFS先將回收單元的有效數(shù)據(jù)復(fù)制到別的單元,再更新映射圖,昀后擦除回收單元,用戶感覺不到數(shù)據(jù)的位置出現(xiàn)了變化。
3、塊分配算法
塊分配算法維持了一段存儲池,這段存儲池由一系列駐留同一可擦寫塊的空連續(xù)塊組成,當(dāng)這存儲池低于某一下限值時,塊分配算法觸發(fā)塊回收算法,尋找并回收昀符合下面標(biāo)準(zhǔn)的擦除單元:臟塊數(shù)量昀大;擦寫次數(shù)昀少;靜態(tài)數(shù)據(jù)昀多。除了這些可測量的算法,垃圾回收算法還考慮了隨機(jī)過程,這有助于垃圾回收涵蓋各個區(qū)域。
4、數(shù)據(jù)的可靠性算法
為了保證已經(jīng)存在 flash上的數(shù)據(jù)的安全,TFFS采用“先寫入再擦除”的算法,更新數(shù)據(jù)時,原來的數(shù)據(jù)先轉(zhuǎn)移到新的塊中,當(dāng)全部轉(zhuǎn)移成功后,更新動態(tài)映射圖,再擦除原來的塊。若數(shù)據(jù)的轉(zhuǎn)移途中出現(xiàn)異常,原有的數(shù)據(jù)仍然有效,映射圖也保持不變。三、基于 SST39VF160的 TFFS驅(qū)動開發(fā)
在構(gòu)建 TFFS過程中,涉及五個文件的修改: config.h、sysTffs.c、tffsConfig.c、 sst39vf160mtd.c、Makefile,其中, sst39vf160mtd.c根據(jù)所使用的 flash由用戶自主命名。當(dāng)定義了 TFFS的核心組件 INCLUDE_TFFS后,工程建立過程中會將 sysTffs.c包括進(jìn)相應(yīng)的 BSP目錄。為了便于修改,可將 target/src/drv/tffs目錄下的 tffsConfig.c拷貝到相應(yīng)的 BSP目錄下,昀后在該 BSP目錄下加入用戶編寫的 sst39vf160mtd.c。
1、在 config.c中進(jìn)行相關(guān)配置
本文中所描述的對象為一塊型號為 SST39VF160的 flash,集成開發(fā)開發(fā)環(huán)境為 Tornado2.2_for_ARM。要在 VxWorks映像中包含 TrueFFS文件系統(tǒng),需要做與之相關(guān)的配置,首先在 config.h中定義:
(1)使得 VxWorks的初始化代碼調(diào)用 tffsDrv()來創(chuàng)建管理 TrueFFS所需的結(jié)構(gòu)和全局變量,并為所有掛接了的 flash設(shè)備注冊 socket組件驅(qū)動。
(2)使得加入兩