設(shè)計開發(fā)了嵌入式實時操作系統(tǒng)
VxWorks的一種基于PC104總線的板載支持包,完成了相關(guān)的外圍驅(qū)動程序設(shè)計和調(diào)試工作。
[關(guān)鍵詞] PC104總線;VxWorks;集成開發(fā)環(huán)境Tornado;板載支持包BSP
1 引言
VxWorks是由美國的WindRiver推出的一種嵌入式強(qiáng)實時操作系統(tǒng),它存在多任務(wù)調(diào)度的方式,可以管理多個外設(shè),而且它可根據(jù)應(yīng)用程序的需求對操作系統(tǒng)進(jìn)行裁剪,最大程度的壓縮代碼,實現(xiàn)程序的優(yōu)化。
Intelx86系列處理器的嵌入式應(yīng)用一般是以PC104的形式出現(xiàn)的,PC104除包括PC/AT的所有標(biāo)準(zhǔn)功能外,它的CPU模塊還有一些獨(dú)特的優(yōu)點:開發(fā)周期短、費(fèi)用低、體積小、層疊連接、功耗小、模塊化、抗沖擊及震動能力強(qiáng),工作及存儲溫度范圍寬、集成度高,可靠性高。
在PC/104總線設(shè)備上使用的數(shù)據(jù)存儲設(shè)備通常有硬盤和基于閃存技術(shù)的固態(tài)電子盤。由于嵌入式系統(tǒng)工作環(huán)境一般比較惡劣,硬盤在惡劣的震動條件下無法正常工作,而固態(tài)電子盤的工作范圍很寬,可以選擇相應(yīng)環(huán)境下的器件(零下40℃到零上85℃),并且體積很小,適合嵌入式應(yīng)用。本嵌入式系統(tǒng)中數(shù)據(jù)存儲設(shè)備采用了CE公司的CF(CompactFlash)卡,而在此軟硬件平臺上設(shè)計開發(fā)了嵌入式實時操作系統(tǒng)VxWorks的并基于PC104總線的板載支持包。
2 VxWorks板載支持包BSP設(shè)計
2.1 基于PC104總線設(shè)備的VxWorks操作系統(tǒng)映像開發(fā)
在實時操作系統(tǒng)VxWorks中,硬件抽象層是以板載支持包BSP的形式出現(xiàn)的。針對不同的處理器體系結(jié)構(gòu)以及硬件環(huán)境設(shè)計不同的板載支持包,實時操作系統(tǒng)VxWorks就可以用于不同的硬件環(huán)境,大大減少了資源浪費(fèi)。因為板載支持包同時具有硬件相關(guān)性和操作系統(tǒng)相關(guān)性,是一個介于硬件與軟件之間的軟件層次,包括了系統(tǒng)中的大部分與硬件相關(guān)的軟件模塊。VxWorks板載支持包BSP的設(shè)計概念使嵌入式實時操作系統(tǒng)VxWorks成為一個通用的嵌入式軟件開發(fā)包,使得相關(guān)的高層的嵌入式應(yīng)用能夠有效地運(yùn)行于特定的、應(yīng)用相關(guān)的硬件設(shè)備之上,使嵌入式實時操作系統(tǒng)VxWorks的可移植性大大加強(qiáng)。
BSP與VxWorks操作系統(tǒng)的層次結(jié)構(gòu)如下圖1所示:
圖1BSP與VxWorks操作系統(tǒng)的層次結(jié)構(gòu)圖
基于PC104總線設(shè)備的VxWorks操作系統(tǒng)映像開發(fā)主要工作有3個方面:
①板載支持包設(shè)計與開發(fā)
VxWorks實時操作系統(tǒng)的板載支持包的開發(fā)通常提供一般模板程序,選擇一個相同處理器結(jié)構(gòu)板載支持包進(jìn)行設(shè)計。
②相關(guān)外圍硬件設(shè)備驅(qū)動程序
嵌入式系統(tǒng)是針對某一具體應(yīng)用場合開發(fā)的專用系統(tǒng),因此常常會使用到一些非標(biāo)準(zhǔn)的硬件設(shè)備,而VxWorks操作系統(tǒng)并不提供相關(guān)的外設(shè)驅(qū)動程序,使用時需自行開發(fā)相應(yīng)的外設(shè)驅(qū)動程序。
③操作系統(tǒng)映像配置與生成
對VxWorks操作系統(tǒng)各個功能模塊進(jìn)行配置,使其在滿足功能需求的條件下達(dá)到代碼量最小,同時也減少出錯的可能性。
2.2 BSP的基本功能及其啟動過程分析
VxWorks板級支持包BSP在功能上包含兩個部分:初始化和驅(qū)動程序支持。BSP提供了VxWorks同硬件環(huán)境的基本接口界面,并在上電時進(jìn)行硬件初始化(包括中斷向量的初始化、定時器初始化、核心內(nèi)存映象的加載等),支持VxWorks對硬件驅(qū)動的訪問,將VxWorks中軟件集成到一體,其功能相當(dāng)于PC機(jī)的BIOS。
VxWorks內(nèi)核的加載分為兩個步驟,第一個步驟是PCBIOS對bootrom的加載,第二個步驟是BSP引導(dǎo)映像bootrom對VxWorks操作系統(tǒng)映像加載。基本流程如下所示:
2.3 BSP中函數(shù)調(diào)用過程分析
BSP啟動操作系統(tǒng)的過程中,需要調(diào)用一列函數(shù)以完成對系統(tǒng)內(nèi)存映像的加載,整個過程分析如下,RomInit函數(shù)初始化處理器,關(guān)閉高速緩存,關(guān)中斷,初始化內(nèi)存。接著調(diào)用RomStart,把映像的數(shù)據(jù)段拷貝到RAM中去,然后調(diào)用usrInit()對Bss段清零,調(diào)用intVecBaseSet()設(shè)置矢量基地址表,調(diào)用excVecInt()初始化中斷以及異常的向量表,初始化系統(tǒng)硬件,調(diào)用usrKernelInit()初始化wind內(nèi)核,最后執(zhí)行流程執(zhí)行到kernelInit(),kernelInit啟動wind內(nèi)核。Wind內(nèi)核的第一個任務(wù)是usrRoot它通過調(diào)用usrAppInit啟動用戶的任務(wù),系統(tǒng)可真正啟動。
2.4 修改BSP設(shè)計概要
一般情況下,Tornado提供一些評估板的板載支持包,而PC104主機(jī)板是根據(jù)工作實際需要購買的,評估板的板載支持包不能夠直接使用,需要進(jìn)行修改完善。可行的方法是:基于pc586的BSP作為模板進(jìn)行適當(dāng)修改,以滿足這款PC104主機(jī)板的特定硬件環(huán)境。
板載支持包通常存放在Tornado的安裝目錄下面,其路徑是Root/target/config/bspname,root代表tornado的安裝目錄。設(shè)計一個可用的新的板載支持包,必須對Tornado本身自帶板載支持包作一定的分析。pc586板載支持包主要包括一些C文件和一些匯編文件,它們是:config.h,configAll.h,Pc.h,sysLib.c,ctdt.c,sysNetif.c,mkboot.c。板載支持包的缺省配置是由configALL.h來確定的,用戶可通過config.h來改變?nèi)笔∨渲谩H笔∨渲檬前凑仗幚砥鲝S商的評估板外圍硬件進(jìn)行系統(tǒng)配置,根據(jù)實際硬件環(huán)境,一般需要做一定的改動,通常會在config.h中進(jìn)行,通過一系列的定義宏,完成系統(tǒng)配制工作。
要設(shè)計針對這個半物理仿真試驗的所選用的PC104主機(jī)板板載支持包,增加VxWorks對CF卡支持,需要做出較大改動的文件是config.h和configAll.h以及sysLib.c這3個文件,具體如下:
①在config/bspname/bspname.h中找到修改其CF卡的中斷號,因為一般中斷號0x9是預(yù)留給硬盤接口,為了避免產(chǎn)生中斷沖突,將#define ATA1_INT_LVL0x9,改為#define ATA1_INT_LVL0xf
②在config/bspname/sysLib.c中找到ATA_RESOURCEataResource[]={................PCMCIA................ }
修改為ATA_RESOURCEataResource[]={................IDE_LOCAL................. }
另外還需要改寫其他的參數(shù),例如ATA1_CONFIG等。
③在config.h中,把#define SYS_WARM_ATA_CTRL 0改為#define SYS_WARM_ATA_CTRL 1這樣系統(tǒng)熱啟動后,就會從CF卡上的引導(dǎo)區(qū)上引導(dǎo)。
④在config.h中將#define SYS_WARM_TYPE SYS_WARM_FD/*warmstartdevice*/改為#define SYS_WARM_TYPESYS_WARM_ATA
⑤修改ataType數(shù)組使它和所選的CF卡的幾何參數(shù)(磁道,扇區(qū),柱面等)相等。
將原來的ataTypes數(shù)組ATA_TYPEataTypes[ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {................{{761,8,39,512,0xff},/*ctrl1drive0*/...............};
改為ATA_TYPE ataTypes [ATA_MAX_CTRLS] [ATA_MAX_DRIVES]= {................{{984,16,4,512,0xff},/*ctrl1drive0*/...............};
這個參數(shù)可以在主機(jī)板的BIOS中查找到,進(jìn)入BIOS后使用idedetection就可以查看到CF卡幾何參數(shù),根據(jù)查到CF卡的幾何參數(shù),就可以在sysLib.c中做出相應(yīng)的修改。
2.5 BSP的調(diào)試
針對板載支持包的設(shè)計開發(fā),VxWorks并沒有提供了非常好的調(diào)試手段,這樣就給調(diào)試BSP帶來的很大困難。所以在對BSP進(jìn)行調(diào)試之前,盡量減少代碼量,通過改寫B(tài)SP目錄下Makefile來去除不需要的代碼編譯,然后再對BSP調(diào)試。調(diào)試的方式一般采用閃燈的方式,通過在有疑問的代碼之間插入閃燈的代碼,通過對I/O端口的可視LED訪問,觀察燈是否閃亮來判斷BSP的執(zhí)行流程。
3 結(jié)束語
通過多次試驗的調(diào)試,最終設(shè)計出了基于PC104總線的VxWorks板載支持包。并應(yīng)用于某型飛機(jī)燃油系統(tǒng)的智能化管理,實踐結(jié)果表明,這種方法是一種切實可行的方案。