《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于TrueFFS的VxWorks應(yīng)用程序的啟動
基于TrueFFS的VxWorks應(yīng)用程序的啟動
慶釗 張志剛 梅艷麗
摘要: 引言在嵌入式產(chǎn)品中,,一般使用Flash作為應(yīng)用程序代碼及各種數(shù)據(jù)和參數(shù)的存儲介質(zhì),。尤其是NORFlash具有操作接口簡單,、傳輸效率高,、芯片內(nèi)執(zhí)行(eXecuteInPlace,XIP)的特點(diǎn),,在電力,、鐵路等工業(yè)控制領(lǐng)域得到
Abstract:
Key words :

引 言
   
在嵌入式產(chǎn)品中,一般使用Flash作為應(yīng)用程序代碼及各種數(shù)據(jù)和參數(shù)的存儲介質(zhì),。尤其是NOR Flash具有操作接口簡單,、傳輸效率高、芯片內(nèi)執(zhí)行(eXecute In Place,,XIP)的特點(diǎn),,在電力,、鐵路等工業(yè)控制領(lǐng)域得到了廣泛應(yīng)用,。
    為了便于用戶的使用,VxWorks操作系統(tǒng)提供了基于Flash的文件系統(tǒng),,即TrueFFS,。TrueFFS與DosFS文件系統(tǒng)基本兼容,通過VxWorks提供的操作接口以文件的方式實(shí)現(xiàn)對Flash的操作,。而對于用戶來說,,如何在自己的硬件系統(tǒng)上根據(jù)Flash的具體型號和使用要求實(shí)現(xiàn)TrueFFS系統(tǒng),并在此基礎(chǔ)上完成應(yīng)用程序代碼的靈活啟動,、更新,,同時兼顧仿真調(diào)試的需求,則非常重要,。
 

1 系統(tǒng)基本功能
    本系統(tǒng)應(yīng)用于鐵路牽引自動化系統(tǒng)中,,實(shí)現(xiàn)在電氣化鐵路供電系統(tǒng)中對相關(guān)電力設(shè)備的保護(hù)、測量和控制功能,。系統(tǒng)基本功能框圖如圖1所示,。核心CPU選用Freescale公司的ColdFire系列32位微控制器MCF5234。該處理器內(nèi)部集成了UART,、SPI,、I2C、ETPU,、CAN,、以太網(wǎng)等豐富的功能模塊,系統(tǒng)主頻可達(dá)150 MHz,,主要用于工業(yè)控制,、智能家電等方面(尤其是電力自動化控制領(lǐng)域)。系統(tǒng)通過2路以太網(wǎng)接口實(shí)現(xiàn)與當(dāng)?shù)鼗蜻h(yuǎn)方設(shè)備的通信,,維護(hù)串口用來實(shí)現(xiàn)對本設(shè)備的維護(hù),,采用2片16位接口的NOR Flash實(shí)現(xiàn)應(yīng)用程序和有關(guān)參數(shù)及數(shù)據(jù)的存儲,。系統(tǒng)提供模擬量輸入、數(shù)字量輸入,、數(shù)字量輸出等接口,。有關(guān)的模擬量及開關(guān)量狀態(tài)信息經(jīng)過對應(yīng)接口采集到系統(tǒng)內(nèi)部,經(jīng)過保護(hù)算法軟件的處理后,,再通過數(shù)字量輸出接口完成對有關(guān)設(shè)備的控制操作,。

    在傳統(tǒng)嵌入式系統(tǒng)中,編譯好的運(yùn)行態(tài)應(yīng)用程序一般通過硬件調(diào)試工具(如BDM調(diào)試器)直接固化到程序Flash的指定位置,,裝置上電或復(fù)位后,,CPU直接跳轉(zhuǎn)到Flash的起始位置,從Flash中取指并開始執(zhí)行,。但是在VxWorks中,,采用該方式不方便軟件的仿真調(diào)試,需要重新固化bootrom才行,。另外,,由于系統(tǒng)要求保存較多的參數(shù)和數(shù)據(jù),需要在2片F(xiàn)lash中都實(shí)現(xiàn)TrueFFS系統(tǒng),;并且為了滿足動態(tài)更新程序的要求,,還需要實(shí)現(xiàn)FTP的功能。因此,,需要實(shí)現(xiàn)如下功能:在2片F(xiàn)lash上實(shí)現(xiàn)True-FFS,;在bootrom和應(yīng)用VxWorks程序上實(shí)現(xiàn)TrueFFS和FTP的加載;對bootrom進(jìn)行改造,,以實(shí)現(xiàn)應(yīng)用VxWorks程序和調(diào)試VxWorks程序分別通過TrueFFS和TFTP的方式啟動,。


