<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中TFFS文件系統的構建

嵌入式操作系統VxWorks中TFFS文件系統的構建

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

摘要:目前的多使用FLASH作為主存,因此,如何有效管理FLASH上的數據非常重要。文章以MX29LV160BT芯片為例,討論了在操作下NorFlash上建立的一般步驟,從而為FLASH上的數據管理提供了理想的選擇方式,同時(shí)也為開(kāi)發(fā)者和用戶(hù)升級程序提供了方便。

關(guān)鍵詞:FlashMTD系統

系統正隨著(zhù)Internet的發(fā)展而在各個(gè)領(lǐng)域得到廣泛的應用,作為一個(gè)優(yōu)秀的,實(shí)現了比其他實(shí)時(shí)更好的有效性、商用性、可裁減性以及互操作性,廣泛應用在通信、軍事、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。

如今越來(lái)越多的中,通常都使用FLASH作為主存介質(zhì)。許多開(kāi)發(fā)者和用戶(hù)為了方便以后升級用戶(hù)程序,通常在FLASH上建立系統,建立文件系統后,我們就可以象在windows操作系統下對硬盤(pán)操作一樣,進(jìn)行數據的拷貝、刪除以及文件的建立等操作。

NOR和NAND是現在市場(chǎng)上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開(kāi)發(fā)出NORflash技術(shù),徹底改變了原先有EPROM和EEPROM一統天下的局面。NOR的特點(diǎn)是芯片內執行XIPexecuteInPlace,這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,因此在嵌入式系統得到廣泛的應用。

一、TFFS文件系統結構簡(jiǎn)介

Tornado的TrueFFS是和VxWorks兼容的一種M-SystemsFlite實(shí)現方式,版本為2.0。它為種類(lèi)繁多的flash存儲設備提供了統一的塊設備接口,并且具有可重入、線(xiàn)程安全的特點(diǎn),支持大多數流行的CPU構架。有了Tornado的TrueFFS,應用程序對flash存儲設備的讀寫(xiě)就好象它們對擁有MS-DOS文件系統的磁碟設備的操作一樣。
如圖1所示,TrueFFS由核心層(corelayer)和三個(gè)功能層,翻譯層(translationlayer),MTD層(MTDlayer),socket層(socketlayer)組成。

核心層(Corelayer):核心層主要起相互連接其他幾層的功能。同時(shí)它也可以進(jìn)行碎片回收、定時(shí)器和其他系統資源的維護。通常WindRiver公司將這部分內容以二進(jìn)制文件提供。

翻譯層主要實(shí)現TrueFFS和dosFs之間的高級交互功能。它也包含了控制flash映射到塊、wear-leveling、碎片回收和數據完整性所需的智能化處理功能。目前有三種不同的翻譯層模塊可供選擇。選擇哪一種層要看你所用的flash介質(zhì)是采用NOR-based,還是NAND-based,或者SSFDC-based技術(shù)而定。

  Socket層則是提供TrueFFS和板卡硬件(如flash卡)的接口服務(wù)。其名字來(lái)源于用戶(hù)可以插入flash卡的物理插槽。用來(lái)向系統注冊socket設備,檢測設備拔插,硬件寫(xiě)保護等。后面將詳細講解它的功能。

  MTD層(MemoryTechnologyDrivers)功能主要是實(shí)現對具體的flash進(jìn)行讀、寫(xiě)、擦、ID識別等驅動(dòng),并設置與flash密切相關(guān)的一些參數。TrueFFS已經(jīng)包含了支持Intel,AMD以及samsung部分flash芯片的MTD層驅動(dòng)。新的芯片需要新的MTD支持,你可以使用一個(gè)標準的接口來(lái)加入這些驅動(dòng)。

  以上四部分,我們通常要的工作就是后兩層。

  當在VxWorks下配置TrueFFS時(shí),你必須為每一層至少包含一個(gè)軟件模塊。后面我們將詳細討論。

二、MX29LV160BT芯片上建立TrueFFS文件系統

1、配置相關(guān)文件

在此,我以NorFlashMX29LV160BT為例,開(kāi)發(fā)工具為T(mén)ornado2.2forPPC。要在VxWorks映像中包含TrueFFS文件系統,首先必須在config.h文件中定義INCLUDE_TFFS。這使得VxWorks的初始化代碼調用tffsDrv()來(lái)創(chuàng )建管理TrueFFS所需的結構和全局變量,并為所有掛接了的flash設備注冊socket組件驅動(dòng)。在鏈接的時(shí)候,通過(guò)解析與tffsDrv()相關(guān)聯(lián)的符號(symbols)可以將TrueFFS所必需的軟件模塊鏈接到VxWorks映象中。

為了支持TrueFFS,每一個(gè)BSP目錄下都必須包含一個(gè)sysTffs.c文件。它將TrueFFS所有的層(翻譯層,socket層和MTD層)鏈接到一起并和VxWorks綁定。因此,我必須編輯這個(gè)文件并決定哪一種MTD和翻譯層模塊應該包含到TrueFFS中。即:

