• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式操作系統(tǒng)VxWorks中TFFS文件系統(tǒng)的構建

    嵌入式操作系統(tǒng)VxWorks中TFFS文件系統(tǒng)的構建

    作者: 時間:2005-02-20 來源:網(wǎng)絡 收藏

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

    關鍵詞:FlashMTD系統(tǒng)

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

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

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

    一、TFFS文件系統(tǒng)結構簡介

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

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

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

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

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

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

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

    二、MX29LV160BT芯片上建立TrueFFS文件系統(tǒng)

    1、配置相關文件

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

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

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

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

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

    #ifdefINCLUDE_MTD_MX29LV
    mx29lvMTDIdentify,
    #endif/*INCLUDE_MTD_MX29LV*/
    并在該文件開頭聲明。
    #ifdefINCLUDE_MTD_MX29LV
    FLStatusmx29lvMTDIdentify(FLFlashvol);
    #endif/*INCLUDE_MTD_MX29LV*/
    最后就是將我們的flash相關MTD驅動加入到makefile中。即:
    MACH_EXTRA=mx29lvMtd.o
    為了方便我們調試MTD驅動,應該在重新編譯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驅動簡介
    做了上述配置后,進入VxWorks操作系統(tǒng)后,我們在shell上利用tffsShow工具來顯示flash的信息。TffsShow函數(shù)最終會調用MTD驅動中的mx29lvMtdIdentiy()函數(shù),在mx29lvMtdIdentiy()函數(shù)主要是通過讀取MX29LV160BT芯片的設備和廠商ID來識別它,然后對FLFlash結構成員進行初始化,最主要的幾個參數(shù)是:
    type
    Flash內存的JEDECID號。

    erasableBlockSize

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

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

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

    三、建立TFFS設備
    1、掛接設備名
    MTD驅動調試成功后,我們就可以給flash設備掛接上dos設備名,如下操作:
    格式化:
    tffsDevFormat
    value=1
    usrTffsConfig0,0,”/tffs0”
    value=0
    然后通過devs來查看掛接的設備名。
    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/說明掛接設備已經(jīng)成功,接下來就可以利用dosFs文件系統(tǒng)相關命令來操作flash了。如,ls、copy等。

    2、從Flash中啟動并下載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,并把它燒寫到flash中(注意:該flash與上面建立TFFS文件系統(tǒng)的flash不一樣,它并沒有建立文件系統(tǒng))。然后重新啟動,即可看到如下啟動畫面:
    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.

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

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

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

    linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 敦煌市| 苍溪县| 横山县| 台湾省| 湟中县| 磐石市| 子洲县| 和顺县| 岢岚县| 桑植县| 沅陵县| 翼城县| 五台县| 景德镇市| 新津县| 邹平县| 汾西县| 吉安市| 水富县| 南郑县| 盐城市| 彝良县| 施甸县| 澳门| 钟祥市| 山阴县| 屯留县| 大城县| 淮北市| 游戏| 海兴县| 喀喇| 岑溪市| 从化市| 乌海市| 敦煌市| 如皋市| 唐山市| 井冈山市| 河曲县| 江西省|