2 TrueFFS的實(shí)現(xiàn)及加載
2.1 TrueFFS的層次結(jié)構(gòu)

    如圖2所示,VxWorks中TrueFFS的層次結(jié)構(gòu)包括內(nèi)核層,、翻譯層,、socket層、MTD層,。由于VxWorks對TrueFFS進(jìn)行了優(yōu)秀的層次劃分和封裝,,用戶一般不需要對上述基本層次代碼進(jìn)行修改。MTD層實(shí)現(xiàn)了對常用幾種類型Flash的讀,、寫,、擦除等基本控制。如果用戶選用了支持的類型,,則基本不需要編寫代碼,;而如果用戶選用了特殊類型的Flash,則可以參考用例代碼完成對應(yīng)MTD層代碼的編寫,。

2.2 MTD層代碼實(shí)現(xiàn)
    由于本系統(tǒng)中選用的2片F(xiàn)lash為Spansion公司的S29AL032D,,因此需要編寫對應(yīng)的驅(qū)動代碼,。對于MTD層,一般向上提供MTD識別,、Flash連續(xù)扇區(qū)擦除,、Flash連續(xù)數(shù)據(jù)寫等主要接口函數(shù),可以不提供單獨(dú)的鏡像函數(shù),,系統(tǒng)會使用內(nèi)部缺省的鏡像函數(shù),。需要在2片F(xiàn)lash上實(shí)現(xiàn)TrueFFS,即每片F(xiàn)lash相當(dāng)于一個分區(qū),,這一點(diǎn)在編寫驅(qū)動程序時需要重點(diǎn)考慮,。在MTD層驅(qū)動程序中,F(xiàn)lash的單個字節(jié)(或字)寫入接口函數(shù)為重點(diǎn),,不同F(xiàn)lash類型以及不同的端口寬度都會導(dǎo)致該函數(shù)的實(shí)現(xiàn)不同,。其寫操作流程如圖3所示。

    為了在兩片F(xiàn)lash上實(shí)現(xiàn)2個文件分區(qū),,可以采用以下方式:在sysTffs.c中定義新的MTD類型,,并根據(jù)實(shí)際需要定義2片F(xiàn)lash(即兩個分區(qū))的起始地址和長度,,并根據(jù)上述定義完成TrueFFS設(shè)備基址和窗口尺寸的設(shè)置,;在sysTffsInit()函數(shù)中進(jìn)行2次rfaRegister()操作以完成2個分區(qū)的注冊;在rfaRegister()中根據(jù)注冊的TrueFFS設(shè)備個數(shù)設(shè)置本TrueFFS設(shè)備的設(shè)備號,。在MTD層接口函數(shù)中一般都有一個Flash驅(qū)動設(shè)備的參數(shù),,可以根據(jù)該參數(shù)來獲取2個TrueFFS設(shè)備的設(shè)備號,然后分別指向?qū)?yīng)的Flash地址范圍進(jìn)行相應(yīng)的操作,。
    MTD驅(qū)動設(shè)計完成后,,可以根據(jù)VxWorks提供的方式完成TrueFFS的加載。在應(yīng)用程序中可以通過組件配置界面進(jìn)行加載配置,,而在bootrom中則需要手動修改相應(yīng)的配置文件,。
    由于系統(tǒng)的啟動需要從boottom開始,其編譯的結(jié)果文件必須以二進(jìn)制方式固化到程序Flash的起始位置,,因此每片F(xiàn)lash起始的256 KB空間都預(yù)留出來,,不參與TrueFFS系統(tǒng)的管理。這樣,,F(xiàn)lash上文件的操作與bootrom啟動代碼的保存不存在沖突,。
 