#defineINCLUDE_MTD_MX29LV/*MX29LV160BTMTDdriver*/
#defineINCLUDE_TL_FTL/*FTLtranslationlayer*/
#defineFLASH_BASE_ADRS0x2a10000/*Flashmemorybaseaddress*/
#undefFLASH_SIZE
#defineFLASH_SIZE0x001f0000/*Flashmemorysize,2M(parameterblock)*/

其他無(wú)關(guān)的MTDdriver包含頭都#undef掉,同時(shí)定義Flash在系統中的基地址和大小。另外,還必須編輯sysLib.c中的sysPhysMemDesc[]數組,將Flash基地址和大小加入到MMU中,以供將來(lái)訪(fǎng)問(wèn)Flash,否則訪(fǎng)問(wèn)Flash會(huì )失敗。如果BSP目錄下沒(méi)有sysTffs.c文件,那么我們可以從其他BSP目錄下拷貝一個(gè)即可,然后做上述修改,其他的內容基本可以不用修改。

接下來(lái)需要修改tffsConfig.c文件,為了方便管理,通常我們將src/drv/tffs/目錄下該文件拷貝到我們BSP目錄下,然后再做出修改。在MTDidentifyRoutinemtdTable[]表中加入如下語(yǔ)句:

#ifdefINCLUDE_MTD_MX29LV
mx29lvMTDIdentify,
#endif/*INCLUDE_MTD_MX29LV*/
并在該文件開(kāi)頭聲明。
#ifdefINCLUDE_MTD_MX29LV
FLStatusmx29lvMTDIdentify(FLFlashvol);
#endif/*INCLUDE_MTD_MX29LV*/
最后就是將我們的flash相關(guān)MTD驅動(dòng)加入到makefile中。即:
MACH_EXTRA=mx29lvMtd.o
為了方便我們調試MTD驅動(dòng),應該在重新編譯VxWorks映象前將諸如格式化flash、創(chuàng )建TrueFFS塊設備、綁定此塊設備到dosFs所必要的功能包含到VxWorks映像中。比如如下定義:
#defineINCLUDE_TFFS
#ifdefINCLUDE_TFFS
#defineINCLUDE_TFFS_DOSFS
#defineINCLUDE_TFFS_SHOW
#defineINCLUDE_DOSFS/*dosFsfilesystem*/
#defineINCLUDE_SHOW_ROUTINES/*showroutinesforsystemfacilities*/
#defineINCLUDE_TL_FTL
#defineINCLUDE_IO_SYSTEM
#defineINCLUDE_DISK_UTIL
#endif/*INCLUDE_DOSFS*/

2、MTD驅動(dòng)簡(jiǎn)介
做了上述配置后,進(jìn)入VxWorks操作系統后,我們在shell上利用tffsShow工具來(lái)顯示flash的信息。TffsShow函數最終會(huì )調用MTD驅動(dòng)中的mx29lvMtdIdentiy()函數,在mx29lvMtdIdentiy()函數主要是通過(guò)讀取MX29LV160BT芯片的設備和廠(chǎng)商ID來(lái)識別它,然后對FLFlash結構成員進(jìn)行初始化,最主要的幾個(gè)參數是:
type
Flash內存的JEDECID號。

erasableBlockSize

Flash內存的擦除塊大?。ㄗ止潱?。設置這個(gè)值時(shí)應考慮到interleaving。因此,通常通過(guò)如下方法來(lái)設置它的大小。
Vol.erasableBlockSize=MX29LV_MTD_SECTOR_SIZE*vol.interleaving;
對于MX29LV160BT,MX29LV_MTD_SECTOR_SIZE為64K字節。
chipSize
使用來(lái)TrueFFS文件系統的flash實(shí)際大?。ㄗ止潱?。
noOfChips
使用來(lái)TrueFFS文件系統的flash實(shí)際片數。
interleaving
Flash內存交叉因子(interleavingfactor)。即擴展數據總線(xiàn)的設備數。比如,一個(gè)32位數據總線(xiàn)上,我們可以使用4片8位或2片16位的設備。
map
指向flash內存映射(map)函數。該函數將flash映射到內存區。
read
指向flash內存的讀函數。在MTD驅動(dòng)識別函數中,這個(gè)成員函數已經(jīng)被初始化為缺省的讀函數。通常情況下,我們不需要再初始化它,否則還需要修改很多相關(guān)的函數。
write
指向flash內存的寫(xiě)函數。這個(gè)成員必須初始化,這是我們要做的一個(gè)重要工作。
erase
指向flash內存的擦除函數。這個(gè)成員必須初始化,這也是我們要做的一個(gè)重要工作。

