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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論