<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è) > 嵌入式系統 > 設計應用 > 基于INTEL StrataFlash在VxWorks上構建TrueFFS文件系統

基于INTEL StrataFlash在VxWorks上構建TrueFFS文件系統

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

修改tffsConfig.c文件,此文件一般存放在srcdrvtffs文件夾中,可以拷貝到BSP文件夾中,在 MTDidentifyRoutine mtdTable[]中把定義的宏INCLUDE_MTD_I28FJ3A和MTD識別函數關(guān)聯(lián)起來(lái):

#ifdef INCLUDE_MTD_I28FJ3A

i28fj3aMtdIdentify,

#endif

系統在調用tffsdev()函數安裝flash的MTD驅動(dòng)時(shí)會(huì )調用這個(gè)表項來(lái)查找并識別flash設備。

2 MTD驅動(dòng)程序組成

在MTD驅動(dòng)中,最重要的函數是i28fj3aMtdIdentify()函數,可以把它看作是MTD的初始化函數。它負責讀取芯片制造商和設備的ID 號,INTEL公司的代碼是0x0089,28F320J3A的設備代碼是0x0016。然后對FLFlash結構的成員進(jìn)行初始化。FLFlash結構定義在targethtffsFLFlash.h中:

typedef struct tFlash FLFlash;

struct tFlash {

FlashType type;

long erasableBlockSize;

    long chipSize;

int noOfChips;

int interleaving;

int flags;

void *mtdVars;

FLSocket *socket;

void FAR0 *(*map)(FLFlash *, CardAddress, int);

FLStatus (*read)(FLFlash *, CardAddress, void FAR1 *, int, int);

FLStatus (*write)(FLFlash *, CardAddress, const void FAR1 *, int, int);

FLStatus (*erase)(FLFlash *, int, int);

void (*setPowerOnCallback)(FLFlash *);

};

其中,type指flash的設備類(lèi)型;erasableBlockSize指flash可擦除塊的大小,單位為字節;chipsize指flash存儲容量,單位為字節;noOfChips指構成flash存儲陣列的存儲器的片數;interleaving指存儲陣列的交叉存取參數,必須為2的整數冪,用于定義在一個(gè)存儲芯片上,兩個(gè)字節連續媒體的地址差異;socket是指向FLSocket結構的指針,這個(gè)FLSocket結構含有指向socket 層函數的指針和數據。當注冊socket驅動(dòng)時(shí),該FLSocket結構中涉及的函數將被安裝。

map是指向flash映射函數的指針,該函數將flash映射到內存的一個(gè)區域。read是指向flash讀函數的指針。write是指向 flash寫(xiě)函數的指針。erase是指向flash擦除函數的指針。setPowerOnCallback是指在flash設備上電后應當執行一個(gè)函數以便掛接該設備,setPowerOnCallback成員就是指向這個(gè)函數的指針,許多flash存儲設備不需要此函數。

在MTD驅動(dòng)中最重要的兩個(gè)函數是write和erase。write的過(guò)程一般是這樣的,寫(xiě)入前首先要對扇區解鎖,如果是進(jìn)行改寫(xiě),需要把待改寫(xiě)扇區的數據讀出來(lái),修改相應的部分,然后擦除扇區,接著(zhù)再寫(xiě)入寫(xiě)命令,寫(xiě)入數據;如果是寫(xiě)入空扇區,直接寫(xiě)命令、寫(xiě)數據就可以了,最后判斷數據是否寫(xiě)完。為了確保寫(xiě)入成功,寫(xiě)完數據后要進(jìn)行數據的比較。對flash的erase操作是按照扇區進(jìn)行的,擦除前首先要對扇區解鎖,然后寫(xiě)入擦除建立和扇區擦除命令,擦除成功后,內容應為0xFFFF。為了確保擦除成功,擦完后也要進(jìn)行數據比較。

內核支持,在啟動(dòng)時(shí),usrRoot()函數將會(huì )調用tffsdev()進(jìn)行設備初始化,調用tffsdev()的目的是注冊套接組件驅動(dòng)程序。

在使用TFFS之前首先要調用tffsdevcreate()創(chuàng )建此設備,經(jīng)過(guò)一系列的調用,最后運行flidentifyflash(),這個(gè)函數按照 sysTffs.c中宏所指定的flash,調用識別函數i28fj3aMtdIdentify()進(jìn)行識別,來(lái)確認究竟是那種flash接入了系統,并向FLFLash數據結構注冊MTD驅動(dòng)中的讀、寫(xiě)、擦除、映射等f(wàn)lash操作函數。

3 TFFS操作方法

在使用TFFS前,要用shell命令tffsDevFormat對flash設備進(jìn)行格式化,并用usrTffsConfig命令把flash設備掛接上DOS設備名,接著(zhù)就可以用此設備名對flash設備進(jìn)行操作了。支持的命令包括:ls,copy,remove等常用命令。

還可以通過(guò)修改DEFAULT_BOOT_LINE中的參數,將TFFS作為一個(gè)啟動(dòng)設備。將boot device改為tffs=0,0 ,將file name 改為/tffs0/VxWroks,就可以把系統啟動(dòng)起來(lái)了。

四 結論

在基于的嵌入式系統中支持TrueFFS,可以將操作系統映像、應用程序、系統配置等以文件的形式存放到flash 上,與系統的引導程序bootrom分開(kāi)。這樣可以支持用戶(hù)的在線(xiàn)升級,當應用程序和系統配置需要更新時(shí),直接以文件的形式拷貝到flash中就可以了,非常方便。當然,支持TrueFFS是有少量存儲空間的開(kāi)銷(xiāo),但這和使用TrueFFS文件系統所獲得的好處相比是微乎其微的。本文作者的創(chuàng )新點(diǎn)是為新推出的Intel StrataFlash系列flash編寫(xiě)了驅動(dòng)程序,并在其上構建了TrueFFS文件系統。

參考文獻

[1] VxWorks5.5Programmer’sGuide. WindRiver Systems,Inc

[2] Intel StrataFlash Memory(J3) Datasheet. Intel Corporation

[3] 王明飛,張效義,李鷗,邢明. VxWorks下MPC860的中斷處理機制及其應用. 微計算機信息,2005,3:1~2頁(yè)

[4] 李方敏. 《VxWorks高級程序設計》. 清華大學(xué)出版社. 2004.5

[5] 陳智育,溫彥軍,陳琪. 《VxWorks程序開(kāi)發(fā)實(shí)踐》. 人民郵電出版社. 2004.5


上一頁(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>