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