當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]VxWorks文件系統(tǒng)、Flash的TFFS設計與實現

0 引言

在VxWorks的應用系統(tǒng)中,基于flash的文件系統(tǒng)通常都采用DOS+FAT+FTL的結構。

一般情況下,磁盤文件系統(tǒng)大多是基于sector的文件系統(tǒng),磁盤按照物理上分為柱面、磁盤、扇區(qū),扇區(qū)是基于塊的文件系統(tǒng)操作的基本存儲單位,磁盤的容量都是根據這些數據計算出來的,每個扇區(qū)大小通常都是512bytes。

VxWorks文件系統(tǒng)中的DOSFS是MS-DOS兼容的文件系統(tǒng),可基于塊對物理介質進行操作。由于Fish的物理特性,對Flash作基于塊(不同于Flash的擦除塊)的操作必須由軟件作封裝實現,這就是TFFS所起的作用。

1 VxWorks文件系統(tǒng)的總體結構

VxWorks文件系統(tǒng)的總體結構以及TFFS在整個文件系統(tǒng)的位置如圖l所示。



Tomado下的TFFS文件系統(tǒng)是Tornado的一個可選組件,它可為種類繁多的Flash設備提供一個統(tǒng)一的塊設備接口。在Tornado2.2版本中自帶的TFFS版本為2.0,在文件系統(tǒng)中,TFFS的功能相當于磁盤驅動,通過TFFS可使上層的DOSFS或RTll文件系統(tǒng)像操作普通的標準磁盤一樣來操作Flash。

2 TFFS文件系統(tǒng)的分層

圖2所示為TFFS文件系統(tǒng)的分層圖。圖中的Core Layer內核層可將其他層連接起來協同工作;翻譯層主要實現DOS和TFFS之間的交互、管理文件系統(tǒng)和Flash各個物理塊的關系,同時支持TFFS的各種功能,如磨損均衡、錯誤恢復等;MTD層執(zhí)行底層的程序驅動(map、read、write、erase等);socket層的名稱來源于可以插拔的socket存儲卡,主要提供與具體的硬件板相關的驅動。



3 FTL層分析

FTL是TFFS文件系統(tǒng)的核心,它是PCMCIS的一項標準,意思是Flash Translation Laycr Specification,這種類型的文件系統(tǒng)是目前嵌入式系統(tǒng)中最流行的,很多公司都提供這種文件系統(tǒng)的相關解決方案。

PTL為DOS BPB/FAT與Flash之間的中間層,FTL利用現成的基于塊的文件系統(tǒng)(例如DOSFS)來實現應用層的操作,實質上就是在Flash設備上模擬磁盤塊設備的實現,為基于塊的文件系統(tǒng)提供統(tǒng)一的接口。FTL通過以下幾步來模擬磁盤驅動:首先是在Flash擦除塊之外定義小的讀寫塊(相當于磁盤扇區(qū));其次是邏輯扇區(qū)(對塊文件系統(tǒng)如DOSFS呈現的地址)和物理地址(Flash的實際地址)之間的轉換;然后管理Flash,使得能在空閑的地方寫入數據。其核心就是將DOS上的扇區(qū)映射到Flash上去。

為了實現DOS層從邏輯上看扇區(qū)是連續(xù)的,可隨時對任意bit讀寫操作,FTL必須提供對Flash芯片的管理,包括向上層(DOS層)提供可以任意讀寫的操作接口,向下對Flash的擦除、寫入、讀取統(tǒng)一管理,同時還必須提供磨損均衡,以防止一個擦除塊提前損壞。

3.1 FTL的啟動過程分析

在我們調用函數tffsDevCreate創(chuàng)建TFFS文件系統(tǒng)時,會以參數FL_MOUNT_VOLUME調用函數flcall→mountvolume→flmount→mountFTL,函數mountFTL是FTL層的加載函數人口,處理過程首先是初始化FTL,然后就可按下列步驟進行:

(1)查找第一個合法的unit頭信息

合法性的判斷依據是unit header頭上的標志CISF..FTL100和部分頭部的flag信息,由于bsp已把FS的相關信息注冊到FTL的數據結構中,所以,FTL層可以找到第一塊unit,并可以向后查,直到找到合法的unit為止。

(2)檢驗信息合法性

將所有有用的信息都讀出到內部數據結構中后,即可檢驗信息合法性。由于unit header中的Unit ID和擦除次數都相同,所以整個文件系統(tǒng)的共用信息都可以從首先找到的頭中讀出來。

(3)給Mount每一個unit建立page表

