新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于INTEL StrataFlash在VxWorks上構建TrueFFS文件系統

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

        作者: 時間:2012-05-21 來源:網絡 收藏

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

        #ifdef INCLUDE_MTD_I28FJ3A

        i28fj3aMtdIdentify,

        #endif

        系統在調用tffsdev()函數安裝flash的MTD驅動時會調用這個表項來查找并識別flash設備。

        2 MTD驅動程序組成

        在MTD驅動中,最重要的函數是i28fj3aMtdIdentify()函數,可以把它看作是MTD的初始化函數。它負責讀取芯片制造商和設備的ID 號,INTEL公司的代碼是0x0089,28F320J3A的設備代碼是0x0016。然后對FLFlash結構的成員進行初始化。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的設備類型;erasableBlockSize指flash可擦除塊的大小,單位為字節;chipsize指flash存儲容量,單位為字節;noOfChips指構成flash存儲陣列的存儲器的片數;interleaving指存儲陣列的交叉存取參數,必須為2的整數冪,用于定義在一個存儲芯片上,兩個字節連續媒體的地址差異;socket是指向FLSocket結構的指針,這個FLSocket結構含有指向socket 層函數的指針和數據。當注冊socket驅動時,該FLSocket結構中涉及的函數將被安裝。

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

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

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

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

        3 TFFS操作方法

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

        還可以通過修改DEFAULT_BOOT_LINE中的參數,將TFFS作為一個啟動設備。將boot device改為tffs=0,0 ,將file name 改為/tffs0/VxWroks,就可以把系統啟動起來了。

        四 結論

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

        參考文獻

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

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

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

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

        [5] 陳智育,溫彥軍,陳琪. 《VxWorks程序開發實踐》. 人民郵電出版社. 2004.5


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 荥阳市| 馆陶县| 玛多县| 达日县| 富顺县| 凤阳县| 黄陵县| 建湖县| 浦县| 清涧县| 通州市| 聂荣县| 牡丹江市| 庆元县| 汝州市| 霍城县| 云安县| 婺源县| 上虞市| 金乡县| 青州市| 开封县| 沈阳市| 依安县| 辽源市| 贵州省| 陕西省| 华宁县| 永嘉县| 呼伦贝尔市| 莆田市| 百色市| 延寿县| 永城市| 临西县| 常山县| 浦北县| 黑水县| 西安市| 客服| 朝阳市|