3 bootrom的改進(jìn) 
    在VxWorks中,修改好的bootrom一般通過硬件調(diào)試工具固化到代碼Flash中,,bootrom啟動后通過TFTP方式實(shí)現(xiàn)編譯好的調(diào)試用VxWorks映像文件的下載過程,,并完成該映像文件的啟動。這樣就可以實(shí)現(xiàn)基于串口或網(wǎng)絡(luò)的應(yīng)用程序調(diào)試,,使用更加方便靈活,。
    為了滿足系統(tǒng)的要求,,bootrom還需要增加如下功能:支持2個Flash分區(qū)的TrueFFS加載;支持FTP功能,;支持從TrueFFS加載及啟動應(yīng)用程序,,以及從TFTP網(wǎng)絡(luò)方式加載及啟動調(diào)試態(tài)VxWorks映像文件兩種方式,以保證系統(tǒng)即使在現(xiàn)場運(yùn)行過程中,,一旦發(fā)現(xiàn)問題,,也能夠方便地進(jìn)行仿真調(diào)試;支持Flash的格式化及True-FFS的初始化功能,,一旦文件系統(tǒng)異常后,,可以通過該功能進(jìn)行TrueFFS的徹底重構(gòu)。由于boottom的主要工作在bootconfig.c文件中實(shí)現(xiàn),,因此上述改進(jìn)工作也主要在該文件中進(jìn)行,。
    還需要完成以下工作:在對應(yīng)配置文件中加入IN-CLUDE_TFFS和INCLUDE_FTP_SERVER的定義,從而實(shí)現(xiàn)系統(tǒng)對TrueFFS和FTP功能的加載,;對bootloader函數(shù)進(jìn)行修改,,使其不支持基于TrueFFS的應(yīng)用程序啟動,當(dāng)需要調(diào)試時通過網(wǎng)絡(luò)方式加載和啟動,;增加一個類似于bootloader的功能函數(shù),,可以以此函數(shù)為模版進(jìn)行修改,完成TrueFFS功能的初始化和加載過程,,以及基本網(wǎng)絡(luò)功能和FTP功能的加載,,同時在程序Flash文件分區(qū)中存在應(yīng)用程序文件的前提下,實(shí)現(xiàn)該應(yīng)用程序的加載和啟動功能,;增加2片F(xiàn)lash的格式化和TrueFFS的初始化功能函數(shù),。
    對bootCmdLoop任務(wù)執(zhí)行流程進(jìn)行調(diào)整,改進(jìn)后的流程如圖4所示,。

    在bootCmdLoop進(jìn)入超級終端界面循環(huán)操作過程后,,可以通過相關(guān)命令完成基于網(wǎng)絡(luò)方式的調(diào)試態(tài)VxWorks映像文件的加載和啟動,也可以根據(jù)實(shí)際需要增加Flash格式化,、自動進(jìn)入超級終端界面標(biāo)志命令設(shè)置,、軟件復(fù)位等功能。經(jīng)過上述改進(jìn),,可以實(shí)現(xiàn)bootrom上運(yùn)行態(tài)應(yīng)用程序及調(diào)試態(tài)VxWorks映像文件的靈活加載和啟動,,不僅避免了現(xiàn)場運(yùn)行系統(tǒng)為進(jìn)行調(diào)試而重新寫入bootrom的問題,而且方便應(yīng)用程序的動態(tài)更新,。


4 應(yīng)用程序的動態(tài)更新
   
為了便于產(chǎn)品的維護(hù)和升級,,本系統(tǒng)需要支持基于FTP的應(yīng)用程序動態(tài)更新,而VxWorks提供了各種類型應(yīng)用程序的加載啟動方式。由于應(yīng)用程序最終在動態(tài)RAM中執(zhí)行,,因此在TrueFFS和FTP功能具備的前提下,,實(shí)現(xiàn)應(yīng)用程序的動態(tài)更新非常方便。
    經(jīng)過改造后,,bootrom和最終應(yīng)用程序中都實(shí)現(xiàn)了TrueFFS和FTP功能,,因此在bootrom和最終應(yīng)用程序執(zhí)行時都可以完成應(yīng)用程序加載。另外,,由于具備了bootrom中更新應(yīng)用程序的功能,,即使由于應(yīng)用程序異常導(dǎo)致無法運(yùn)行,復(fù)位后重新進(jìn)入bootrom仍然可以進(jìn)行新程序的更新,,從而增強(qiáng)了系統(tǒng)的健壯性,。
    需要注意的是,通過TrueFFS方式加載啟動的最終應(yīng)用程序也是default類型的,,而不是rom類型的,。如果下載到文件系統(tǒng)中的應(yīng)用程序是rom類型,則會導(dǎo)致bootrom無法成功加載該文件,,因?yàn)槠鋵?shí)現(xiàn)方式與仿真調(diào)試過程基本類似,。
 

結(jié) 語
    經(jīng)過測試,采用上述實(shí)現(xiàn)方案后,,系統(tǒng)運(yùn)行穩(wěn)定,。通過FTP工具,可以靈活地對2片F(xiàn)lash上文件分區(qū)中的文件進(jìn)行讀寫操作,,2 MB左右的應(yīng)用程序文件可在30 s內(nèi)下載到Flash中,。整個系統(tǒng)的啟動過程穩(wěn)定可靠,,對于2 MB左右的應(yīng)用程序,,從裝置上電到bootrom啟動,再到應(yīng)用程序正常開始運(yùn)行,,基本可在十幾秒內(nèi)完成,。本方案對于基于VxWorks系統(tǒng)的嵌入式產(chǎn)品有一定的借鑒意義。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。