這是mount最重要的過程,對每個unit調用mountunit()函數,并在mountunit()函數中首先判斷,如果是非法unit,則作為交換unit,然后對每個BAM選項進行處理,并對垃圾BAM、空閑BAM進行統(tǒng)計,如果是緩沖的BAM數據和交換page的VBM,則將此page的邏輯扇區(qū)信息記錄到內存的page表中,以便后續(xù)映射訪問查詢使用,而對于非緩沖的BAM數據,則不作處理,另外,對于交換page的VBM,則進行記錄??紤]到上述過程,可見其系統(tǒng)中的page VBM和緩沖的數據BAM分布在各個unit的各個角落,需要將所有的VBM和緩沖數據BAM收集起來建立整個交換page表,這是FTL標準層設計時就要決定的。

(4)檢驗邏輯unit的完整性

當所有的unit都mount完成后,每個邏輯unit都應存在,否則mount失敗。

(5)判斷并關閉交換page

如果系統(tǒng)中已存在交換page,則對系統(tǒng)中存在的交換page進行關閉操作,以便后面檢查page的完整性。

(6)檢查page的完整性

系統(tǒng)中的page表必須是完整的,這個表中包含有緩沖的數據BAM映射信息和更重要的page映射信息,因此,缺少任何一個,都將導致DOS的虛擬扇區(qū)無法映射到相應的邏輯扇區(qū)。

從上述過程可見,整個mount過程是將文件系統(tǒng)信息讀入內存數據結構并檢驗的過程,這個Mount PTL過程完成后,mountvolume ()函數即將隱蔽的0扇區(qū)和DOS的啟動扇區(qū)信息讀入內存數據結構,這樣,DOS就可以訪問FTL底層扇區(qū)了。

3.2 TFFS的塊映射

圖3中,FTL層將DOS上連續(xù)的扇區(qū)映射到Flash上某個R/W block塊中,同時在某個位置記錄一個映射表(稱為MAP表),該表中記錄了DOS的扇區(qū)映射到Flash中的哪個block,當DOS要進行讀操作時,FTL首先查詢這個MAP,以獲得映射信息,然后讀取相應的block信息并返回給DOS,從而實現讀映射。當DOS需要寫入操作時,可能存在將bit0修改為1的情況,于是FTL層將申請一個新的block塊,并將新信息寫入,然后修改map信息,記錄這個DOS扇區(qū)已經重新映射了,從而實現寫映射。所以,從邏輯上看,FTL層就實現了DOS扇區(qū)的映射和FLASH的寫入管理。

[!--empirenews.page--]

3.3 垃圾收集過程

FTL格式化后,可用扇區(qū)將被不斷申請使用,原有扇區(qū)被不斷的廢棄,系統(tǒng)中可用的free扇區(qū)越來越少,但這并不是由于上層DOS真的使用了這么多扇區(qū),而是FTL為了方便管理、為了不需要每次擦除一塊而付出的管理代價。所以,當系統(tǒng)中的可用扇區(qū)少于用戶要申請寫入的扇區(qū)時,FTL層就必須解決這些垃圾問題,這個過程在FTL中稱為垃圾回收(garbage collect)。

當FTL中的可用sector小于用戶要申請的扇區(qū)時,系統(tǒng)將啟動垃圾收集,但系統(tǒng)中有很多個unit,到底收集哪個unit呢?FTL會考慮磨損均衡,它將采用一個偽隨機的算法來決定收集策略:即用4/256的幾率選擇磨損情況少的塊來收集;252/256的幾率則根據垃圾最多為第一條件,當垃圾一樣時,判斷磨損次數小的優(yōu)先選擇。

3.4 FFL創(chuàng)建的DOS

TFFS的格式化函數需要調用tffsDevFormat來格式化,而不需要調用dosFsVolFormat來格式化;另外,在tffsDevFormat格式化參數中,需要傳人的參數含有FAT個數參數,其原因是DOS是FTL層創(chuàng)建的,而不是在FTL基礎上創(chuàng)建的,下面是TFFS的整個格式化過程:

tffsDevFormat→flcall(FL_FORMAT_VOLUME)→formatVolume→Format→formatFTL;

其中,函數formatFTL是執(zhí)行FTL層格式化的操作函數,操作時,首先根據格式化參數和BSP參數對內部數據結構初始化;然后再對每個unit進行格式化,在擦除后,即可寫入unitheader信息和控制BAM值;之后寫入unit No;最后申請每個page的空間;

上述formatFTL函數執(zhí)行完以后,FTL就已經準備好,可以接受上層的扇區(qū)讀寫函數了(當然還沒有內容可以讀寫)。

在函數formatVolume中,mount可進行卷操作,當內存的數據結構準備好后,FTL層即可調用函數flDosFormat來創(chuàng)建DOS。其中首先創(chuàng)建隱藏扇區(qū),以用于記錄該卷的部分信息,然后分別創(chuàng)建MBR、FAT和ROOT目錄;這樣,DOS創(chuàng)建完成后,再執(zhí)行dosFsDevCreat函數,當然就無須格式化,找到0扇區(qū)自然就找到了MBR,因為DOS是FTL創(chuàng)建的。

