基于M25P32 SPI Flash的TFFS設(shè)計(jì)與實(shí)現(xiàn)
在函數(shù)formatVolume中,mount可進(jìn)行卷操作,當(dāng)內(nèi)存的數(shù)據(jù)結(jié)構(gòu)準(zhǔn)備好后,F(xiàn)TL層即可調(diào)用函數(shù)flDosFormat來(lái)創(chuàng)建DOS。其中首先創(chuàng)建隱藏扇區(qū),以用于記錄該卷的部分信息,然后分別創(chuàng)建MBR、FAT和ROOT目錄;這樣,DOS創(chuàng)建完成后,再執(zhí)行dosFsDevCreat函數(shù),當(dāng)然就無(wú)須格式化,找到0扇區(qū)自然就找到了MBR,因?yàn)镈OS是FTL創(chuàng)建的。
從更深層次講,F(xiàn)TL層之所以創(chuàng)建DOS層,是因?yàn)橹挥蠪TL層才知道有哪些扇區(qū)是可以供DOS使用的,哪些扇區(qū)是DOS不能使用的(作為FTL層管理使用),也正是因?yàn)镈OS層不了解FTL層的運(yùn)作情況,所有的扇區(qū)映射關(guān)系都被FTL層隱蔽,因而導(dǎo)致DOS層無(wú)法在上層作出有利于Flash擦寫(xiě)等優(yōu)化動(dòng)作,如大文件寫(xiě)入時(shí)的字節(jié)數(shù)更新,F(xiàn)AT表更新等操作,都會(huì)嚴(yán)重浪費(fèi)FTL層的映射關(guān)系運(yùn)算。
4 基于M25P32 SPI Flash的TFFS設(shè)計(jì)
對(duì)于TFFS的實(shí)現(xiàn),涉及到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文件系統(tǒng),需要加入相關(guān)的組件,雖然也可以在該文件中直接加入相應(yīng)的配置宏,但很容易造成遺漏和有些需要依賴的宏沒(méi)有定義或者沖突,本文采用的方法是建一個(gè)bootable的tornado工程,而后在這個(gè)工程中通過(guò)加入TFFS和DOSFS的相關(guān)組件來(lái)編譯這個(gè)工程,從而生成一個(gè)prjParams.h文件,該文件里就包含了剛剛加入的組件對(duì)應(yīng)的宏,因而,組件與組件之間依賴也是安全的,不會(huì)有任何沖突,最后再在Config.h中包含這個(gè)文件即可。
4.2 sysTffs.c文件的修改
該文件用于提供socket層的bsp實(shí)現(xiàn)代碼。如果鏡像文件包含TFFS相關(guān)組件,那么,系統(tǒng)啟動(dòng)時(shí)就會(huì)按照如下過(guò)程自動(dòng)調(diào)用sysTffsInit()函數(shù):
usrRoot()→tffsDrv()→flInit()→flRegisterComponent ()→sysTffslnit ()
sysTffsInit ()函數(shù)會(huì)依次調(diào)用socket注冊(cè)函數(shù)simmRegisterOfsl (),注冊(cè)函數(shù)數(shù)量視需要構(gòu)建的文件系統(tǒng)數(shù)量而定,本文構(gòu)建了1個(gè)文件系統(tǒng)ofsl,并在simmRegisterOfsl()函數(shù)中對(duì)文件系統(tǒng)的基地址進(jìn)行了設(shè)置,同時(shí)對(duì)FLSocket()結(jié)構(gòu)體中的毀掉處理函數(shù)進(jìn)行了掛接,掛接函數(shù)也在該文件中實(shí)現(xiàn),如卡上電、斷電、寫(xiě)保護(hù)等。
對(duì)sysTffsFormaOfsl()函數(shù)的格式化參數(shù)可根據(jù)自己的需要進(jìn)行修改。
4.3 tffsConfig.c和tffSMtd.c文件的修改
tffsConfig.c文件的修改就是在mtdTalbe []表中注冊(cè)Flash識(shí)別函數(shù)iUnifiedIdentifyOfsl();而tffsConfig.c文件則用于實(shí)現(xiàn)iUnifiedldentifyOfsl()函數(shù),iUnifiedIdentifyOfsl()函數(shù)對(duì)FLFlash結(jié)構(gòu)體中的回調(diào)函數(shù)進(jìn)行了掛接,如flash的讀、寫(xiě)、擦除等,掛接函數(shù)的具體實(shí)現(xiàn)可在Dry_MvSFlash.cpp文件中以一個(gè)類的方式提供針對(duì)M25P32 spi Flash操作的所有驅(qū)動(dòng)接口。
4.4 TFFS文件系統(tǒng)的安裝
通過(guò)上面的過(guò)程,socket層和mtd層就都準(zhǔn)備好了,下面便可以安裝tffs文件系統(tǒng)。安裝時(shí),首先用sysTffsFormatOfsl()函數(shù)按照上面設(shè)定的參數(shù)格式化TFFS文件系統(tǒng),而后通過(guò)usrTffsConfig(0,0,”ofsl”)函數(shù)接口在已建好的TFFS上掛接DOS文件系統(tǒng),成功后,即可通過(guò)open、read、write等來(lái)操作Flash上的文件系統(tǒng),也可以通過(guò)FTP方式用IE訪問(wèn)該文件系統(tǒng)中的內(nèi)容。
4.5 Makefile文件的修改
對(duì)于Makefile的修改非常簡(jiǎn)單,因?yàn)閹讉€(gè)和TFFS相關(guān)的源文件都是以.pl的方式被鏈人bsp工程的,所以只需要在makefile文件中把這個(gè)文件加入即可,即在makefile中加了如下的宏定義:
MACH_EXTRA+=../ArmPri/ARMARCH5gnu/ArmBspPrj.pl
5 結(jié)束語(yǔ)
本文對(duì)VxWorks下TFFS文件系統(tǒng)的層次結(jié)構(gòu)和FTL層的啟動(dòng)過(guò)程、塊映射算法、垃圾回收算法以及用FTL創(chuàng)建DOSFS進(jìn)行了分析,給出了在M25P32 SPI Flash上創(chuàng)建TFFS文件系統(tǒng)和將TFFS掛在DOSFS的實(shí)現(xiàn)方法。通過(guò)對(duì)TFFS核心層FIL的分析給出的TFFS實(shí)現(xiàn)方法,可以從更基礎(chǔ)的層面來(lái)認(rèn)識(shí)VxWorks中的TFFS文件系統(tǒng),從而給TFFS文件系統(tǒng)的問(wèn)題定位和實(shí)現(xiàn)帶來(lái)新的方法。
評(píng)論