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