肖二寧,張興明,李 晗,魏 帥
(國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 河南 鄭州 450000)
一種基于Flash的VxWorks操作系統(tǒng)快速引導(dǎo)方法設(shè)計
肖二寧,張興明,李 晗,魏 帥
(國家數(shù)字交換系統(tǒng)工程技術(shù)研究中心 河南 鄭州 450000)
針對在嵌入式系統(tǒng)中缺少NVRAM并對讀寫速度要求不是很高的情況下,以VxWorks操作系統(tǒng)Workbench3.1為平臺,設(shè)計了一種基于Flash的VxWorks操作系統(tǒng)快速引導(dǎo)方法,該方法通過用NOR Flash存儲器代替NVRAM保存引導(dǎo)信息,并運用了1+1容錯機制,經(jīng)驗證,該方法實現(xiàn)了VxWorks操作系統(tǒng)的快速引導(dǎo),并有效降低了Flash的擦除頻率,延長了Flash壽命,提高了系統(tǒng)的穩(wěn)定性。
Flash存儲器;VxWorks;接口函數(shù);快速引導(dǎo)
在嵌入式系統(tǒng)中,如交換機、路由器、各種PDA設(shè)備等,NVRAM一般用來保存操作系統(tǒng)配置信息,而Flash通常用來存儲數(shù)據(jù)[1]。在引導(dǎo)操作系統(tǒng)時,需要配置引導(dǎo)參數(shù),如主機名,主機IP,目標機名,用戶名,口令等信息,可以通過把配置信息寫入NVRAM來降低引導(dǎo)時間,同時,也不用每次系統(tǒng)重啟就需要配置引導(dǎo)信息,大大方便了開發(fā)人員的調(diào)試,但并不是每個硬件系統(tǒng)都配備有NVRAM,而一般的嵌入式硬件都有Flash,由于Flash工作機制與NVRAM相似,都為掉電非易失,在實時性要求不是很高的情況下,可以考慮用Flash實現(xiàn)NVRAM的功能[2]。
VxWorks是美國WindRiver公司設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng),該系統(tǒng)有良好的可靠性和卓越的實時性,在通信、軍事、航空、電力等方面有廣泛的應(yīng)用[2-4],本系統(tǒng)采用Wind River Workbench3.1作為交叉編譯工具。在Vxworks的低級集成開發(fā)環(huán)境版本Tornado中可以通過修改autoboot函數(shù)來進行配置,但在VxWroks高級版本W(wǎng)orkBench[5-6]中,此函數(shù)已被封裝,但VxWorks6.7(以下簡稱VxWorks)提供了nvRamToFlash驅(qū)動代碼接口,但有很大缺陷:1)該驅(qū)動所寫Flash偏移量為固定值,即頻繁的對一塊Flash進行擦除操作,但每塊Flash擦除次數(shù)有限[7],但在調(diào)試過程中需要多次配置啟動信息,在同一塊進行頻繁擦除,縮短了Flash壽命[8]。2)一旦該塊變?yōu)闊o效塊,配置的啟動信息將無法寫入Flash,容錯性差。
在VxWorks操作系統(tǒng)的基礎(chǔ)上,本文設(shè)計了一種新的Flash代替NVRAM的驅(qū)動程序算法,該驅(qū)動程序算法不僅能實現(xiàn)快速引導(dǎo)操作系統(tǒng),降低了Flash擦除頻率,延長了Flash壽命,并且運用了1+1的冗余保護機制,提高了系統(tǒng)的穩(wěn)定性。
本系統(tǒng)的硬件為交換機板卡,采用FreescaleCDS8548[9]作為CPU,核時鐘頻率為800 MHz,把1 G DDR2 SDRAM作為內(nèi)存,其上帶有兩片NumonyxAxcell M29EW Nor Flash芯片[10],每片大小為128 MB,片上一塊為128 KB,本系統(tǒng)將兩片F(xiàn)lash拼接起來看作一片,大小為256 MB,片上一塊為256 KB,地址劃分為0xE00000000~0xEFFFFFFF,取最后兩塊作為保存啟動信息塊,記為塊0、塊1,其中每塊第一個區(qū)域用作保存參數(shù)信息偏移量,塊 0地址區(qū)域為 0xEFF80000~0xEFFAFFFF,塊1地址區(qū)域為0xEFFB0000~0xEFFFFFFF,塊0用作默認塊,塊1做為備用塊,若塊0無效,則啟用塊1,這種1+1冗余保護機制大大降低了系統(tǒng)宕機率。
Flash中的引導(dǎo)啟動參數(shù)是以字符串的形式寫入的,存放在BOOT_LINE中,字符串長度一般默認為255[11],也可以在config.h中進行修改,因本系統(tǒng)設(shè)定的每個區(qū)域為256字節(jié),把最后一字節(jié)統(tǒng)一設(shè)定為常數(shù)0,代表該塊已存信息,在查找空白塊時,只需讀取每區(qū)域中的最后一字節(jié)是否為0即可,若為0則不為空,若為1則為空,F(xiàn)lash地址與大小也在config.h中定義,本系統(tǒng)把宏NV_RAM_ADRS定義為Flash起始基地址,在VxWorks引導(dǎo)操作系統(tǒng)啟動過程中,引導(dǎo)程序執(zhí)行到usrNet.c中的usrbootlineInit()函數(shù)時,該函數(shù)首先讀取Flash中是否有配置信息,若有,則把配置信息讀取到BOOT_LINE中,如沒有,則把config.h中定義的DEFAULT_BOOT_LINE賦給BOOT_LINE,在引導(dǎo)操作系統(tǒng)啟動[12]過程中,調(diào)試人員有7 s時間輸入命令,當輸入命令c后,可以配置BOOT_LINE信息,配置完成后,寫入Flash。由此過程可以看出,實現(xiàn)快速引導(dǎo)的關(guān)鍵在于設(shè)計Flash代替NVRAM的接口函數(shù)[13-14]。引導(dǎo)過程流程圖如圖1所示。
圖1 VxWorks操作系統(tǒng)引導(dǎo)過程流程圖
VxWorks引導(dǎo)程序啟動過程中通過兩個接口函數(shù)讀寫FLASH代替NVRAM,下面介紹下接口函數(shù)的設(shè)計:
函 數(shù) 1:extern STATUS sysNvRamSet(char*string,intstrLen,int offset)
該函數(shù)實現(xiàn)向Flash中寫入字符串,3個輸入?yún)?shù)分別為寫入NVRAM字符串,字符串長度,寫入地址偏移量,若寫入成功返回OK,不成功則返回ERROR。
函數(shù)1的C語言實現(xiàn)算法如下:
算法說明:
首先選擇要寫入的塊,默認情況下選擇0塊,把NVRAM地址NV_RAM_ADRS配置成0xEFF80100,如塊0無效,則選擇塊1,把NVRAM地址配置成0xEFFB0100,然后判斷字符串長度是否合法,如不合法,返回ERROR,然后從NV_RAM_ADRS往上查找,若檢查到某區(qū)域最后一個字節(jié)為0,則該區(qū)域為空白,則在Flash中更新為該區(qū)域offset,若沒有找到空白區(qū)域,證明該塊已滿,調(diào)用Flash擦除函數(shù)擦除Flash塊,并把offset置為0,然后根據(jù)offset往Flash中寫入BOOT_LINE。
函 數(shù) 2:extern STATUS sysNvRamGet(char*string,intstrLen,int offset)
該函數(shù)3個輸入?yún)?shù)分別為讀入配置信息存放字符串,讀取配置信息長度,讀取地址偏移量,若讀取成功則返回OK,不成功則返回ERROR。
函數(shù)2的C語言實現(xiàn)算法為:
算法說明:
首先根據(jù)NV_RAM_ADRS基地址讀取引導(dǎo)參數(shù)偏移量信息offset,然后根據(jù)offset讀去Flash中的引導(dǎo)參數(shù),然后判斷該引導(dǎo)參數(shù)字符串是否合法,如不合法,則返回ERROR,合法,則返回OK。
接口函數(shù)1,2流程如圖2所示。
圖2 讀寫引導(dǎo)參數(shù)流程圖
在系統(tǒng)測試時,首先,F(xiàn)lash中沒有存儲Boot信息,需要通過手動輸入 BOOT_LINE信息,接著進行重啟,此時,BOOT_LINE信息已經(jīng)存入Flash中,可以直接進行啟動,正常啟動圖如圖3所示,但在配置的過程中需要注意在config.h頭文件中不要使能宏定義INCLUDE_NV_RAM,因為系統(tǒng)本身并沒有使用NVRAM,使能NVRAM有可能引起系統(tǒng)意想不到的錯誤,只需要配置NVRAM地址和大小就可以實現(xiàn)功能[15]。必須注釋系統(tǒng)中定義的sysNvRamGet()與sysNvRamSet()函數(shù),因為如若不注釋,則會引起重復(fù)定義警告,導(dǎo)致自己編寫的函數(shù)無效。由于VxWorks把啟動前輸入引導(dǎo)配置信息這一部分封裝起來,故必須嚴格按照VxWorks引導(dǎo)啟動流程進行配置,而不能使用自己定義的函數(shù)名,只能修改VxWorks提供的函數(shù)。無論引導(dǎo)參數(shù)信息有多少字節(jié),每個存放引導(dǎo)參數(shù)信息的區(qū)域必須嚴格按照256字節(jié)進行分塊,因為查找空白塊,讀取引導(dǎo)參數(shù)信息等操作都是對齊操作。
圖3 VxWorks系統(tǒng)通過Flash正常啟動圖
在VxWorks環(huán)境下,采用本文設(shè)計的Flash代替NVRAM保存引導(dǎo)參數(shù)信息雖然在讀取、擦除Flash,查詢空白區(qū)域時額外需要一定時間(2~5 s),但該方法操作方便,穩(wěn)定性好,而且有效減少了Flash擦除次數(shù),經(jīng)驗證在驗證板卡上運行穩(wěn)定,讀寫B(tài)OOT_LINE正常,給調(diào)試人員帶來了很大方便。
[1]蔡衛(wèi)平.VxWorks系統(tǒng)下的NVRAM To Flash驅(qū)動程序編寫[J].電子工程師,2007(1):52-54.
[2]潘燕梅.基于Nucleus的閃存文件系統(tǒng)研究和改進[J].計算機測量與控制,2011(1):80-81.
[3]胡明民.基于實時操作系統(tǒng)VxWorks的驅(qū)動程序開發(fā)[D].西安:西安電子科技大學(xué),2012.
[4]周勇軍.關(guān)于VxWorks系統(tǒng)及其研究現(xiàn)狀的評述[J].測控技術(shù),2015(3):89-90.
[5]陳懷民.VxWorks下設(shè)備驅(qū)動程序開發(fā)技術(shù)研究[J].現(xiàn)代電子技術(shù),2015(10):79-80.
[6]宗起振.基于Vxworks的智能變壓器在線監(jiān)測系統(tǒng)設(shè)計與應(yīng)用[J].計算技術(shù)與自動化,2014(4):12-15.
[7]肖磊.VxWorks下基于socket的網(wǎng)絡(luò)通信設(shè)計[J].計算機與網(wǎng)絡(luò),2012(9):13-15.
[8]石煒.基于VxWorks的星載控制計算機動態(tài)可重構(gòu)研究[J].電子設(shè)計工程,2013(6):12-14.
[9]風(fēng)河為賽靈思Zync-7000可拓展處理平臺提供軟件支持[J].電信技術(shù),2012(8):18-20.
[10]呂赟.嵌入式文件系統(tǒng)在NOR和NAND型flash上的實現(xiàn)和改進[D].武漢:武漢工程大學(xué),2008.
[11]樓楊.基于MPC8548的嵌入式設(shè)備光通信接口設(shè)計與實現(xiàn)[J].計算機測量與控制,2011(4):45-50.
[12]康鳳舉.基于VxWorks的無人機飛控計算機快速啟動導(dǎo)引技術(shù)研究[J].計算機測量與控制,2013(3):98-100.
[13]Sooyong Kang.Performance trade-offs in using NVRAM write buffer for flash memory-based storage devices[J].IEEE Transactions on Computers,2012(8):76-80.
[14]Siqiang FAN.Enhanced offset averaging technique for flash ADC design[J].清華大學(xué)學(xué)報(英文版),2011(3):78-80.
[15]邵富杰.用NOR Flash建立VxWorks TrueFFS文件系統(tǒng)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(4):56-60.
[16]熊金.基于CH376實現(xiàn)TMS320LF240x片內(nèi)Flash在線編程[J].工業(yè)儀表與自動化裝置,2014(6):37-39.
[17]周彬,劉保錄,王永喜.基于VxWorks的油井多參量采集系統(tǒng)設(shè)計[J].工業(yè)儀表與自動化裝置,2014(1):66-68.
Design of a fast boot method of VxWorks embedded system based on NOR Flash
XIAO Er-ning,ZHANG Xing-ming,LI Han,WEI Shuai
(National Digital Switching System Engineering Technology Research Center,Zhengzhou 450000,China)
Pointing to the condition that the embedded system is lack of NVRAM and the write&read speed request is not strict,a fast boot method of operation system based on Flash is designed on the platform of Vxworks operating system,the method uses NOR Flash storage for taking place of NVRAM to store boot information,and a 1+1 fault-tolerant mechanism is used.The test results show that it realizes the fast boot of operation system,and can effectively reduce the erase frequency,
Flash storage;VxWorks;interface function;fast boot
TN02
A
1674-6236(2016)18-0082-03
2016-01-23 稿件編號:201601219
國家自然科學(xué)基金創(chuàng)新群體項目(61521003)
肖二寧(1990—),男,河南開封人,碩士。研究方向:嵌入式技術(shù)。
extend the service life of Flash,improves the system stability.