<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > VxWorks文件系統、Flash的TFFS設計與實(shí)現

VxWorks文件系統、Flash的TFFS設計與實(shí)現

作者: 時(shí)間:2010-08-08 來(lái)源:網(wǎng)絡(luò ) 收藏


3.3 垃圾收集過(guò)程

FTL格式化后,可用扇區將被不斷申請使用,原有扇區被不斷的廢棄,中可用的free扇區越來(lái)越少,但這并不是由于上層DOS真的使用了這么多扇區,而是FTL為了方便管理、為了不需要每次擦除一塊而付出的管理代價(jià)。所以,當中的可用扇區少于用戶(hù)要申請寫(xiě)入的扇區時(shí),FTL層就必須解決這些垃圾問(wèn)題,這個(gè)過(guò)程在FTL中稱(chēng)為垃圾回收(garbage collect)。

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

3.4 FFL創(chuàng )建的DOS

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

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

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

上述formatFTL函數執行完以后,FTL就已經(jīng)準備好,可以接受上層的扇區讀寫(xiě)函數了(當然還沒(méi)有內容可以讀寫(xiě))。

本文引用地址:http://dyxdggzs.com/article/151704.htm

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

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

4 基于M25P32 SPI

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

4.1 Config.h的相關(guān)配置

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

4.2 sysTffs.c文件的修改

該文件用于提供socket層的bsp代碼。如果鏡像文件包含TFFS相關(guān)組件,那么,系統啟動(dòng)時(shí)就會(huì )按照如下過(guò)程自動(dòng)調用sysTffsInit()函數:

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

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

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

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

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

4.4 TFFS文件系統的安裝

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

4.5 Makefile文件的修改

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

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

5 結束語(yǔ)

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


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>