針對FLFlash結構成員,我們所關(guān)心的兩個(gè)函數就是寫(xiě)和擦除函數。在mx29lvMtdIdentiy()函數中必須有如下定義:
vol.write=mx29lvWrite;
vol.erase=mx29lvErase;
在mx29lvWrite()函數中主要是實(shí)現將數據寫(xiě)到flash中。首先需要對扇區進(jìn)行解鎖,然后寫(xiě)入寫(xiě)命令,之后才能進(jìn)行數據的寫(xiě)入。最后需要判斷數據是否寫(xiě)完。為了確保操作成功,我們應該在寫(xiě)完每個(gè)數據后進(jìn)行數據的比較,比較正確后方能進(jìn)行下一個(gè)數據的操作。
在mx29lvErase()函數中主要是實(shí)現flash扇區的擦除。如今的flash一般都是按照扇區進(jìn)行擦除操作的。在擦除操作之前也應該首先對扇區進(jìn)行解鎖,然后寫(xiě)擦除建立和扇區擦除命令。擦除成功后,flash中的內容應該是0xffff。所以為了確保成功,我們還是應該在擦除后進(jìn)行比較,比較正確后方能進(jìn)入下一個(gè)扇區的擦除操作,否則返回擦除錯誤標志。
所以,對于MTD驅動(dòng)的調試,基本上就是調試寫(xiě)和擦除兩個(gè)函數。在調試過(guò)程中,我們可以在這兩個(gè)函數相應位置加入打印語(yǔ)句來(lái)調試。為了能調試這兩個(gè)函數,我們通過(guò)在shell上輸入命令tffsDevFormat來(lái)格式化flash,tffsDevFormat最終會(huì )調用mx29lvErase和mx29lvWrite函數,如果成功就會(huì )返回0,否則返回-1。當然也可以調用tffsDevCreate函數來(lái)驗證我們的寫(xiě)和擦除函數的正確性。圖2說(shuō)明了tffsDevCreate調用過(guò)程。

在shell上利用tffsShow來(lái)驗證mx29lvMtdIdentiy。
tffsShow
0:socket=RFA:type=0x2249,unitSize=0x10000,mediaSize=0x1f0000
value=49=0x31="1"
說(shuō)明已正確識別到MX29LV160BT設備,設備號為0x2249。

三、建立TFFS設備
1、掛接設備名
MTD驅動(dòng)調試成功后,我們就可以給flash設備掛接上dos設備名,如下操作:
格式化:
tffsDevFormat
value=1
usrTffsConfig0,0,”/tffs0”
value=0
然后通過(guò)devs來(lái)查看掛接的設備名。
devs
drvname
0/null
1/tyCo/0
1/tyCo/1
5host:
6/pty/rlogin.S
7/pty/rlogin.M
3/tffs0/
8/vio
value=25=0x19
看到/tffs0/說(shuō)明掛接設備已經(jīng)成功,接下來(lái)就可以利用dosFs文件系統相關(guān)命令來(lái)操作flash了。如,ls、copy等。

2、從Flash中啟動(dòng)并下載VxWorks映像
要從flash中下載VxWorks映像,首先需要把VxWorks映像拷貝到flash中,在shell中的操作命令為copy“VxWorks”,”/tffs0/VxWorks”,然后修改config.h文件中引導行,如下:
#defineDEFAULT_BOOT_LINE
"tffs=0,0(0,0)host:/tffs0/VxWorksh=192.168.0.153e=192.168.0.154u=targetpw=targeto=cpm"
修改完后,重新編譯生成bootrom_uncmp.bin,并把它燒寫(xiě)到flash中(注意:該flash與上面建立TFFS文件系統的flash不一樣,它并沒(méi)有建立文件系統)。然后重新啟動(dòng),即可看到如下啟動(dòng)畫(huà)面:
bootdevice:tffs=0,0
unitnumber:0
processornumber:0
hostname:host
filename:/tffs0/VxWorks
inetonethernet(e):192.168.0.154
hostinet(h):192.168.0.153
user(u):target
ftppassword(pw):target
flags(f):0x0
other(o):cpm
AttachingtoTFFS...done.
Loading/tffs0/VxWorks...894304
Startingat0x10000...

DevelopmentSystem
VxWorksversion5.5.1
KERNEL:WINDversion2.6
CopyrightWindRiverSystems,Inc.,1984-2003
CPU:MotorolaADS-PowerPC860.Processor#0.
MemorySize:0x1000000.BSPversion1.2/5.
WDBCommType:WDB_COMM_END
WDB:Ready.

到此,說(shuō)明引導成功。flash整個(gè)TFFS文件系統就已經(jīng)建立成功。

四、結論
VxWorks操作系統中支持TFFS文件系統,我們將VxWorks映像作為文件放到flash上,這就有利于開(kāi)發(fā)者和用戶(hù)更新應用程序而不需要影響bootrom,直接更新VxWorks映像或者將應用程序直接copy到flash中,然后裝載到RAM中運行。

參考文獻
1VxWorks5.5Programmer’sGuide.

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(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>