專利名稱::X86飛控計算機快速啟動方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種X86架構(gòu)飛控計算機系統(tǒng)的快速啟動方法,屬于VxWorks實時操作系統(tǒng)的X86架構(gòu)飛控計算機系統(tǒng)的快速啟動方法,尤指安全緊要系統(tǒng)應(yīng)用軟件的快速啟動,以保證瞬時斷電時實際控制系統(tǒng)的安全。
背景技術(shù):
:在我國軍事、航空、航天等高精尖技術(shù)及實時性要求高的領(lǐng)域中,基于X86架構(gòu)的計算機有著廣泛的應(yīng)用,其中大部分系統(tǒng)需要能快速啟動,以在瞬時掉電時能夠快速重啟,保證系統(tǒng)或設(shè)備的安全。對于采用嵌入式實時操作系統(tǒng)VxWorks的飛控計算機,快速啟動是其能夠?qū)嵱玫那疤釛l件,也是迫切需要解決的一個問題。對于X86體系結(jié)構(gòu),程序存放在硬盤等外部存儲器中,CPU不能直接從這些存儲器中取指令執(zhí)行,而需要BIOS的輔助。BIOS將啟動盤的引導(dǎo)扇區(qū)復(fù)制到主內(nèi)存空間,再跳轉(zhuǎn)到內(nèi)存的給定地址執(zhí)行。其常規(guī)的啟動過程包括以下3個步驟(1)BIOS階段主要為初始化CPU及周邊設(shè)備,并向后提供硬件接口。(2)VxWorks引導(dǎo)映像(boo加m.sys)加載階段主引導(dǎo)記錄(vxld程序)通過BIOS功能調(diào)用,由輔助存儲器拷貝VxWorks引導(dǎo)映像至內(nèi)存給定地址(X86架構(gòu)下此地址一般為0x08000)。X86體系結(jié)構(gòu)CPU由于向下兼容的考慮,在CPU啟動初期一般處于實模式工作環(huán)境,BIOS階段即處于實模式。實模式的顯著特點就是CPU只能訪問1MB的內(nèi)存大小??紤]到內(nèi)存空間0x0A00000xFFFFF此時為BIOS使用,VxWorks系統(tǒng)引導(dǎo)映像一般被限定在0x0080000x097FFF這575KB空間內(nèi)。(3)VxWorks啟動/加載階段加載全功能VxWorks系統(tǒng)映像。第(2)步加載的VxWorks引導(dǎo)映像(bootrom.sys)僅包含一個基本功能的VxWorks,其功能是為系統(tǒng)掛載設(shè)備,為下一步全功能的VxWorks系統(tǒng)映像的加載做準(zhǔn)備。VxWorks系統(tǒng)映像包含了全功能的VxWorks系統(tǒng),VxWorks系統(tǒng)映像加載后拋棄上一步啟動的基本VxWorks系統(tǒng),重新啟動此全功能VxWorks供用戶使用??梢奦xWorks系統(tǒng)是經(jīng)過二次引導(dǎo)啟動的,如圖l所示,VxWorks引導(dǎo)映像作用有二一是可以避開實模式對VxWorks引導(dǎo)映像大小的限制;二是通過引導(dǎo)方便控制第二次加載映像的位置及方法。這樣就可以很方便地修改第二步的VxWorks映像,所以二次引導(dǎo)啟動大多用于調(diào)試和系統(tǒng)可在線升級的應(yīng)用中。但由于存儲設(shè)備的掛載需要較多的時間,且整個過程啟動了兩次VxWorks系統(tǒng),二次引導(dǎo)啟動的速度對于大多數(shù)嵌入式實時控制系統(tǒng)來說顯得過于漫長。
發(fā)明內(nèi)容為了解決VxWorks系統(tǒng)二次引導(dǎo)而導(dǎo)致系統(tǒng)啟動慢的問題,本發(fā)明提供一種實現(xiàn)X86架構(gòu)下VxWorks系統(tǒng)一次引導(dǎo)快速啟動的方法。一次引導(dǎo)啟動去除了二次引導(dǎo)啟動中的VxWorks引導(dǎo)映像的加載,即主引導(dǎo)記錄直接加載全功能VxWorks系統(tǒng)映像VxWorks—rom,并同時加載了應(yīng)用程序模塊,明顯提高了系統(tǒng)的啟動速度。本發(fā)明解決其技術(shù)問題所釆取的技術(shù)方案是采用一次引導(dǎo)方法直接裝載的VxWorks系統(tǒng)核心的全功能系統(tǒng)映像VxWorks—rom,并同時加載關(guān)鍵的應(yīng)用程序模塊。由于一次引導(dǎo)啟動去除了VxWorks引導(dǎo)映像,其;動速度是最快的,但顯然面臨映像大小受限的問題。另一方面,系統(tǒng)快速啟動的目的主要是為了應(yīng)用軟件能夠快速恢復(fù)工作,這就要求應(yīng)用模塊要和VxWorks系統(tǒng)合為一個模塊同時加載。前面已經(jīng)指出一次引導(dǎo)啟動其啟動映像大小一般會受到限制,另外啟動映像過大也會增加啟動時間。在飛行控制系統(tǒng)中,對時間要求嚴(yán)格的應(yīng)用一般只占較小一部分,比如內(nèi)回路姿態(tài)控制的快速恢復(fù)即可在很大程度上保證飛機的安全,而對于諸如通信等任務(wù)來說其對啟動速度的要求就不是那么嚴(yán)格。為了減少啟動時間,滿足實模式下對加載映像大小的限制,選擇一次引導(dǎo)啟動并盡量減小全功能系統(tǒng)映像的大小。因此提出如下解決方案全功能的系統(tǒng)映像只包括一些比較重要的,對時間比較敏感的緊急任務(wù),而其他對時間不太敏感的普通任務(wù)作為一個單獨模塊于緊急任務(wù)啟動后動態(tài)加載。另外對VxWorks系統(tǒng)按要求定制,裁減掉與緊急任務(wù)不相關(guān)、但普通任務(wù)需要的VxWorks系統(tǒng)模塊,以盡可能減小映像大小。裁減掉而普通模塊需要的系統(tǒng)模塊可與普通模塊一起動態(tài)加載。動態(tài)加載就是當(dāng)系統(tǒng)運行起來之后,通過程序?qū)⒎旁诖鎯ζ髦械哪繕?biāo)模塊調(diào)入內(nèi)存,對目標(biāo)模塊中的符號完成解析、鏈接,并按照要求運行目標(biāo)模塊的程序。這一切得益于VxWorks的鏈接器(linker)和加載器(loader)以及符號表。符號表含有供鏈接程序使用的記錄數(shù)據(jù),用于在二進制目標(biāo)文件之間對命名的變量和函數(shù)(符號)進行交叉引用;字符串表含有與符號名相對應(yīng)的字符串。動態(tài)加載的設(shè)計思想如下動態(tài)加載的應(yīng)用模塊一般為未完全鏈接的不可執(zhí)行文件,加載必須對其進行重定位和符號解析操作。目標(biāo)模塊創(chuàng)建起始地址為O,然而目標(biāo)模塊并不能加載到此位置。重定位就是按照指定加載位置調(diào)整代碼和數(shù)據(jù)的過程。比如,如果程序?qū)嶋H被加載到位置0x5000,即段基址為0x500。那么文件中對段基址0x12的引用將會重定位為0x512。由于程序作為一個整體被重定位的,段內(nèi)偏移量不會改變,所以加載器不需要修正除段基址之外的其他內(nèi)容。同時目標(biāo)模塊中存在大量對各種外部變量、外部函數(shù)或共享庫的引用,編譯時外部引用地址全部用0填充。符號解析就是把這些用0填充的地址修改為引用符號的確定地址。要完成符號解析必須要知道系統(tǒng)中全局符號的具體地址。系統(tǒng)映像為完全鏈接的可執(zhí)行文件,其加載地址和鏈接地址相同,系統(tǒng)映像文件中的符號表和符號串表就記錄了所有的全局符號以及其位于內(nèi)存中的具體地址。以此創(chuàng)建一個哈希表記錄全局符號和對應(yīng)地址,通過査找此表即可完成動態(tài)加載目標(biāo)模塊的符號解析。同時系統(tǒng)會將新加載的應(yīng)用模塊的全局符號添加到符號表中,用于后續(xù)加載模塊的引用或用于啟動該應(yīng)用模塊。圖l是常用的二次引導(dǎo)系統(tǒng)加載過程示意圖。圖2是本發(fā)明一次引導(dǎo)系統(tǒng)加載過程示意圖。具體實施例方式采用workbench2.5作為開發(fā)工具,硬盤或CF卡(C盤)作為VxWorks系統(tǒng)啟動設(shè)備。用命令行方式或tomado開發(fā)有類似的步驟和方法。(1)硬盤的格式化和引導(dǎo)記錄的寫入制作DOS啟動盤,在目標(biāo)機中DOS啟動盤為A盤,將vxsys.com拷貝到啟動盤中,在DOS環(huán)境下,執(zhí)行命令A(yù):\vxsysC:在硬盤中生成VxWorks系統(tǒng)的主引導(dǎo)記錄(vxld)。(2)根據(jù)硬件環(huán)境定制BSP(板級支持包)在建立所有的工程之前,首先根據(jù)硬件情況來配置BSP,然后將所有的工程都建立在此BSP上。對BSP的定制主要是靠修改相關(guān)的配置文件configAll.h,config.h,makefile來完成。多修改BSP的配置文件config.h,達(dá)到修改內(nèi)存地址、硬件配置等的目的。Makefile是bootrom映像的編譯規(guī)則文件,嚴(yán)格說不屬于配置文件,但里面有幾個內(nèi)存地址相關(guān)的宏定義,應(yīng)該和config.h文件中一致,如向BSP中加入自己的驅(qū)動代碼,如網(wǎng)卡驅(qū)動和TFFS驅(qū)動等,這時也需要修改makefile,一般是添加EXTAR—MODULE定義。(3)生成VxWorks引導(dǎo)文件Bootrom利用workbench集成開發(fā)環(huán)境建立一個bootableimageproject類型的工程,選擇(2)中定制的BSP,選擇引導(dǎo)文件的格式為.bin,編譯得到引導(dǎo)文件bootrom.bin。再用文件拷貝命令copybootrom.binI:\bootrom.sys(設(shè)啟動盤(CF卡)在主機中標(biāo)示符為I盤)將其拷貝到目標(biāo)系統(tǒng)引導(dǎo)盤,并檢查該引導(dǎo)文件的連續(xù)性。(4)制做全功能VxWorks映像文件利用workbench集成開發(fā)環(huán)境建立一個工程(loadableImageProject),選擇修改后的BSP,然后進行VxWorks系統(tǒng)組件的定制,并加入應(yīng)用程序,編譯后生成vxwroks映像。然后,將生成的映像vxworks拷貝到目標(biāo)系統(tǒng)引導(dǎo)盤。(5)目標(biāo)系統(tǒng)啟動將啟動盤(CF卡)放到目標(biāo)系統(tǒng),加電,系統(tǒng)啟動運行。至此傳統(tǒng)啟動完成。這樣,啟動系統(tǒng)時,即會按照BIOS—Vxld—bootrom—全功能VxWorks的順序進行,啟動完成后,即自動加載應(yīng)用程序執(zhí)行。本發(fā)明的獨特之處在于將操作系統(tǒng)和應(yīng)用程序均按任務(wù)的緊急程度進行分解,并按優(yōu)先次序加載,避免了VxWorks基本系統(tǒng)的加載,直接加載全功能VxWorks系統(tǒng)。因此啟動過程(2)中有部分操作比如bootline定制可省去,(3)(4)步變?yōu)?3)生成非緊急任務(wù)目標(biāo)模塊建立loadableImageProject工程,將應(yīng)用程序的非緊急任務(wù)模塊放入工程中,編譯后生成目標(biāo)文件(如testout)。將此目標(biāo)文件放入外部存儲器中(不一定是作為啟動盤的存儲器),等待系統(tǒng)的動態(tài)加載。(4)主系統(tǒng)映像的制作1)定制系統(tǒng)及啟動順序優(yōu)化在Workbench中建立VxWorksImageProject工程,同時將應(yīng)用程序的緊急任務(wù)模塊加入到工程中,和系統(tǒng)映像一起編譯,裁減掉不需要的組件,根據(jù)需要修改VxWorks各組件的啟動次序。通過修改工程中的usrAppInitc文件來實現(xiàn)將緊急任務(wù)用不著的各種初始化操作一律放在緊急任務(wù)之后啟動。2)添加動態(tài)加載支持組件將VxWorks系統(tǒng)符號表編譯至ljVxWorks系統(tǒng)映像中和VxWorks系統(tǒng)映像一起加載,在工程中添加built-insymboltable及initializesystemsymboltable組件,VxWorks系統(tǒng)映像中會含有招ncludeINCLUDE—SYM—TBL實現(xiàn)符號表的初始化hashLiblnit(》symliblnit();若對非緊急任務(wù)的啟動時間要求不嚴(yán)格,動態(tài)加載的時間不計較,可以將系統(tǒng)符號表也采用動態(tài)加載的方式來加載,但此時應(yīng)禁止系統(tǒng)符號表的重定位。為實現(xiàn)動態(tài)加載,在工程添加loadercomponents組件,此時VxWorks系統(tǒng)映像中會含有射ncludeINCLUDE—LOADER實現(xiàn)VxWorks系統(tǒng)模塊管理功能的初始化moduleLiblnit(》cplusDemanglerlnit();為保證緊急任務(wù)的啟動速度,所添加的動態(tài)加載支持組件應(yīng)放在緊急任務(wù)啟動之后,在usrAppInit.c中實現(xiàn)。3)動態(tài)加載及程序的運行使用loadModule()加載具體的應(yīng)用程序,最后使用symFindByName()在系統(tǒng)符號表中查找出加載應(yīng)用的函數(shù)入口并執(zhí)行。實現(xiàn)動態(tài)加載的程序段主要語句舉例fd=open("/ata0a/test.out",O—RDONLY,0);hModule=loadModule(fd,LOAD—ALL—SYMBOLS));symFindByName(sysSymTbl,"test",(char**)&taskEntry,&Type);taskSpawn("test",100,0,30000,taskEntry,0,0,0,0,0,0,0,0,0,0);4)生成主系統(tǒng)映像編譯生成VxWorks—rom.bin格式映像,便為要加載的全功能系統(tǒng)映像,注意此映像的大小不能超過系統(tǒng)的允許值(此處根據(jù)硬件內(nèi)存資源決定)。然后將VxWorks—rom.bin映像作為bootrom.sys放入目標(biāo)系統(tǒng)的啟動盤(CF卡)中,同時要保證映像在存儲器中連續(xù)存放。至此快速啟動制作過程結(jié)束。權(quán)利要求1.一種X86飛控計算機快速啟動方法,該快速啟動方法是,采用Workbench2.5作為開發(fā)工具,硬盤或CF卡作為VxWorks系統(tǒng)啟動設(shè)備,包括如下步驟(1)硬盤的格式化和引導(dǎo)記錄的寫入制作DOS啟動盤,在目標(biāo)機中DOS啟動盤為A盤,將vxsys.com拷貝到啟動盤中,在DOS環(huán)境下,執(zhí)行命令A(yù):\vxsysC:在硬盤中生成VxWorks系統(tǒng)的主引導(dǎo)記錄vxld;(2)定制BSP在建立所有的工程之前,首先根據(jù)硬件情況來配置BSP,然后將所有的工程都建立在此BSP上,對BSP的定制,是靠修改相關(guān)的配置文件configAll.h,config.h,makefile來完成,其中多修改BSP的配置文件config.h,達(dá)到修改內(nèi)存地址、硬件配置等目的,Makefile是bootrom映像的編譯規(guī)則文件,但含有內(nèi)存地址相關(guān)的宏定義,所以應(yīng)和config.h文件中一致,同時也需要修改makefile配置文件,一般是添加EXTAR_MODULE定義;其特征在于,對VxWorks操作系統(tǒng)和應(yīng)用程序均按任務(wù)的緊急程度進行分解,并按優(yōu)先次序加載,實現(xiàn)X86計算機實模式下VxWorks系統(tǒng)映像與關(guān)鍵的應(yīng)用程序模塊一次性直接加載,并利用VxWorks的鏈接器、加載器以及符號表,將應(yīng)用程序的非緊急模塊使用的操作系統(tǒng)功能和應(yīng)用程序的相應(yīng)模塊于系統(tǒng)啟動后進行動態(tài)加載,具體操作步驟是(3)生成非緊急任務(wù)目標(biāo)模塊建立downloadablekernelModuleProject工程,選擇已定制的BSP,將應(yīng)用程序的非緊急任務(wù)模塊放入工程中,編譯后生成目標(biāo)文件,將此目標(biāo)文件放入外部存儲器中,等待系統(tǒng)的動態(tài)加載;(4)主系統(tǒng)映像的制作1)定制系統(tǒng)及啟動順序優(yōu)化在Workbench中建立VxWorksImageProject工程,選擇已定制的BSP,同時將應(yīng)用程序的緊急任務(wù)模塊加入到工程中和VxWorks系統(tǒng)映像一起編譯,裁減掉不需要的組件,根據(jù)需要修改VxWorks各組件的啟動次序,通過修改工程中的usrAppInit.c文件來實現(xiàn)將緊急任務(wù)用不著的各種初始化操作一律放在緊急任務(wù)之后啟動;2)添加動態(tài)加載支持組件將VxWorks系統(tǒng)符號表編譯到VxWorks系統(tǒng)映像中和VxWorks系統(tǒng)映像一起加載,在工程中添加built-insymboltable及initializesystemsymboltable組件,VxWorks系統(tǒng)映像中會含有#includeINCLUDE_SYM_TBL實現(xiàn)符號表的初始化hashLibInit();symLibInit();為實現(xiàn)動態(tài)加載,在工程中添加Loadercomponents組件,此時VxWorks系統(tǒng)映像中會含有#includeINCLUDE_LOADER實現(xiàn)VxWorks系統(tǒng)模塊管理功能的初始化moduleLibInit();cplusDemanglerInit();為保證緊急任務(wù)的啟動速度,所添加的動態(tài)加載支持組件應(yīng)放在緊急任務(wù)啟動之后,在usrAppInit.c中實現(xiàn);3)動態(tài)加載及程序的運行使用loadModule()加載具體的應(yīng)用程序,最后使用symFindByName()在VxWorks系統(tǒng)符號表中查找出加載應(yīng)用的函數(shù)入口并執(zhí)行,實現(xiàn)動態(tài)加載的程序段主要語句有fd=open(″/ata0a/test.out″,0_RDONLY,0);hModule=loadModule(fd,LOAD_ALL_SYMBOLS));symFindByName(sysSymTbl,″test″,(char**)&taskEntry,&Type);taskSpawn(″test″,100,0,30000,taskEntry,0,0,0,0,0,0,0,0,0,0);4)生成主系統(tǒng)映像編譯生成VxWorks_rom.bin格式映像,便為要加載的全功能VxWorks系統(tǒng)映像,此映像的大小不能超過實際目標(biāo)系統(tǒng)的允許值,然后將VxWorks_rom.bin映像作為bootrom.sys放入目標(biāo)系統(tǒng)的啟動盤或CF卡中,同時要保證映像在存儲器中連續(xù)存放;(5)將啟動盤放到目標(biāo)系統(tǒng),加電,系統(tǒng)啟動運行。全文摘要一種X86飛控計算機快速啟動方法,屬一種X86架構(gòu)計算機系統(tǒng)的快速啟動方法。對于X86體系結(jié)構(gòu)CPU,啟動初期一般處于實模式工作環(huán)境,此時CPU只能訪問1MB的內(nèi)存大小,用戶能夠訪問的只有575KB。VxWorks系統(tǒng)通常是經(jīng)過二次引導(dǎo)啟動的,操作系統(tǒng)加載完成后才啟動應(yīng)用程序,因而導(dǎo)致存在較長的啟動時間。本發(fā)明通過對VxWorks操作系統(tǒng)進行裁剪,并將應(yīng)用程序的緊急任務(wù)和非緊急任務(wù),一次性直接加載全功能VxWorks系統(tǒng)映像VxWorks_rom,并同時加載應(yīng)用程序的緊急任務(wù),利用VxWorks的鏈接器、加載器以及符號表技術(shù),將操作系統(tǒng)和應(yīng)用程序的非緊急任務(wù)模塊于系統(tǒng)啟動后進行動態(tài)加載,從而大大提高了飛控計算機關(guān)鍵應(yīng)用程序的啟動速度。對于航空航天等安全緊要系統(tǒng)的控制計算機的快速啟動有現(xiàn)實的應(yīng)用背景。文檔編號G06F9/445GK101515239SQ200910029309公開日2009年8月26日申請日期2009年4月8日優(yōu)先權(quán)日2009年4月8日發(fā)明者李秀娟,王永亮申請人:南京航空航天大學(xué)