嵌入式VxWorks全程學(xué)習(xí)總結(jié).doc_第1頁(yè)
嵌入式VxWorks全程學(xué)習(xí)總結(jié).doc_第2頁(yè)
嵌入式VxWorks全程學(xué)習(xí)總結(jié).doc_第3頁(yè)
嵌入式VxWorks全程學(xué)習(xí)總結(jié).doc_第4頁(yè)
嵌入式VxWorks全程學(xué)習(xí)總結(jié).doc_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

嵌入式VxWorks學(xué)習(xí)總結(jié)報(bào)告嵌入式VxWorks學(xué)習(xí)總結(jié)作者: 學(xué)號(hào): 單位: 日期: 2010-10-21 1目 錄1 嵌入式VxWorks OS介紹12 VxWorks開發(fā)42.1 Tornado開發(fā)工具42.1.1 安裝過(guò)程42.1.2 內(nèi)部組件52.1.3 使用說(shuō)明72.2 VxWorks開發(fā)策略12.2.1 交叉調(diào)試開發(fā)12.2.2 板級(jí)支持包BSP12.2.3 任務(wù)調(diào)度42.2.4 信號(hào)量62.3 VMWare上安裝VxWorks92.3.1 概述92.3.2 準(zhǔn)備工作92.3.3 開始安裝102.3.4 編譯程序122.3.5 制作引導(dǎo)磁盤142.3.6 配置FTP服務(wù)器142.3.7 創(chuàng)建VxWorks系統(tǒng)152.3.8 配置聯(lián)機(jī)調(diào)試環(huán)境162.4 PC機(jī)上安裝VxWorks182.4.1 概述182.4.2 開發(fā)前準(zhǔn)備192.4.3 修改BSP192.4.4 網(wǎng)卡配置202.4.5 制作啟動(dòng)盤222.4.6 后續(xù)配置與開發(fā)232.5 軟件界面開發(fā)232.5.1 WindML與中文顯示232.5.2 WindML環(huán)境配置262.5.3 漢字顯示方案282.5.4 WindML注意事項(xiàng)293 開發(fā)和問(wèn)題293.1 VxWorks開發(fā)工作293.1.1 硬件環(huán)境搭建303.1.2 網(wǎng)絡(luò)通信303.1.3 基于緩沖隊(duì)列的多任務(wù)網(wǎng)絡(luò)通信323.1.4 命令通道與任務(wù)優(yōu)先級(jí)333.1.5 雙網(wǎng)卡通信343.1.6 中西文混合輸出364 參考資料39371 嵌入式VxWorks OS介紹VxWorks是目前世界上用戶數(shù)量最大的實(shí)時(shí)操作系統(tǒng),它具有高度可剪裁的微內(nèi)核結(jié)構(gòu)、高效的多任務(wù)調(diào)度、靈活的任務(wù)間通信手段、快速靈活的I/O系統(tǒng)、確定的s級(jí)中斷延遲時(shí)間等優(yōu)點(diǎn)。作為實(shí)時(shí)多任務(wù)操作系統(tǒng),VxWorks采用中斷處理與普通任務(wù)分別在不同的堆棧中處理的中斷處理機(jī)制,中斷服務(wù)程序只完成在最小時(shí)間內(nèi)通告中斷的發(fā)生,而將其他非實(shí)時(shí)處理盡量通過(guò)中斷與任務(wù)間的通信機(jī)制放在被引發(fā)的任務(wù)上下文完成。這樣就能保證任務(wù)在確定的時(shí)間內(nèi)執(zhí)行,滿足虛擬試驗(yàn)實(shí)時(shí)信息傳輸與處理的要求。目前最重要的RTOS主要包括:第一類、傳統(tǒng)的經(jīng)典RTOS:最主要的便是Vxworks操作系統(tǒng),以及其Tornado開發(fā)平臺(tái)。Vxworks因出現(xiàn)稍早,實(shí)時(shí)性很強(qiáng)(據(jù)說(shuō)可在1ms內(nèi)響應(yīng)外部事件請(qǐng)求),并且內(nèi)核可極微(據(jù)說(shuō)最小可8K),可靠性較高等,所以在北美,Vxworks占據(jù)了嵌入式系統(tǒng)的多半疆山。特別是在通信設(shè)備等實(shí)時(shí)性要求較高的系統(tǒng)中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術(shù)都和Linux很類似,主要是C語(yǔ)言開發(fā)。像Bell-alcatel、Lucent、華為等通信企業(yè)在開發(fā)產(chǎn)品時(shí),Vxworks用得很多。但Vxworks因價(jià)格很高,所以一些小公司或小產(chǎn)品中往往用不起。目前很多公司都在往嵌入式Linux轉(zhuǎn)(聽說(shuō)華為目前正在這樣轉(zhuǎn))。但無(wú)論如何,Vxworks在一段長(zhǎng)時(shí)間內(nèi)仍是不可動(dòng)搖的。與Vxworks類似的稍有名的實(shí)時(shí)操作系統(tǒng)還有pSOS、QNX、Nucleus等RTOS。第二類、嵌入式Linux操作系統(tǒng):Linux的前途除作為服務(wù)器操作系統(tǒng)外,最成功的便是在嵌入式領(lǐng)域的應(yīng)用,原因當(dāng)然是免費(fèi)、開源、支持軟件多、呼擁者眾,這樣嵌入式產(chǎn)品成本會(huì)低。Linux本身不是一個(gè)為嵌入式設(shè)計(jì)的操作系統(tǒng),不是微內(nèi)核的,并且實(shí)時(shí)性不強(qiáng)。目前應(yīng)用在嵌入式領(lǐng)域的Linux系統(tǒng)主要有兩類:一類是專為嵌入式設(shè)計(jì)的已被裁減過(guò)的Linux系統(tǒng),最常用的是uClinux(不帶MMU功能),目前占較大應(yīng)用份額,可在ARM7上跑;另一類是跑在ARM 9上的,一般是將Linux 2.4.18內(nèi)核移植在其上,可使用更多的Linux功能(當(dāng)然uClinux更可跑在ARM 9上)。很多人預(yù)測(cè),嵌入式Linux預(yù)計(jì)將占嵌入式操作系統(tǒng)的50%以上份額,非常重要。缺點(diǎn)是熟悉Linux的人太少,開發(fā)難度稍大。另外,目前我們能發(fā)現(xiàn)很多教材和很多大學(xué)都以u(píng)cOS/II為教學(xué)用實(shí)時(shí)操作系統(tǒng),這主要是由于ucOS/II較簡(jiǎn)單,且開源,非常適合入門者學(xué)習(xí)實(shí)時(shí)操作系統(tǒng)原理,但由于ucOS/II功能有限,實(shí)用用得較少。目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發(fā),F(xiàn)ujitum則是在自己的處理器上大搞Linux開發(fā)。第三類、 Windows CE嵌入式操作系統(tǒng):Microsoft也看準(zhǔn)了嵌入式的巨大市場(chǎng),MS永遠(yuǎn)是最厲害的,WinCE出來(lái)只有幾年時(shí)間,但目前已占據(jù)了很大市場(chǎng)份額,特別是在PDA、手機(jī)、顯示儀表等界面要求較高或者要求快速開發(fā)的場(chǎng)合,WinCE目前已很流行(據(jù)說(shuō)有一家賣工控機(jī)的公司板子賣得太好,以至來(lái)不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發(fā)平臺(tái)主要為WinCE Platform Builder,有時(shí)也用EVC環(huán)境開發(fā)一些較上層的應(yīng)用,開發(fā)環(huán)境方便快速,微軟的強(qiáng)大技術(shù)支持,WinCE開發(fā)難度遠(yuǎn)低于嵌入式Linux。對(duì)于急于完成,不想拿嵌入式Linux冒險(xiǎn)的開發(fā)場(chǎng)合,WinCE是最合適了。根據(jù)不同的側(cè)重點(diǎn),WinCE還有兩個(gè)特殊版本,一個(gè)是MS PocketPC操作系統(tǒng)專用于PDA上(掌上電腦),另一個(gè)是MS SmartPhone操作系統(tǒng)用于智能手機(jī)上(帶PDA功能的手機(jī)),兩者也都屬于WinCE平臺(tái)。在PDA和手機(jī)市場(chǎng)上,除WinCE外,著名的PDA嵌入式操作系統(tǒng)還有Palm OS(因出現(xiàn)很早,很有名)、Symbian等。實(shí)時(shí)多任務(wù)操作系統(tǒng)是能在確定的時(shí)間內(nèi)執(zhí)行其功能,并對(duì)外部的異步事件作出響應(yīng)的計(jì)算機(jī)系統(tǒng)。多任務(wù)環(huán)境允許一個(gè)實(shí)時(shí)應(yīng)用作為一系列獨(dú)立任務(wù)來(lái)運(yùn)行,各任務(wù)有各自的線程和系統(tǒng)資源。VxWorks系統(tǒng)提供多處理器間和任務(wù)間高效的信號(hào)燈、消息隊(duì)列、管道、網(wǎng)絡(luò)透明的套接字。 實(shí)時(shí)系統(tǒng)的另一關(guān)鍵特性是硬件中斷處理。為了獲得最快速可靠的中斷響應(yīng),VxWorks系統(tǒng)的中斷服務(wù)程序ISR有自己的上下文。VxWorks實(shí)時(shí)操作系統(tǒng)由400多個(gè)相對(duì)獨(dú)立的、短小精煉的目標(biāo)模塊組成,用戶可根據(jù)需要選擇適當(dāng)模塊來(lái)裁剪和配置系統(tǒng),這有效地保證了系統(tǒng)的安全性和可靠性。系統(tǒng)的鏈接器可按應(yīng)用的需要自動(dòng)鏈接一些目標(biāo)模塊。這樣,通過(guò)目標(biāo)模塊之間的按需組合,可得到許多滿足功能需求的應(yīng)用。VxWorks操作系統(tǒng)的基本構(gòu)成模塊包括以下部分:(1)高效的實(shí)時(shí)內(nèi)核WindVxWorks實(shí)時(shí)內(nèi)核(Wind)主要包括基于優(yōu)先級(jí)的任務(wù)調(diào)度、任務(wù)同步和通信、中斷處理、定時(shí)器和內(nèi)存管理。(2)兼容實(shí)時(shí)系統(tǒng)標(biāo)準(zhǔn)POSIXVxWorks提供接口來(lái)支持實(shí)時(shí)系統(tǒng)標(biāo)準(zhǔn)P.1003.1b.(3)I/O系統(tǒng)VxWOrks提供快速靈活的與ANSI-C相兼容的I/O系統(tǒng),包括UNIX的緩沖I/O和實(shí)時(shí)系統(tǒng)標(biāo)準(zhǔn)POSIX的異步I/O。VxWOrks包括以下驅(qū)動(dòng):網(wǎng)絡(luò)-網(wǎng)絡(luò)設(shè)備(以太網(wǎng)、共享內(nèi)存)管道-任務(wù)間通信RAM-駐留內(nèi)存文件SCSI-SCSI硬盤,磁碟,磁帶鍵盤-PC x86鍵盤(BSP僅支持x86)顯示器-PC x86顯示器(BSP僅支持x86)磁碟-IDE和軟盤(BSP僅支持x86)并口-PC格式的目標(biāo)硬件(4)本機(jī)文件系統(tǒng)VxWorks的文件系統(tǒng)與MS-DOS、RT-11、RAM、SCSI等相兼容。(5)網(wǎng)絡(luò)特性VxWorks網(wǎng)絡(luò)能與許多運(yùn)行其它協(xié)議的網(wǎng)絡(luò)進(jìn)行通信,如TCP/IP、4.3BSD、NFS、UDP、SNMP、FTP等。VxWorks可通過(guò)網(wǎng)絡(luò)允許任務(wù)存取文件到其它系統(tǒng)中,并對(duì)任務(wù)進(jìn)行遠(yuǎn)程調(diào)用。(6)虛擬內(nèi)存(可選單元VxVMI)VxVMI主要用于對(duì)指定內(nèi)存區(qū)的保護(hù),如內(nèi)存塊只讀等,加強(qiáng)了系統(tǒng)的健壯性。(7)共享內(nèi)存(可選單元VxMP)VxMP主要用于多處理器上運(yùn)行的任務(wù)之間的共享信號(hào)量、消息隊(duì)列、內(nèi)存塊的管理。(8)駐留目標(biāo)工具Tornado集成環(huán)境中,開發(fā)工具工作于主機(jī)側(cè)。駐留目標(biāo)外殼、模塊加載和卸載、符號(hào)表都可進(jìn)行配置。(9)Wind基類VxWorks系統(tǒng)提供對(duì)C+的支持,并構(gòu)造了系統(tǒng)基類函數(shù)。(10)工具庫(kù)VxWorks系統(tǒng)向用戶提供豐富的系統(tǒng)調(diào)用,包括中斷處理、定時(shí)器、消息注冊(cè)、內(nèi)存分配、字符串轉(zhuǎn)換、線性和環(huán)形緩沖區(qū)管理,以及標(biāo)準(zhǔn)ANSI-C程序庫(kù)。(11)性能優(yōu)化VxWorks系統(tǒng)通過(guò)運(yùn)行定時(shí)器來(lái)記錄任務(wù)對(duì)CPU的利用率,從而進(jìn)行有效地調(diào)整,合理安排任務(wù)的運(yùn)行,給定適宜的任務(wù)屬性。(12)目標(biāo)代理目標(biāo)代理可使用戶遠(yuǎn)程調(diào)試應(yīng)用程序。(13)板級(jí)支持包板級(jí)支持包提供硬件的初始化、中斷建立、定時(shí)器、內(nèi)存映象等。(14)VxWorks仿真器(VxSim)可選產(chǎn)品VxWorks仿真器,能模擬VxWorks目標(biāo)機(jī)的運(yùn)行,用于應(yīng)用系統(tǒng)的分析。VxWorks的特點(diǎn)如下: (1)可靠性。操作系統(tǒng)的用戶希望在一個(gè)工作穩(wěn)定,可以信賴的環(huán)境中工作,所以操作系統(tǒng)的可靠性是用戶首先要考慮的問(wèn)題。而穩(wěn)定、可靠一直是VxWorks的一個(gè)突出優(yōu)點(diǎn)。自從對(duì)中國(guó)的銷售解禁以來(lái),VxWorks以其良好的可靠性在中國(guó)贏得了越來(lái)越多的用戶。 (2)實(shí)時(shí)性。實(shí)時(shí)性是指能夠在限定時(shí)間內(nèi)執(zhí)行完規(guī)定的功能并對(duì)外部的異步事件作出響應(yīng)的能力。實(shí)時(shí)性的強(qiáng)弱是以完成規(guī)定功能和作出響應(yīng)時(shí)間的長(zhǎng)短來(lái)衡量的。VxWorks 的實(shí)時(shí)性做得非常好,其系統(tǒng)本身的開銷很小,進(jìn)程調(diào)度、進(jìn)程間通信、中斷處理等系統(tǒng)公用程序精練而有效,它們?cè)斐傻难舆t很短。VxWorks 提供的多任務(wù)機(jī)制中對(duì)任務(wù)的控制采用了優(yōu)先級(jí)搶占(Preemptive Priority Scheduling)和輪轉(zhuǎn)調(diào)度(Round-Robin Scheduling)機(jī)制,也充分保證了可靠的實(shí)時(shí)性,使同樣的硬件配置能滿足更強(qiáng)的實(shí)時(shí)性要求,為應(yīng)用的開發(fā)留下更大的余地。(2)可裁減性。用戶在使用操作系統(tǒng)時(shí),并不是操作系統(tǒng)中的每一個(gè)部件都要用到。例如圖形顯示、文件系統(tǒng)以及一些設(shè)備驅(qū)動(dòng)在某些嵌入系統(tǒng)中往往并不使用。VxWorks 由一個(gè)體積很小的內(nèi)核及一些可以根據(jù)需要進(jìn)行定制的系統(tǒng)模塊組成。VxWorks 內(nèi)核最小為 8kB,即便加上其它必要模塊,所占用的空間也很小,且不失其實(shí)時(shí)、多任務(wù)的系統(tǒng)特征。由于它的高度靈活性,用戶可以很容易地對(duì)這一操作系統(tǒng)進(jìn)行定制或作適當(dāng)開發(fā),來(lái)滿足自己的實(shí)際應(yīng)用需要。2 VxWorks開發(fā)2.1 Tornado開發(fā)工具2.1.1 安裝過(guò)程安裝包Tornado解壓后的目錄結(jié)構(gòu)如下圖所示,CRACK如其名字所示,就是破解文件夾了,序列號(hào)和crack文件都在其中。1、進(jìn)入Tornado目錄,安裝Tornado,提示輸入序列號(hào)什么的就到Crack文件夾中去找。2、如果安裝目錄為C:Tornado2.2,則在其目錄下新建文件夾flexlm,將安裝光盤下的CRACK目錄下的license.dat拷貝到c:Tornado2.2flexlm。3、安裝完畢后,如果從開始菜單直接運(yùn)行tornado,會(huì)提示錯(cuò)誤,這是因?yàn)榘惭b還沒有完成,在C盤Tornado2.2文件夾下你會(huì)發(fā)現(xiàn)一個(gè)setup.log文件,用ultraedit或vim打開,在最后一行你會(huì)發(fā)現(xiàn)一個(gè)注冊(cè)表鍵值,進(jìn)入注冊(cè)表,找到這個(gè)鍵值HKEY_LOCAL_MACHINESOFTWAREFLEXlm License ManagerLM_LICENSE_FILE,將其值修改為:c:Tornado2.2flexlmlicense.dat另外一種破解方法是在windows里面設(shè)置一個(gè)環(huán)境變量LM_LICENSE_FILE = c:Tornado2.2flexlmlicense.dat到此為止,Tornado就能在XP系統(tǒng)上跑起來(lái)了。Tornado的文件樹:2.1.2 內(nèi)部組件WindRiver公司提供的軟件產(chǎn)品分為兩部分:開發(fā)環(huán)境Tornado和實(shí)時(shí)操作系統(tǒng)VxWorks。Tornado的啟動(dòng)界面見圖5-1。運(yùn)行Tornado的一方稱為宿主機(jī),而運(yùn)行VxWorks的一方稱為目標(biāo)機(jī),二者根據(jù)實(shí)際應(yīng)用可以采用網(wǎng)絡(luò)或串行線連接,滿足WDB協(xié)議(見圖5-2)。在圖4-4所示的WTX和WDB兩個(gè)協(xié)議最為重要,負(fù)責(zé)主機(jī)各個(gè)工具和目標(biāo)機(jī)的通信。其中WTX(Windriver Tools eXchange)負(fù)責(zé)主機(jī)開發(fā)工具和Target Server之間的通信。而WDB(Wind DeBug)負(fù)責(zé)主機(jī)的Target Server和目標(biāo)機(jī)的WDB Agent(Target Agent)之間的通信。WDB Agent實(shí)現(xiàn)Target Server的請(qǐng)求,并且返回結(jié)果。請(qǐng)求包括:內(nèi)存操作、斷點(diǎn)設(shè)置、虛擬I/O支持和任務(wù)控制等。Target Server在主機(jī)上運(yùn)行。一個(gè)Target Server代表一個(gè)目標(biāo)機(jī),所有的主機(jī)工具都通過(guò)它來(lái)訪問(wèn)目標(biāo)機(jī)。圖5-1 Tornado啟動(dòng)界面圖5-2 主機(jī)與目標(biāo)機(jī)的連接Tornado 2.2主要組成部分有:1 集成的源代碼編輯器(可惜不支持漢字輸入)。2 工程管理工具。3 集成的C和C編譯器和make工具。4 瀏覽器,用于收集可視化的資源,監(jiān)視目標(biāo)系統(tǒng)。5 CrossWind,圖形化的增強(qiáng)型調(diào)試器。6 WindSh,C語(yǔ)言命令外殼,用于控制目標(biāo)機(jī)。7 VxSim,集成的vxworks目標(biāo)機(jī)仿真器。8 WindView,集成的軟件邏輯分析儀。9 可配置的各種選項(xiàng),可以改變歸Tornado GUI的外觀等。2.1.3 使用說(shuō)明Tornado 2.2 IDE運(yùn)行在我們的宿主機(jī)(Host)上。主界面如下圖所示。包括菜單、工具欄、主工作區(qū)和程序編輯區(qū)。主工作區(qū)(Workspace)中可以集中管理所有的工程項(xiàng)目。工程有兩種格式:bootable和downloadable。第一種經(jīng)編譯后生成的映象文件已經(jīng)包括了vxworks內(nèi)核,可直接在目標(biāo)板上完成自啟動(dòng)、裝入內(nèi)核并運(yùn)行應(yīng)用程序。所以一般作為生產(chǎn)用映象。第二種則只是純粹的動(dòng)用程序,生成的映象文件不包括vxworks內(nèi)核,一般為.out格式文件,所以不能在目標(biāo)板上自動(dòng)運(yùn)行。它要求目標(biāo)板上要有固化的bootrom通過(guò)網(wǎng)絡(luò)或串口下載vxworks內(nèi)核到目標(biāo)板,并建立相關(guān)的運(yùn)行環(huán)境。然后通過(guò)宿主機(jī)上的target Server下載到目標(biāo)機(jī)上運(yùn)行。所以它一般用在工程調(diào)試階段。下面以arm為例分別就兩種格式作一個(gè)詳細(xì)的論述。(1)創(chuàng)建bootable格式的工程。啟動(dòng)tornado后進(jìn)入”file-new project”出現(xiàn)如下的界面:選擇“Creat a bootable VxWorks image”后點(diǎn)擊OK,并按要求輸入工程名稱和位置。出現(xiàn)如下界面:此時(shí)要選擇你工程所基于的BSP目錄。然后系統(tǒng)自動(dòng)為你在工作區(qū)生成一個(gè)你指定名稱(Project0)的工程。如下所示:工程下的文件為系統(tǒng)文件,大部分為bsp文件,一般不需要去修改。如何添加自己的應(yīng)用文件到該工程中呢?將鼠標(biāo)“Project0”上,點(diǎn)擊右鍵。出現(xiàn)如下的界面:左鍵點(diǎn)擊“add Files”選擇文件的所在目錄,就可以添加你的文件了。只添加不和系統(tǒng)提供的文件“連”起來(lái)是沒有用的,在usrAppInit.c中加入一條任務(wù)生成的語(yǔ)句,如下圖所示:其中“myDemoTask”為你應(yīng)用程序中的第一個(gè)入口程序。當(dāng)然在usrAppInit()之前應(yīng)加上必要的include頭文件,才能在后面的編譯中通過(guò)。接下來(lái)就應(yīng)該編譯了,選擇“Build”或“Rebuild All”后,系統(tǒng)就開始為你生成包含vxworks內(nèi)核的映象文件vxworks_rom.hex了。如下圖所示。(2)創(chuàng)建downloadable工程格式。新建時(shí)選擇“Create downloadable application modules”然后按提示輸入工程名和位置。“下一步”后出現(xiàn)如下圖所示界面,在toolChain中選擇“ARM7TDMI.gnu”編譯工具。完成后你會(huì)發(fā)現(xiàn)工程(project1)下什么程序也沒有。按上面的方法照樣添加你的應(yīng)用程序,并進(jìn)行編譯,生成project1.out文件。就可以調(diào)試了。調(diào)試之前必須保證你的目標(biāo)機(jī)已經(jīng)上電并通過(guò)網(wǎng)絡(luò)或串口與宿主機(jī)相連。下載.out文件之前還要先配置你的target server。按下圖所示進(jìn)行操作:配置如目標(biāo)機(jī)的IP,和映象文件所在的目錄就基本上OK了。結(jié)果如下圖所示。以網(wǎng)絡(luò)下載vxworks映象為例:?jiǎn)?dòng)tornado自帶的tftpServer,打開超級(jí)終端,設(shè)置好波特率。目標(biāo)機(jī)復(fù)位,很快超級(jí)終端就有一些信息打出來(lái),當(dāng)出現(xiàn)如下的提示時(shí)表示vxworks內(nèi)核已經(jīng)在目標(biāo)機(jī)上成功運(yùn)行下來(lái)了。在Tornado II的tools菜單中啟動(dòng)剛才配置好的targetSever.成功后就會(huì)有一個(gè)靶狀的紅色小東西出現(xiàn)的window任務(wù)欄右下角。雙擊它,出現(xiàn)如下的提示則表示成功和目標(biāo)機(jī)連接。點(diǎn)擊 選擇代理名,啟動(dòng)debug,點(diǎn)擊下載.out文件到目標(biāo)機(jī)。點(diǎn)擊并輸入任務(wù)名,就可以開始應(yīng)用程序的調(diào)試了,調(diào)試界面如下圖所示:可以在代碼行設(shè)置斷點(diǎn)。調(diào)試好的程序就可以按bootable的生成方式作成最終生產(chǎn)用映象,燒入目標(biāo)機(jī)就可以了,當(dāng)然還應(yīng)該觀察程序是否正常運(yùn)行,輸出結(jié)果是否符合要求。2.2 VxWorks開發(fā)策略2.2.1 交叉調(diào)試開發(fā)Tornado開發(fā)使用主機(jī)-目標(biāo)機(jī)交叉開發(fā)模型:應(yīng)用程序在主機(jī)的Windows環(huán)境下編譯鏈接生成可執(zhí)行文件,下載到目標(biāo)機(jī),通過(guò)主機(jī)上的目標(biāo)服務(wù)器與目標(biāo)機(jī)上的目標(biāo)代理程序的通信,完成對(duì)應(yīng)用程序的調(diào)測(cè)與分析。主機(jī)、目標(biāo)機(jī)與之間的連接情況,可參照下圖。主機(jī)的開發(fā)環(huán)境可以是Windows、HP等操作系統(tǒng),目標(biāo)機(jī)的硬件環(huán)境可以是Power PC、ARM、普通PC機(jī)等。主機(jī)與目標(biāo)機(jī)之間的連接可以采用交叉網(wǎng)線或者串口。大多開發(fā)采用網(wǎng)線,連接方便,開發(fā)簡(jiǎn)單。2.2.2 板級(jí)支持包BSPTornado目錄下config/bspname包含板級(jí)支持包BSP,它由運(yùn)行VxWorks的某些硬件驅(qū)動(dòng)文件組成,如有串行線的VME板、時(shí)鐘和其它設(shè)備。文件包括:Makefile, sysLib.c, sysSerial.c, sysALib.s, romInit.s, bspname.h 和 config.h.文件sysLib.c以硬件獨(dú)立方式提供VxWorks和應(yīng)用程序間的板級(jí)聯(lián)系,主要包括:初始化函數(shù)- 初始化硬件到一已知狀態(tài)- 標(biāo)識(shí)系統(tǒng)- 初始化設(shè)備,如SCSI或常規(guī)設(shè)備內(nèi)存/地址空間函數(shù)- 得到板上內(nèi)存大小- 總線地址空間- 設(shè)定/獲得非易失性RAM- 定義板的內(nèi)存位圖(可選)- 為有MMU的處理器定義虛擬內(nèi)存到物理內(nèi)存的映射總線中斷函數(shù)- 打開/關(guān)閉總線中斷- 產(chǎn)生總線中斷時(shí)鐘/定時(shí)器函數(shù)- 使能/不能定時(shí)中斷- 設(shè)置定時(shí)器的周期性郵箱/位置監(jiān)視函數(shù)(可選) - 使郵箱/位置監(jiān)視中斷能在目錄config/all 的配置文件usrConfig.c和bootConfig.c負(fù)責(zé)啟動(dòng)庫(kù)函數(shù)。設(shè)備驅(qū)動(dòng)可調(diào)用內(nèi)存和總線管理函數(shù)。板級(jí)支持包BSP負(fù)責(zé)目標(biāo)板硬件的初始化,實(shí)時(shí)內(nèi)核的載入等。對(duì)于硬件初始化的順序,大致可按下表中形式進(jìn)行:函 數(shù)函 數(shù) 功 能所 在 文 件sysInit()(a)鎖住中斷;(b)禁用緩沖;(c)用缺省值初始化系統(tǒng)中斷表(僅i960);(d)用缺省值初始化系統(tǒng)錯(cuò)誤表(僅i960);(e)初始化處理器寄存器到一缺省值;(f)使回溯失效;(g)清除所有懸置中斷;(h)激活usrInit(),指明啟動(dòng)類型。sysALib.sUsrInit()(a)對(duì)bss賦零;(b)保存bootType于sysStartType;(c)調(diào)用excVecInit(),初始化所有系統(tǒng)和缺省中斷量;(d)依次調(diào)用sysHwInit(),usrKernelInit(),kernelInit().usrConfig.cusrKernelInit()依次調(diào)用classLibInit(),taskLibInit(),taskHookInit(),semBLibInit(),semMLibInit(),semCLibInit(),semOLibInit(),wdLibInit(),msgQLibInit(),qInit(),workQInit()usrKernel.ckernelInit()初始化并啟動(dòng)內(nèi)核。(a)激活intLockLevelSet();(b)從內(nèi)存池頂部創(chuàng)建根堆棧和TCB;(c)調(diào)用taskInit(),taskActivate(),用于usrRoot();(d)調(diào)用usrRoot().kernelLib.cUsrRoot()初始化I/O系統(tǒng),驅(qū)動(dòng)器,設(shè)備(在configAll.h和config.h中指定)(a)調(diào)用sysClkConnect(),sysClkRateSet(),iosInit(),ttyDrv();(b)初始化excInit(),logInit(),sigInit().(c)初始化管道,pipeDrv();(d)stdioInit(),mathSoftInit()或mathHardInit()(e)wdbConfig():配置并初始化目標(biāo)代理機(jī)usrConfig.c 在大多數(shù)目標(biāo)板的板級(jí)支持包中,VxWorks的入口點(diǎn)由兩個(gè)函數(shù):romInit()和romStart()來(lái)完成,而非sysInit()。具體基于ROM的VxWorks的初始化過(guò)程如下表所示:函數(shù)函數(shù)功能所在文件1.romInit()2.romStart()3.usrInit()4.usrKernelInit()5.kernelInit()6.usrRoot()7.Application routine(a)禁止中斷;(b)保存啟動(dòng)類型;(c)硬件初始化;(d)調(diào)用romStart();(a)將數(shù)據(jù)段從ROM拷貝到RAM,清內(nèi)存;(b)將代碼段從ROM拷貝到RAM,有必要的話解壓縮;(c)調(diào)用usrInit();初始化程序如果相應(yīng)的配置文件被定義,對(duì)應(yīng)函數(shù)被調(diào)用初始化并啟動(dòng)內(nèi)核初始化I/O系統(tǒng),驅(qū)動(dòng)器,創(chuàng)建設(shè)備應(yīng)用程序代碼romInit.sbootInit.cusrConfig.cusrKernel.ckernelLib.cusrConfig.cApplication source file2.2.3 任務(wù)調(diào)度目標(biāo)板加電啟動(dòng)成功后,有如下幾個(gè)任務(wù)已開始運(yùn)行。他們就是VxWorks的系統(tǒng)任務(wù)。(1)根任務(wù):tUsrRoot內(nèi)核首先執(zhí)行根任務(wù)tUsrRoot,其入口點(diǎn)為文件config/all/usrConfig.c中的usrRoot()函數(shù),它負(fù)責(zé)初始化VxWorks工具,并創(chuàng)建注冊(cè)、異常處理、網(wǎng)絡(luò)通信任務(wù)和tRlogind等任務(wù)。一般來(lái)說(shuō),在所有的初始化工作完成后,根任務(wù)tUsrRoot被刪除。(2)注冊(cè)任務(wù):tLogTask注冊(cè)任務(wù)tLogTask被VxWorks模塊用于傳送不需I/O操作的系統(tǒng)消息。(3)異常處理任務(wù):tExcTask異常處理任務(wù)tExcTask有最高優(yōu)先級(jí),它負(fù)責(zé)系統(tǒng)的異常情況出錯(cuò)處理,不能被懸置、刪除或是改變其優(yōu)先級(jí)。(4)網(wǎng)絡(luò)通信任務(wù):tNetTask網(wǎng)絡(luò)通信任務(wù)tNetTask負(fù)責(zé)系統(tǒng)級(jí)任務(wù)的網(wǎng)絡(luò)通信。(5)目標(biāo)代理任務(wù):tWdbTask如果目標(biāo)代理程序運(yùn)行在任務(wù)模式,目標(biāo)代理任務(wù)tWdbTask被創(chuàng)建,用來(lái)響應(yīng)主機(jī)目標(biāo)服務(wù)器的請(qǐng)求。實(shí)時(shí)系統(tǒng)的一個(gè)任務(wù)可有多種狀態(tài),其中最基本的狀態(tài)有四種:就緒態(tài):任務(wù)只等待系統(tǒng)分配CPU資源;懸置態(tài):任務(wù)需等待某些不可利用的資源而被阻塞;休眠態(tài):如果系統(tǒng)不需要某一個(gè)任務(wù)工作,這個(gè)任務(wù)處于休眠狀態(tài);延遲態(tài):任務(wù)被延遲時(shí)所處狀態(tài);當(dāng)系統(tǒng)函數(shù)對(duì)某一任務(wù)進(jìn)行操作時(shí),任務(wù)從一種狀態(tài)遷移到另一狀態(tài)。處于任一狀態(tài)的任務(wù)都可被刪除。VxWorks內(nèi)核的任務(wù)管理提供了動(dòng)態(tài)創(chuàng)建、刪除和控制任務(wù)的功能,具體實(shí)現(xiàn)通過(guò)如下一些系統(tǒng)調(diào)用:taskSpawn()創(chuàng)建(產(chǎn)生并激活)新任務(wù)taskInit()初始化一個(gè)新任務(wù)taskActivate()激活一個(gè)已初始化的任務(wù)taskName()由任務(wù)ID號(hào)得到任務(wù)名taskNameToId()由任務(wù)名得到任務(wù)ID號(hào)taskPriorityGet()獲得任務(wù)的優(yōu)先級(jí)taskIsSuspended()檢查任務(wù)是否被懸置taskIsReady()檢查任務(wù)是否準(zhǔn)備運(yùn)行taskTcb()得到一個(gè)任務(wù)控制塊的指針taskDelete()中止指定任務(wù)并自由內(nèi)存(僅任務(wù)堆棧和控制塊)taskSafe()保護(hù)被調(diào)用任務(wù)taskSuspend()懸置一個(gè)任務(wù)taskResume()恢復(fù)一個(gè)任務(wù)taskRestart()重啟一個(gè)任務(wù)taskDelay()延遲一個(gè)任務(wù) 狀態(tài)遷移 調(diào)用就緒態(tài) - 懸置態(tài)semTake()/msgQReceive()就緒態(tài) - 延遲態(tài)taskDelay()就緒態(tài) - 休眠態(tài)taskSuspend()懸置態(tài) - 就緒態(tài)semGive()/msgQSend()懸置態(tài) - 休眠態(tài)taskSuspend()延遲態(tài) - 就緒態(tài)expired delay延遲態(tài) - 休眠態(tài)taskSuspend()休眠態(tài) - 就緒態(tài)taskResume()/taskActivate()休眠態(tài) - 懸置態(tài)taskResume()休眠態(tài) - 延遲態(tài)taskResume()多任務(wù)調(diào)度須采用一種調(diào)度算法來(lái)分配CPU給就緒態(tài)任務(wù)。Wind內(nèi)核采用基于優(yōu)先級(jí)的搶占式調(diào)度法作為它的缺省策略,同時(shí)它也提供了輪轉(zhuǎn)調(diào)度法?;趦?yōu)先級(jí)的搶占式調(diào)度,它具有很多優(yōu)點(diǎn)。這種調(diào)度方法為每個(gè)任務(wù)指定不同的優(yōu)先級(jí)。沒有處于懸置或休眠態(tài)的最高優(yōu)先級(jí)任務(wù)將一直運(yùn)行下去。當(dāng)更高優(yōu)先級(jí)的任務(wù)由就緒態(tài)進(jìn)入運(yùn)行時(shí),系統(tǒng)內(nèi)核立即保存當(dāng)前任務(wù)的上下文,切換到更高優(yōu)先級(jí)的任務(wù)。Wind內(nèi)核劃分優(yōu)先級(jí)為256 級(jí)(0255)。優(yōu)先級(jí)0為最高優(yōu)先級(jí),優(yōu)先級(jí)255為最低。當(dāng)任務(wù)被創(chuàng)建時(shí),系統(tǒng)根據(jù)給定值分配任務(wù)優(yōu)先級(jí)。然而,優(yōu)先級(jí)也可以是動(dòng)態(tài)的,它們能在系統(tǒng)運(yùn)行時(shí)被用戶使用系統(tǒng)調(diào)用taskPrioritySet()來(lái)加以改變,但不能在運(yùn)行時(shí)被操作系統(tǒng)所改變。輪轉(zhuǎn)調(diào)度法分配給處于就緒態(tài)的每個(gè)同優(yōu)先級(jí)的任務(wù)一個(gè)相同的執(zhí)行時(shí)間片。時(shí)間片的長(zhǎng)度可由系統(tǒng)調(diào)用KernelTimeSlice()通過(guò)輸入?yún)?shù)值來(lái)指定。很明顯,每個(gè)任務(wù)都有一運(yùn)行時(shí)間計(jì)數(shù)器,任務(wù)運(yùn)行時(shí)每一時(shí)間滴答加1。一個(gè)任務(wù)用完時(shí)間片之后,就進(jìn)行任務(wù)切換,停止執(zhí)行當(dāng)前運(yùn)行的任務(wù),將它放入隊(duì)列尾部,對(duì)運(yùn)行時(shí)間計(jì)數(shù)器置零,并開始執(zhí)行就緒隊(duì)列中的下一個(gè)任務(wù)。當(dāng)運(yùn)行任務(wù)被更高優(yōu)先級(jí)的任務(wù)搶占時(shí),此任務(wù)的運(yùn)行時(shí)間計(jì)數(shù)器被保存,直到該任務(wù)下次運(yùn)行時(shí)。2.2.4 信號(hào)量信號(hào)量VxWorks信號(hào)量是提供任務(wù)間通信、同步和互斥的最優(yōu)選擇,提供任務(wù)間最快速的通信。也是提供任務(wù)間同步和互斥的主要手段。VxWorks提供3種信號(hào)量來(lái)解決不同的問(wèn)題。二進(jìn)制最快的最常用的信號(hào)量,可用于同步或互斥。互斥為了解決內(nèi)在的互斥問(wèn)題、優(yōu)先級(jí)繼承、刪除安全和遞歸等情況而最優(yōu)化的特殊的二進(jìn)制信號(hào)量。計(jì)數(shù)器類似于二進(jìn)制信號(hào)量,但是隨信號(hào)量釋放的次數(shù)改變而改變。(1)二進(jìn)制信號(hào)量二進(jìn)制信號(hào)量能夠滿足任務(wù)間的互斥和同步,需要的系統(tǒng)開銷最小。二進(jìn)制信號(hào)量可以看成一個(gè)標(biāo)志,對(duì)應(yīng)資源是可用還是不可用。當(dāng)一個(gè)任務(wù)調(diào)用semTake ()請(qǐng)求一個(gè)信號(hào)量時(shí),如果此時(shí)信號(hào)量可用,信號(hào)量會(huì)被清零,并且任務(wù)立即繼續(xù)執(zhí)行;如果信號(hào)量不可用,任務(wù)會(huì)被阻塞來(lái)等待信號(hào)量。當(dāng)一個(gè)任務(wù)調(diào)用semGive ()釋放一個(gè)二進(jìn)制信號(hào)量時(shí)。如果信號(hào)量已經(jīng)可用,釋放信號(hào)量不會(huì)產(chǎn)生任何影響;如果信號(hào)量不可用并且沒有任務(wù)等待使用該信號(hào)量,信號(hào)量只是被簡(jiǎn)單地置為可用;如果信號(hào)量不可用并且有一個(gè)或多個(gè)任務(wù)等待該信號(hào)量,最高優(yōu)先級(jí)的任務(wù)被解阻塞,信號(hào)量仍為不可用。當(dāng)兩個(gè)以上的任務(wù)共享使用同一塊內(nèi)存緩沖區(qū)或同一個(gè)I/O設(shè)備之類的資源時(shí),可能會(huì)發(fā)生競(jìng)爭(zhēng)狀態(tài)。二進(jìn)制信號(hào)量可以通過(guò)對(duì)共享資源上鎖,實(shí)現(xiàn)高效的互斥訪問(wèn),不象禁止中斷或禁止搶占,二進(jìn)制信號(hào)量將互斥僅僅限于對(duì)與之聯(lián)系的資源的訪問(wèn),并且比禁止中斷和禁止搶占提供更精確的互斥粒度。使用時(shí)創(chuàng)建用于保護(hù)資源的二進(jìn)制信號(hào)量,初始時(shí)信號(hào)量可用。當(dāng)任務(wù)需要訪問(wèn)這個(gè)資源時(shí),首先取得這個(gè)信號(hào)量,所有其它想要訪問(wèn)這個(gè)資源的任務(wù)將被阻塞。當(dāng)任務(wù)完成了對(duì)該資源的訪問(wèn)時(shí),釋放該信號(hào)量,允許其他任務(wù)使用該資源。因此所有對(duì)一個(gè)需要互斥訪問(wèn)資源的操作由semTake ()和semGive ()對(duì)一起來(lái)實(shí)現(xiàn):semTake(semMutex,WAIT FOREVER)/*臨界區(qū),某一時(shí)刻僅被一個(gè)任務(wù)訪問(wèn)*/semGive (semMutex)信號(hào)量另一種通常的用法是用于任務(wù)間的同步機(jī)制。在這種情況下,信號(hào)量代表一個(gè)任務(wù)所等待的條件或事件。最初,信號(hào)量是不可用的。一個(gè)任務(wù)或中斷處理程序釋放該信號(hào)量來(lái)通知這個(gè)事件的發(fā)生。等待該信號(hào)量的任務(wù)將被阻塞直到事件發(fā)生、該信號(hào)量可用。一旦被解阻塞,任務(wù)就執(zhí)行恰當(dāng)?shù)氖录幚沓绦?。信?hào)量在任務(wù)同步中的應(yīng)用對(duì)于將中斷服務(wù)程序從冗長(zhǎng)的事件處理中解放出來(lái)以縮短中斷響應(yīng)時(shí)間是很有用的。(2)互斥信號(hào)量互斥信號(hào)量是一種特殊的二進(jìn)制信號(hào)量,用于解決具有內(nèi)在的互斥問(wèn)題:優(yōu)先級(jí)繼承、刪除安全和對(duì)資源的遞歸訪問(wèn)等情況。互斥信號(hào)量與二進(jìn)制不同點(diǎn)在于:它僅用于互斥;僅能由取(semTake ()它的任務(wù)釋放;不能在ISR 中釋放(semGive ()。優(yōu)先級(jí)繼承問(wèn)題。優(yōu)先級(jí)倒置發(fā)生在一個(gè)高優(yōu)先級(jí)的任務(wù)被迫等待一段不確定時(shí)間,等待一個(gè)低優(yōu)先級(jí)任務(wù)完成。VxWorks允許使用優(yōu)先級(jí)繼承算法,在互斥信號(hào)量中使用選項(xiàng) SEM-INVERSION-SAFE ,將使能優(yōu)先級(jí)繼承算法,優(yōu)先級(jí)繼承協(xié)議確保擁有資源的任務(wù)以阻塞在該資源上的所有任務(wù)中優(yōu)先級(jí)最高的任務(wù)的優(yōu)先級(jí)執(zhí)行,直到它釋放所擁有的所有信號(hào)量,然后該任務(wù)返回到正常狀態(tài)。因此這個(gè)“繼承的高優(yōu)先級(jí)”任務(wù)受到不會(huì)被任何中間優(yōu)先級(jí)任務(wù)搶占的保護(hù)。刪除安全問(wèn)題。另一個(gè)互斥問(wèn)題涉及到任務(wù)刪除。在一個(gè)受信號(hào)量保護(hù)的臨界區(qū),經(jīng)常需要保護(hù)在臨界區(qū)執(zhí)行的任務(wù)不會(huì)被意外地刪除。刪除一個(gè)在臨界區(qū)執(zhí)行的任務(wù)可能引起意想不到的后果,造成保護(hù)資源的信號(hào)量不可用,可能導(dǎo)致資源處于破壞狀態(tài),也就導(dǎo)致了其他要訪問(wèn)該資源的所有任務(wù)無(wú)法得到滿足。原語(yǔ) taskSafe()和taskUnsafe ()提供了防止任務(wù)被意外刪除的一種方法。同時(shí)互斥信號(hào)量提供了選項(xiàng)SEM-DELETE-SAFE ,使用這個(gè)選項(xiàng),每次調(diào)用semTake ( )時(shí)隱含地使能了taskSafe(),當(dāng)每次調(diào)用semGive ()時(shí)隱含地使能了taskUnsafe ()這種方式,任務(wù)得到信號(hào)量時(shí)得到不會(huì)被刪除的保護(hù)。遞歸資源訪問(wèn)問(wèn)題?;コ庑盘?hào)量能夠被遞歸地獲得。這意味著信號(hào)量能夠被一個(gè)擁有該信號(hào)量的任務(wù)在該信號(hào)量最終被釋放之前多次獲取。遞歸對(duì)于滿足一些子程序即要求能夠相互調(diào)用但是也要求互斥訪問(wèn)一個(gè)資源非常有用。這種情形是可能的,因?yàn)橄到y(tǒng)需要跟蹤哪一個(gè)任務(wù)當(dāng)前擁有信號(hào)量。(3)計(jì)數(shù)器信號(hào)量計(jì)數(shù)器信號(hào)量是實(shí)現(xiàn)任務(wù)同步和互斥的另一種手段。計(jì)數(shù)器信號(hào)量除了像二進(jìn)制信號(hào)量那樣工作外,還保持對(duì)信號(hào)量釋放次數(shù)的跟蹤。信號(hào)量每次釋放,計(jì)數(shù)器加一,每次獲取,計(jì)數(shù)器減一。當(dāng)信號(hào)量減到0 時(shí),試圖獲取該信號(hào)量的任務(wù)被阻塞。正如二進(jìn)制信號(hào)量,當(dāng)信號(hào)量釋放時(shí),如果有任務(wù)阻塞在該信號(hào)量阻塞隊(duì)列上,那么任務(wù)解除阻塞;但是如果信號(hào)量釋放時(shí),沒有任務(wù)阻塞在該信號(hào)量阻塞隊(duì)列上,那么計(jì)數(shù)器加一。VxWorks的信號(hào)燈操作庫(kù)有semLib、semBLib、semCLib、semMLib,分別對(duì)應(yīng)通用信號(hào)燈與二進(jìn)制、計(jì)數(shù)型和互斥信號(hào)燈的操作。庫(kù)中信號(hào)燈相關(guān)的函數(shù)有:semBCreate()創(chuàng)建一個(gè)二進(jìn)制信號(hào)燈semCCreate()創(chuàng)建一個(gè)計(jì)數(shù)型信號(hào)燈semMCreate()創(chuàng)建一個(gè)互斥型信號(hào)燈semGive()釋放信號(hào)燈semTake()獲取信號(hào)燈semFlush()使所有被該信號(hào)燈阻塞的任務(wù)脫離阻塞狀態(tài)信號(hào)量在實(shí)現(xiàn)多任務(wù)間的通信、同步和互斥中發(fā)揮著重要的作用。因此,深入理解和正確使用VxWorks的信號(hào)量,可以提高實(shí)時(shí)系統(tǒng)中多任務(wù)間通信的效率。2.3 VMWare上安裝VxWorks2.3.1 概述VxWorks是風(fēng)河公司(Windriver)開發(fā)的實(shí)時(shí)操作系統(tǒng)之一,以其優(yōu)秀的可靠性、實(shí)時(shí)性及內(nèi)核的可裁減性,被廣泛應(yīng)用于通信、軍事、航天、航空等關(guān)鍵行業(yè)領(lǐng)域。VxWorks可以適用于多種硬件體系結(jié)構(gòu),其中也包括大家日常都可以接觸到的PC體系結(jié)構(gòu)。VMWare 是被廣泛應(yīng)用虛擬PC系統(tǒng)軟件,他可以提供基于Inetl CPU的虛擬PC系統(tǒng)環(huán)境,包括CPU、BIOS、硬盤和其他外圍硬件設(shè)備,使您可以在一臺(tái)PC機(jī)上同時(shí)運(yùn)行兩個(gè)操作系統(tǒng)。VMWare對(duì)外圍硬件設(shè)備的模擬,屏蔽了不同設(shè)備型號(hào)的差異,在硬件環(huán)境發(fā)生改變時(shí)(硬件型號(hào)變化),對(duì)于運(yùn)行于VMWare上的操作系統(tǒng)影響很?。o(wú)須安裝新的驅(qū)動(dòng)程序)。本文以下部分將介紹如何在VMWare軟件提供的虛擬環(huán)境上安裝VxWorks操作系統(tǒng)。由于可以在同一臺(tái)PC機(jī)上建立完整VxWorks開發(fā)環(huán)境,所以可以有效地降低項(xiàng)目初期的開發(fā)成本,也可以為初學(xué)者提供一個(gè)接近于真實(shí)的模擬環(huán)境。需要注意的是,由于VMWare本身是運(yùn)行在Windows操作系統(tǒng)之上的,而VxWorks運(yùn)行于VMWare之上,所以這個(gè)模擬環(huán)境無(wú)法保證VxWorks的實(shí)時(shí)特性。因此,Vmware上的嵌入式VxWorks操作只是單機(jī)演示作用,可以快速方便的得到一些實(shí)驗(yàn)性結(jié)果,并不能徹底實(shí)現(xiàn)其他諸如實(shí)時(shí)性測(cè)試等方面的目標(biāo)。2.3.2 準(zhǔn)備工作我們假設(shè)您有一臺(tái)普通配置的PC機(jī),并安裝了Windows2000操作系統(tǒng)。其次您需要安裝Tornado 2.2 for pcPentium開發(fā)環(huán)境。缺省安裝的Tornado 2.2 for pcPentium可能不包括pcPentium的BSP組件,但該組件可以從風(fēng)河公司(Windriver)的網(wǎng)站免費(fèi)下載。我們將在下文以WIND_BASE引用Tornado的安裝路徑。其次是要安裝VMWare軟件,這里我們使用4.0的版本。如果您還沒有該軟件,也可以從VMWare的網(wǎng)站下載試用版。最后,由于Tornado自帶的PC-NET網(wǎng)卡驅(qū)動(dòng)有問(wèn)題,所以需要下載AMD的PCNET網(wǎng)卡的VxWorks系統(tǒng)驅(qū)動(dòng),可以從AMD網(wǎng)站免費(fèi)下載。一張1.44M的軟盤,用于制作系統(tǒng)引導(dǎo)盤。準(zhǔn)備并安裝好以上軟件后,就可以開始下一步的工作了。2.3.3 開始安裝(1)編譯網(wǎng)卡驅(qū)動(dòng)程序VMWare為運(yùn)行于其上的操作系統(tǒng)提供虛擬網(wǎng)卡支持,該網(wǎng)卡類型即為AMD的PC-NET。實(shí)際上,在Tornado開發(fā)包中已經(jīng)包含了該類型網(wǎng)卡的驅(qū)動(dòng)程序,但經(jīng)過(guò)測(cè)試,對(duì)于VMWare無(wú)法正常工作,所以您需要從AMD的網(wǎng)站下載最新的驅(qū)動(dòng)程序。下載得到的是一個(gè)可執(zhí)行的安裝程序,運(yùn)行該程序?qū)⒌玫揭粋€(gè)壓縮包和一個(gè)幫助文件,按照該幫助的要求,將壓縮包直接釋放到Tornado目錄下。如果提示是否允許覆蓋文件,則選擇允許。此后按如下步驟完成驅(qū)動(dòng)程序的編譯和替換: 打開一個(gè)控制臺(tái)窗口,運(yùn)行批處理程序:$(WIND_BASE)hostx86-win32bin torVars.bat; 重新定位到$(WIND_BASE)targetsrcdrvend目錄,運(yùn)行: make CPU=PENTIUM tool=gnu ln97xend.o其間會(huì)產(chǎn)生一些警告,但這不會(huì)影響我們的工作。 重新定位到$(WIND_BASE)targetlibpentiumPENTIUMcommon目錄,并將上一步生成的文件ln97xend.o復(fù)制到此目錄下。備份此目錄下的文件libdrv.a; 運(yùn)行命令arpentium -d libdrv.a ln97xEnd.o,刪除libdrv.a中原有的ln97xEnd模塊,然后再運(yùn)行命令: arpentium -ra iOlicomEnd.o libdrv.a ln97xEnd.o將我們剛剛創(chuàng)建的新模塊添加進(jìn)去。到此有關(guān)網(wǎng)卡驅(qū)動(dòng)的設(shè)置就完成了。注意不要關(guān)閉這個(gè)窗口,后面還要使用。(2)修改配置文件在這一節(jié)中,我們要修改編譯VxWorks的配置頭文件Config.h中定義的一些參數(shù),使編譯出來(lái)的系統(tǒng)引導(dǎo)程序和VxWorks的映象符合我們的要求;同時(shí)還要修改sysLn97xEnd.c這個(gè)文件,以使系統(tǒng)的網(wǎng)絡(luò)功能正常運(yùn)行。 定位目錄到$(WIND_BASE)targetconfigpcPentium并打開該目錄下Config.h文件; 我們首先要修改VxWorks的啟動(dòng)參數(shù)。先查找到定義DEFAULT_BOOT_LINE宏的地方,修改預(yù)處理?xiàng)l件CPU = PENTIUM分支下的定義如下: #define DEFAULT_BOOT_LINE lnPci(0,0)your_host_name:d:vxWorks h=69 e=54 u=target pw=vxworks tn=target其中: lnPci(0,0)指定了使用第0個(gè)網(wǎng)卡和第0個(gè)處理器,lnPci這個(gè)標(biāo)識(shí)會(huì)因?yàn)槭褂玫尿?qū)動(dòng)程序不同而有所不同,但這里用lnPci就可以了; your_host_name指定您的主機(jī)的名字,使用Windows系統(tǒng)的主機(jī)名就可以; d:vxWorks指定了VxWorks映象下載的完整路徑; h=69是主機(jī)的IP地址,就是您當(dāng)前正在使用的系統(tǒng)的IP地址; e=54是目標(biāo)機(jī)的IP地址,也就是未來(lái)VxWorks操作系統(tǒng)的IP地址,您只要任意指定一個(gè)不沖突的IP地址即可,這里我們假設(shè)您的目標(biāo)機(jī)IP地址和主機(jī)IP地址在同一個(gè)網(wǎng)段內(nèi); u=target指定了FTP服務(wù)器的用戶名,這個(gè)FTP就是用來(lái)下載VxWorks映象的,后面還會(huì)提到; pw=vxwroks是用戶名對(duì)應(yīng)的口令; tn=target指定目標(biāo)機(jī)的名字,任意指定即可; 您可以參考Tornado自帶的手冊(cè)以獲取更多信息; 下面我們要指定使用什么樣的網(wǎng)卡驅(qū)動(dòng)程序。首先查找“Network driver options”這段文字,之后您可以看到在該注釋后面定義了一系列的有關(guān)網(wǎng)卡驅(qū)動(dòng)的宏定義。注意保證INCLUDE_END和INCLUDE_LN_97X_END這兩個(gè)宏處于定義狀態(tài)(define),其他的宏都處于未定義狀態(tài)(undef); 缺省情況下,VxWorks系統(tǒng)是不接受外部輸入設(shè)備(如鍵盤)的輸入,也不向外部輸出設(shè)備(如顯示器)輸出數(shù)據(jù)。為了便于調(diào)試,我們必須改變它的這種缺省狀態(tài)。我們查找定位宏INCLUDE_PC_CONSOLE,然后保證其處于定義狀態(tài)(define)即可; 到此為止,對(duì)config.h文件的修改就完成了,保存修改,然后再打開同一目錄下的sysLn97xEnd.c文件; 這一步修改的目的是要使網(wǎng)卡正常工作。我們先定位到“memory-mapped IO base”這段文字,然后將其前面的參數(shù)由pciRsrcendUnit.bar1修改為NONE,這樣就可以了。最后別忘了保存。 到此為止,全部的修改工作都完成了,下一步就可以開始編譯連接了。2.3.4 編譯程序這一節(jié)我們要編譯生成bootrom引導(dǎo)程序和VxWorks運(yùn)行映象。 打開您的Tornado開發(fā)工具,在Build菜單下選擇Build Boot ROM,彈出如下對(duì)話框: 在BSP列表中選擇pcPentium,而在Image to build列表中分別選擇bootrom和gnu。完成選擇后,點(diǎn)擊OK按鈕就開始引導(dǎo)程序的編譯了。編譯產(chǎn)生的文件bootrom將保存在$(WIND_BASE)targetconfigpcPentium目錄下。 編譯生成bootrom后,還要?jiǎng)?chuàng)建一個(gè)VxWorks映象(image),也就是VxWorks操作系統(tǒng)本身的代碼。 o 創(chuàng)建一個(gè)“bootable VxWorks image”的工程; o 選擇您需要的VxWorks組件。這一步是可選的,如果您只想使用缺省的配置,那根本就不需要這一步;但如果您想使用額外的組件,例如,您可能想通過(guò)telnet連接VxWorks系統(tǒng),這時(shí)就需要在Workspace窗口的VxWorks選項(xiàng)卡中選擇telnet sever對(duì)應(yīng)的組件,如下圖: 在這個(gè)例子中我們選擇了兩個(gè)重要的組件:Telnet server 和 Target shell 。前者使我們可以通過(guò)Telnet協(xié)議登錄到VxWorks操作系統(tǒng)中;后者則可以讓我們通過(guò)命令行控制VxWorks系統(tǒng)。完

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論