從更深層次講,FTL層之所以創(chuàng)建DOS層,是因為只有FTL層才知道有哪些扇區(qū)是可以供DOS使用的,哪些扇區(qū)是DOS不能使用的(作為FTL層管理使用),也正是因為DOS層不了解FTL層的運作情況,所有的扇區(qū)映射關系都被FTL層隱蔽,因而導致DOS層無法在上層作出有利于Flash擦寫等優(yōu)化動作,如大文件寫入時的字節(jié)數更新,FAT表更新等操作,都會嚴重浪費FTL層的映射關系運算。

4 基于M25P32 SPI Flash的TFFS設計

對于TFFS的實現,涉及到config.h、sysTffs.c、tffsConifg.c、tffsMtd.c、Makefile幾個文件的配置和修改,其中編譯是通過建立一個downloadalbe的tomado工程,來把這幾個.c源文件編譯進去生成.pl文件提供給bsp工程,而后由bsp工程把.pl文件編譯進去,從而生成bootable image。

4.1 Config.h的相關配置

要在vxworks映像中加入TFFS文件系統(tǒng),需要加入相關的組件,雖然也可以在該文件中直接加入相應的配置宏,但很容易造成遺漏和有些需要依賴的宏沒有定義或者沖突,本文采用的方法是建一個bootable的tornado工程,而后在這個工程中通過加入TFFS和DOSFS的相關組件來編譯這個工程,從而生成一個prjParams.h文件,該文件里就包含了剛剛加入的組件對應的宏,因而,組件與組件之間依賴也是安全的,不會有任何沖突,最后再在Config.h中包含這個文件即可。

4.2 sysTffs.c文件的修改

該文件用于提供socket層的bsp實現代碼。如果鏡像文件包含TFFS相關組件,那么,系統(tǒng)啟動時就會按照如下過程自動調用sysTffsInit()函數:

usrRoot()→tffsDrv()→flInit()→flRegisterComponent ()→sysTffslnit ()

sysTffsInit ()函數會依次調用socket注冊函數simmRegisterOfsl (),注冊函數數量視需要構建的文件系統(tǒng)數量而定,本文構建了1個文件系統(tǒng)ofsl,并在simmRegisterOfsl()函數中對文件系統(tǒng)的基地址進行了設置,同時對FLSocket()結構體中的毀掉處理函數進行了掛接,掛接函數也在該文件中實現,如卡上電、斷電、寫保護等。

對sysTffsFormaOfsl()函數的格式化參數可根據自己的需要進行修改。

4.3 tffsConfig.c和tffSMtd.c文件的修改

tffsConfig.c文件的修改就是在mtdTalbe []表中注冊Flash識別函數iUnifiedIdentifyOfsl();而tffsConfig.c文件則用于實現iUnifiedldentifyOfsl()函數,iUnifiedIdentifyOfsl()函數對FLFlash結構體中的回調函數進行了掛接,如flash的讀、寫、擦除等,掛接函數的具體實現可在Dry_MvSFlash.cpp文件中以一個類的方式提供針對M25P32 spi Flash操作的所有驅動接口。

4.4 TFFS文件系統(tǒng)的安裝

通過上面的過程,socket層和mtd層就都準備好了,下面便可以安裝tffs文件系統(tǒng)。安裝時,首先用sysTffsFormatOfsl()函數按照上面設定的參數格式化TFFS文件系統(tǒng),而后通過usrTffsConfig(0,0,”ofsl”)函數接口在已建好的TFFS上掛接DOS文件系統(tǒng),成功后,即可通過open、read、write等來操作Flash上的文件系統(tǒng),也可以通過FTP方式用IE訪問該文件系統(tǒng)中的內容。

4.5 Makefile文件的修改

對于Makefile的修改非常簡單,因為幾個和TFFS相關的源文件都是以.pl的方式被鏈人bsp工程的,所以只需要在makefile文件中把這個文件加入即可,即在makefile中加了如下的宏定義:

MACH_EXTRA+=../ArmPri/ARMARCH5gnu/ArmBspPrj.pl

5 結束語

本文對VxWorks下TFFS文件系統(tǒng)的層次結構和FTL層的啟動過程、塊映射算法、垃圾回收算法以及用FTL創(chuàng)建DOSFS進行了分析,給出了在M25P32 SPI Flash上創(chuàng)建TFFS文件系統(tǒng)和將TFFS掛在DOSFS的實現方法。通過對TFFS核心層FIL的分析給出的TFFS實現方法,可以從更基礎的層面來認識VxWorks中的TFFS文件系統(tǒng),從而給TFFS文件系統(tǒng)的問題定位和實現帶來新的方法。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯合牽頭組建的NVI技術創(chuàng)新聯盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯...

關鍵字: VI 傳輸協議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