• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > VxWorks文件系統和Flash的TFFS設計與實現

    VxWorks文件系統和Flash的TFFS設計與實現

    作者: 時間:2012-04-12 來源:網絡 收藏

    0 引言

    的應用中,基于flash的通常都采用DOS+FAT+FTL的結構。

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

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

    1 文件系統的總體結構

    VxWorks文件系統的總體結構以及在整個文件系統的位置如圖l所示。



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

    2 TFFS文件系統的分層

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



    3 FTL層分析

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

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

    本文引用地址:http://www.czjhyjcfj.com/article/149241.htm

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

    3.1 FTL的啟動過程分析

    在我們調用函數tffsDevCreate創建TFFS文件系統時,會以參數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和擦除次數都相同,所以整個文件系統的共用信息都可以從首先找到的頭中讀出來。

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

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

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

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

    (5)判斷并關閉交換page

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

    (6)檢查page的完整性

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

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

    3.2 TFFS的塊映射

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


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 梧州市| 叙永县| 香河县| 宾川县| 英德市| 胶南市| 万安县| 阳新县| 吉首市| 儋州市| 班玛县| 两当县| 泾源县| 乐至县| 慈利县| 英超| 辽宁省| 阜平县| 楚雄市| 长兴县| 宜都市| 绵阳市| 离岛区| 来安县| 汨罗市| 长葛市| 鄂州市| 逊克县| 资阳市| 将乐县| 库车县| 日土县| 酉阳| 临桂县| 柯坪县| 吉安市| 永年县| 社会| 连云港市| 东阳市| 象州县|