




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記.精品文檔.目錄第1章 操作系統(tǒng)基本概念41.1實時操作系統(tǒng)和分時操作系統(tǒng)的區(qū)別41.2嵌入式操作系統(tǒng)VxWorks簡介41.3 VxWorks的特點51.3.1可靠性51.3.2實時性51.3.3 可裁減性61.3.4對一個實時內(nèi)核的要求61.4 VxWorks的整體構(gòu)架7第2章 vxWorks驅(qū)動開發(fā)預(yù)備72.1 VxWorks映像82.2 BSP主要文件目錄的組成及作用:112.3系統(tǒng)啟動順序142.4 Vxworks驅(qū)動概要17第3章 vxWorks 網(wǎng)絡(luò)驅(qū)動開發(fā)213.1驅(qū)動類別223.2 Vxwo
2、rks 下網(wǎng)絡(luò)驅(qū)動開發(fā)243.3 VxWorks網(wǎng)絡(luò)驅(qū)動配置及分析60第4章 VxWorks系統(tǒng)中常見問題65前言 在通信,電子領(lǐng)域,目前主流的嵌入式操作系統(tǒng)為linux 和vxworks。Linux多用于消費電子產(chǎn)品,像大家熟悉的andriod,原始系統(tǒng)就是linux,也就是說andriod也是一種linux系統(tǒng)。還有大家熟悉的MP3,也是使用linux操作系統(tǒng)的。Linux因為價格便宜(開源的,不需要付licence),穩(wěn)定性好占據(jù)了一定的市場份額。 Vxworks是風(fēng)河系統(tǒng)1983開發(fā)的一款嵌入式實時操作系統(tǒng),多用于通信,導(dǎo)航,航天等領(lǐng)域。因為這些領(lǐng)域?qū)崟r性要求非常高,比如現(xiàn)在LTE
3、系統(tǒng)就是使用vxworks系統(tǒng),因為是采用TDD模式,而這種模式,顯然對實時性要求非常高。也就注定了vxwroks 在這些領(lǐng)域的特有優(yōu)勢。選擇linux還是vxworks看自己的專業(yè)方向,還有自己的興趣所有。每個領(lǐng)域只要研究透徹,都是很有前途的。既然兩者都是主流的嵌入式操作系統(tǒng),其還是有很多相似性。小編也初步接觸過linux,發(fā)現(xiàn)具備一定的linux基礎(chǔ)對日后深入學(xué)習(xí)vxworks很有好處,很多思想都是相似的。另外,本人系小碩,目前的研究領(lǐng)域是vxworks驅(qū)動開發(fā),主攻網(wǎng)絡(luò)驅(qū)動開發(fā)。在平常的日常學(xué)習(xí)中,結(jié)合各位網(wǎng)友提供的資料(自己在百度上收集的),還有workbench 提供的documen
4、t(自己翻譯,特別是針對網(wǎng)絡(luò)驅(qū)動部分),希望對廣大嵌入式驅(qū)動開發(fā)者有所幫助。聲明: 此文檔并不適合于vxworks初學(xué)者,因為這里,小編省去了很多vxworks下的基本知識,包括內(nèi)核中常用的進程,信號量等等支持。也沒有提及集成開發(fā)環(huán)境tornado/vworkbench. 這里的探索重點是vxwroks底層的東西,包括啟動過程,BSP開發(fā)等。 附錄:Vxworks的應(yīng)用領(lǐng)域嵌入式Vxworks系統(tǒng)的主要應(yīng)用領(lǐng)域主要有以下幾方面: 1.數(shù)據(jù)網(wǎng)絡(luò):如:以太網(wǎng)交換機、路由器、遠程接入服務(wù)器等 2.遠程通訊:如:電信用的專用分組交換機和自動呼叫分配器,蜂窩電話系統(tǒng)等 3.醫(yī)療設(shè)備:如:放射理療設(shè)備 4
5、.消費電子:如:個人數(shù)字助理等 5.交通運輸:如:導(dǎo)航系統(tǒng)、高速火車控制系統(tǒng)等 6.工業(yè):如:機器人 7.航空航天:如:衛(wèi)星跟蹤系統(tǒng) 8.多媒體:如:電視會議設(shè)備 9.計算機外圍設(shè)備:如:X終端、I/O 系統(tǒng)等 總之,VxWorks的系統(tǒng)結(jié)構(gòu)是一個相當(dāng)小的微內(nèi)核的層次結(jié)構(gòu)。內(nèi)核僅提供多任務(wù)環(huán)境、進程間通信和同步功能。這些功能模塊足夠支持VxWorks在較高層次所提供的豐富的性能的要求。第1章 操作系統(tǒng)基本概念1.1實時操作系統(tǒng)和分時操作系統(tǒng)的區(qū)別 從操作系統(tǒng)能否滿足實時性要求來區(qū)分,可把操作系統(tǒng)分成分時操作系統(tǒng)和實時操作系統(tǒng)。
6、60; 分時操作系統(tǒng)按照相等的時間片調(diào)度進程輪流運行,分時操作系統(tǒng)由調(diào)度程序自動計算進程的優(yōu)先級,而不是由用戶控制進程的優(yōu)先級。這樣的系統(tǒng)無法實時響應(yīng)外部異步事件。 實時操作系統(tǒng)能夠在限定的時間內(nèi)執(zhí)行完所規(guī)定的功能,并能在限定的時間內(nèi)對外部的異步事件作出響應(yīng)。 分時系統(tǒng)主要應(yīng)用于科學(xué)計算和一般實時性要求不高的場合。實時性系統(tǒng)主要應(yīng)用于過程控制、數(shù)據(jù)采集、通信、多媒體信息處理等對時間敏感的場合。1.2嵌入式操作系統(tǒng)VxWorks簡介VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展能力、高性能
7、的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)、彈道制導(dǎo)、飛機導(dǎo)航等。在美國的 F-16、FA-18 戰(zhàn)斗機、B-2 隱形轟炸機和愛國者導(dǎo)彈上,甚至連1997年4月在火星表面登陸的火星探測器上也使用到了VxWorks。Ø VxWorks操作系統(tǒng)是一個嵌入式實時操作系統(tǒng)(RTOS)。Ø VxWorks與其它實時OS一樣,基于以下兩個重要機制:Ø 多任務(wù)環(huán)境及任務(wù)間通信。Ø 硬件中斷處理。Ø VxWor
8、ks多任務(wù)內(nèi)核完成的功能是:實時調(diào)度,任務(wù)間通信及互斥。Ø 其它功能則作為系統(tǒng)庫圍繞在內(nèi)核周圍,它們可根據(jù)需要進行剪裁。Ø VxWorks與非實時系統(tǒng)的不同之處在于:Ø VxWorks的優(yōu)先搶占機制基于調(diào)度,Ø VxWorks對外部事件的反應(yīng)和處理快,Ø VxWorks容量小并且可配置(微內(nèi)核結(jié)構(gòu)) 1.3 VxWorks的特點 1.3.1可靠性 操作系統(tǒng)的用戶希望在一個工作穩(wěn)定,可以信賴的環(huán)境中工作,所以操作系統(tǒng)的可靠性是用戶首先要考慮的問題。而穩(wěn)定、可靠一直是VxWorks的一個突出優(yōu)點。自從對中國的銷
9、售解禁以來,VxWorks以其良好的可靠性在中國贏得了越來越多的用戶。1.3.2實時性 實時性是指能夠在限定時間內(nèi)執(zhí)行完規(guī)定的功能并對外部的異步事件作出響應(yīng)的能力。實時性的強弱是以完成規(guī)定功能和作出響應(yīng)時間的長短來衡量的。 VxWorks 的實時性做得非常好,其系統(tǒng)本身的開銷很小,進程調(diào)度、進程間通信、中斷處理等系統(tǒng)公用程序精練而有效,它們造成的延遲很短。VxWorks 提供的多任務(wù)機制中對任務(wù)的控制采用了優(yōu)先級搶占(Preemptive Priority Scheduling)和輪轉(zhuǎn)調(diào)度(Round-Robin Sc
10、heduling)機制,也充分保證了可靠的實時性,使同樣的硬件配置能滿足更強的實時性要求,為應(yīng)用的開發(fā)留下更大的余地。 1.3.3 可裁減性 用戶在使用操作系統(tǒng)時,并不是操作系統(tǒng)中的每一個部件都要用到。例如圖形顯示、文件系統(tǒng)以及一些設(shè)備驅(qū)動在某些嵌入系統(tǒng)中往往并不使用。 VxWorks 由一個體積很小的內(nèi)核及一些可以根據(jù)需要進行定制的系統(tǒng)模塊組成。VxWorks 內(nèi)核最小為 8kB,即便加上其它必要模塊,所占用的空間也很小,且不失其實時、多任務(wù)的系統(tǒng)特征。由于它的高度靈活性,用戶可以很容易地對這一操作系統(tǒng)進行定制或作適當(dāng)開發(fā),來滿足自己的實際應(yīng)用需要。 1.3.4對一
11、個實時內(nèi)核的要求 一個實時操作系統(tǒng)內(nèi)核需滿足許多特定的實時環(huán)境所提出的基本要求,這些包括:多任務(wù):由于真實世界的事件的異步性,能夠運行許多并發(fā)進程或任務(wù)是很重要的。多任務(wù)提供了一個較好的對真實世界的匹配,因為它允許對應(yīng)于許多外部事件的多線程執(zhí)行。系統(tǒng)內(nèi)核分配CPU給這些任務(wù)來獲得并發(fā)性。搶占調(diào)度:真實世界的事件具有繼承的優(yōu)先級,在分配CPU的時候要注意到這些優(yōu)先級?;趦?yōu)先級的搶占調(diào)度,任務(wù)都被指定了優(yōu)先級,在能夠執(zhí)行的任務(wù)(沒有被掛起或正在等待資源)中,優(yōu)先級最高的任務(wù)被分配CPU資源。換句話說,當(dāng)一個高優(yōu)先級的任務(wù)變?yōu)榭蓤?zhí)行態(tài),它會立即搶占當(dāng)前正在運行的較低優(yōu)先級的任務(wù)。 任務(wù)間的通訊與同
12、步:在一個實時系統(tǒng)中,可能有許多任務(wù)作為一個應(yīng)用的一部分執(zhí)行。系統(tǒng)必須提供這些任務(wù)間的快速且功能強大的通信機制。內(nèi)核也要提供為了有效地共享不可搶占的資源或臨界區(qū)所需的同步機制。任務(wù)與中斷之間的通信:盡管真實世界的事件通常作為中斷方式到來,但為了提供有效的排隊、優(yōu)先化和減少中斷延時,我們通常希望在任務(wù)級處理相應(yīng)的工作。所以需要雜任務(wù)級和中斷級之間存在通信。1.4 VxWorks的整體構(gòu)架VxWorks 支持多種處理器,對硬件不做假設(shè),可支持ARM.PPC,MPIS架構(gòu)處理器。第2章 vxWorks驅(qū)動開發(fā)預(yù)備BSP定義:Board support packet ,為各種目標(biāo)板的硬件功能提供了統(tǒng)一
13、的軟件接口它們包括:Ø 硬件初始化Ø 中斷處理和產(chǎn)生Ø 硬件時鐘和定時器管理Ø 內(nèi)存映射和分配BSP還包括boot Rom和其它啟動機制,sysLib和sysALib庫是VxWorks可移植的核心,BSP庫是硬件與軟件的接口,處理硬件的初始化、中斷處理與產(chǎn)生、硬件時鐘與定時管理、局部和總線內(nèi)存空間的映射、內(nèi)存大小定義,等等2.1 VxWorks映像用戶通過定制VxWorks組件和進行應(yīng)用程序開發(fā)所生成 映像包括wind多任務(wù)微內(nèi)核,也包括BSP的引導(dǎo)代碼p Vxworks映像的三部分組成u BSS段(Block Started by Symbol,未手動
14、初始化的數(shù)據(jù))u 代碼段u 數(shù)據(jù)段p兩大類Ø BootRom類型映像Ø VxWorks類型BootRom類型映像最小化、專用的VxWorks引導(dǎo)映像,實現(xiàn)最少的系統(tǒng) 初始化用于啟動裝載VxWorks映像,功能類似于PC機的BIOS。BootRom運行時建立起多任務(wù)環(huán)境usrRoot任務(wù)、網(wǎng)絡(luò)任務(wù)(tNettask)、TFFS任務(wù)和FTP任務(wù)等。運行地點可能在ROM/Flash中執(zhí)行(例如ROM駐留型引導(dǎo)映像),也可能在RAM 中執(zhí)行。在系統(tǒng)中其對應(yīng)的編譯規(guī)則文件是rules.bspBootRom類型分為三種BootRom_res 一直運行在rom中的映象,只把data段拷貝
15、到ram里面。BootRom_uncmp 非壓縮方式的映象,data段和text段都要拷貝到ram里 面,并在ram里面運行。BootRom壓縮方式的映象,生成的時候編譯器會把除掉romlnit.s 和bootInit.c之外的目標(biāo)文件壓縮并“匯編”成一個 bootrom.Z.s,最后和romInit.o,bootInit.o, version.o進行鏈接,生成bootrom映像。要全部拷貝到ram中,并必須要進行解壓縮的工作。而這 些工作基本上都是在bootInit.c中進行的。VxWorks類型映像 系統(tǒng)的主映像,是系統(tǒng)最終要運行的映像該映像在運行時至少有一部分(如:數(shù)據(jù)段和BSS段)需要
16、在 RAM中運行。在系統(tǒng)中其對應(yīng)的編譯規(guī)則文件是rules.vxWorksVxworks 類型映像運行環(huán)境RAM運行的 壓縮的ROM運行的 非壓縮的VxWorks類型四種映像l VxWorks:RAM運行的VxWorks映像不包含引導(dǎo)程序,需要獨立的引導(dǎo)程序從本地存儲器或者經(jīng) 由網(wǎng)絡(luò)獲取該映像,然后將其下載到RAM中的 RAM_LOW_LADRS處運行u VxWorks_romROM 自動RAM 運行的VxWorks映像,不需要BootRom輔 助u VxWorks_romResidentROM啟動ROM運行的VxWorks映像,不需要BootRom輔助。包含引導(dǎo)代碼,在重啟時清空RAM,引導(dǎo)
17、代碼只將data段拷 貝到RAM 中的RAM_LOW_ADRS處,系統(tǒng)的運行是在ROM 中進行的,啟動速度快,需要的RAM 空間少,但是運行速度慢 。u VxWorks_romCompressVxWorks_rom的壓縮形式VxWorks型vs BootROM型映像對于沒有自啟動功能的VxWorks類型映像(如 VxWorks型),映像運行前需一段程序?qū)⒃撚?像拷貝到RAM中運行,BootRom類型映像完成VxWorks系統(tǒng)下載, 完畢后BootRom的任務(wù)就結(jié)束了二者在系統(tǒng)初始化的時候,所做的功能基本相 同,BootRom類型映像調(diào)用bootConfig.c,而 VxWorks類型映像調(diào)用u
18、srConfig.c映像鏈接方式可被靜態(tài)或動態(tài)鏈接VxWorks在開發(fā)階段可動態(tài)地下載目標(biāo)文件,并與 操作系統(tǒng)及其它目標(biāo)文件動態(tài)鏈接。鏈接以后是浮動的,只在裝載時才與絕對物理地址 相對應(yīng)。靜態(tài)VxWorks成品階段是采用靜態(tài)鏈接的。要對系統(tǒng)底層驅(qū)動清楚,也就是對CPU及相關(guān)的硬件有所了解.主要是32微處理器(上電啟動過程, download image的方式方法,讀寫ROM,地址空間分配,MMU,寄存器,中斷定義,.).參照硬件資料,多讀一些源碼會有所幫助.Tornado 2 開發(fā)調(diào)試環(huán)境協(xié)議框圖主機開發(fā)(Host Development System)目標(biāo)機(Target System)To
19、rnado 工具 WTX協(xié)議通信<=>EditorProjectShellDebuggerBrowserWindviewTarget Server|Target AgentVxWorks Target SimulatorWDB協(xié)議通信<=>ApplicationVxWorks OSVxWorks Target (WDB)Agent兩個主要兩個協(xié)議WTX協(xié)議(Wind River Tool eXchange): 用于開發(fā)機內(nèi)部Tornado工具與Target Server之間通信.WDB協(xié)議(Wind DeBug): 用于主機Target Server與目標(biāo)機之間的通信.
20、2.2 BSP主要文件目錄的組成及作用:Install_direction/target/config/All: 這個目錄下的文件是所有BSP文件共享的,不是特別需要不要更改里面的任何文件.configAll.h: 缺省定義了所有VxWorks的設(shè)置.如果不用缺省的設(shè)置,可在BSP目錄下的config.h文件中用#define或#undef方式來更改設(shè)置.bootInit.c: 在romInit.s后,完成Boot ROM的第二步初始化.程序從romInit.s中的romInit()跳到這個文件中的romStart().來執(zhí)行必要的解壓和ROM image的放置.bootConfig.c: 完
21、成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image的初始化代碼.Install/target/config/comps/src: 涉及系統(tǒng)核心的components,主要由target/config/All中usrConfig.c中函數(shù)調(diào)用.intasll/target/config/bspname: 包含系統(tǒng)或硬件相關(guān)的BSP文件.Makefile 一些命令行控制images的生成,參見 BSP設(shè)置部分及生成下載READMEBSP發(fā)布紀(jì)錄,版本,總的文檔config.h包括所有涉及CPU主板的設(shè)置及定義(includes,definations
22、),參見 BSP設(shè)置文件及生成下載configNet.h網(wǎng)絡(luò)驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.romInit.s匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見 系統(tǒng)啟動部分sysALib.s匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用.VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù)。 sysLib.c包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/c
23、onfig/comps/src的驅(qū)動.sysScsi.c可選文件用于Scsi設(shè)備設(shè)置和初始化.sysSerial.c可選文件用于所有的串口設(shè)置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代碼VxWorks運行在目標(biāo)機上,完整的,連結(jié)后的VxWorks二進制文件.VxWorks.sym完全的,連結(jié)后帶有符號表的VxWorks二進制文件VxWorks.st完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進制文件BSP用"make"來編譯連接生成(Created),而不是用Tornado的工具. BSP和應(yīng)用程序都可以在&qu
24、ot;make"或"tornade"上開發(fā)(developed) 。BSP被設(shè)置包括以下驅(qū)動: ² 中斷控制interrupt controller² 計時器timer(sys/aux)² 串口UART(serial)² 顯示屏LCD² 鍵盤Keyboard(opt)² 觸摸屏touch-screen(opt).2.3系統(tǒng)啟動順序 VxWorks image 分為在ROM中運行和在RAM中運行兩種.兩者啟動順序的區(qū)別在于sysInit()函數(shù)的調(diào)用.該函數(shù)在RAM運行的VxWorks中初始化RAM.ROM
25、中運行的VxWorks VxWorks在ROM中運行,即寫入ROM中的VxWorks是非壓縮的,不需要解壓,系統(tǒng)直接跳到ROM的首地址,運行VxWorks.注意:ROM運行的VxWorks并不支持所有的主扳,應(yīng)以主扳手冊為準(zhǔn).文件romInit.s中的romInit()->文件bootInit.c中的romStart()->文usrConfig usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。Vxwroks在ROM 中運行的優(yōu)勢 VxWorks在ROM中運行主要是
26、為了節(jié)省RAM空間,以便應(yīng)用程序有更大的空間運行.只把VxWorks image的data段復(fù)制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中執(zhí)行.。ROM中運行的VxWorks缺點是運行速度慢.RAM中運行的VxWorks VxWorks在RAM中運行,即寫入ROM中的Boot或VxWorks Image是壓縮的,需要先解壓copy所有的text和data到RAM的LOCAL_LOW_ADRS中,下面sysInit()主要是初始化RAM用的,系統(tǒng)直接跳到RAM的首地址,運行VxWorksusrInit()前面不壓縮,即romInit(),romStart()不能
27、壓縮. 啟動過程文件romInit.s中的romInit()->文件bootInit.c中的romStart()->sysaLib.s中的sysInit()->文件usrConfig.c中的usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。RAM運行的Boot或VxWorks image的text段或data段會從ROM復(fù)制到RAM,在RAM中運行。其中usrRoot()是VxWorks啟動的第一個任務(wù),由它來初始化 driver,network等。BootROM image 的啟動
28、過程最少的系統(tǒng)初始化,主要用于啟動裝載VxWorks image.一般有壓縮和不壓縮兩種形式,如bootrom和boot_uncmp.與VxWorks image的區(qū)別在于一個Bootrom調(diào)用bootConfig.c,而VxWorks調(diào)用usrConfig.c. 啟動順序文件romInit.s中的romInit()->文件bootInit.c中的romStart()->文件bootConfig中的usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.) 其中
29、/target/config/all/bootConfig.c是Boot ROM設(shè)置模塊.用于通過網(wǎng)絡(luò)加載VxWorks image.usrRoot()->bootCmdLoop(void)命令行選擇,或autobooting->bootLoad(pLine, &entry)載模塊到內(nèi)存(網(wǎng)絡(luò),TFFS,TSFS.)->netifAttach()->go(entry)->(entry)()從入口開始執(zhí)行,不返回.系統(tǒng)啟動中幾個很重要的函數(shù)及其作用 romInit()-power up,disable interrupt,put boot type on t
30、he stack,clears caches.romStart()-load Image Segments into RAM.usrInit()- Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysH
31、wInit()-Interrup locked,Initializes hardware,registers,activation kernel.KernelInit(usrRoot,.)- Initializes and starts the kernel. Defines system memory partition. Activates a task tUsrRoot to complete initalization. Unlocks inierrupts. Uses usrInit() initate stack. usrRoot() 初始化內(nèi)存分區(qū)表(memory partiti
32、on library) ,初始化系統(tǒng)系統(tǒng)時鐘(system clock) 。初始化輸入輸出系統(tǒng)(I/O system)-可選 Create devices-可選 設(shè)置網(wǎng)絡(luò)(Configure network)-可選 激活WDB目標(biāo)通信(Activate WDB agent)-可選 調(diào)用程序(Activate application) VxWorks Image在RAM中解壓的位置RAM Low AddressRAM High AddressVxWorks運行的位置Boot image由ROM解壓后Copy的位置,即bootRom區(qū)RAM Low Address,RAM High Address
33、和有關(guān)定義在BSP,config.h,makefile文件中定義.可參見BSP配置文件及生成下載VxWorks 在ROM中的情況 ROM 低高地址位ROM 低地址位壓縮的VxWorks Imgage沒有壓縮的romInit.s和romStart()在ROM的起始位置,系統(tǒng)power up后,從這個起始位開始執(zhí)行,即執(zhí)行romInit(),起始位置由硬件定義,一般為0x00000000注:淺藍色為整個VxWorks Image.其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在makefile 和BSP config.h中定義.可參見BSP配置文件及生成下載2.4 Vxw
34、orks驅(qū)動概要總線類型PLB(processor local bus),VME,PCI,PCI-Express,RapidIO,Mii,Virtual,MF(multi function device bus),USB,IIC,SPI.驅(qū)動可以提供的服務(wù)配置 配置資源例如 ns83902VxbEnd.c 設(shè)備驅(qū)動中有這么一段devResourceGet (pHcf, "regWidth", HCF_RES_INT, (void *) ®isterWidth;這里的registerwidth 就是資源配置參數(shù)vxbInstParamByNameGet (pIn
35、st, "jumboEnable", VXB_PARAM_INT32, &val); 這句話的意思是支持大包處理,jumboenable.這個就是參數(shù)配置又如rtl8169VxbEnd.c:中有這么一段LOCAL VXB_PARAMETERS rtgParamDefaults ="rxQueue00", VXB_PARAM_POINTER, (void *)&rtgRxQueueDefault,"txQueue00", VXB_PARAM_POINTER, (void *)&rtgTxQueueDefault,
36、"jumboEnable", VXB_PARAM_INT32, (void *)0,NULL, VXB_PARAM_END_OF_LIST, NULL內(nèi)存管理系統(tǒng)啟動過程中分配內(nèi)存。 當(dāng)系統(tǒng)早期啟動的過程中,那些最初被初始化的設(shè)備驅(qū)動是不能使用malloc,calloc.memPartAlloc() 等函數(shù)分配內(nèi)存的,因為這些方法要使用信號量等操作。這時,只能使用如下函數(shù)分配內(nèi)存 hwMemAlloc( ) 從一個靜態(tài)池中分配N 個字節(jié),并清零。hwMemFree( )將內(nèi)存分配給靜態(tài)池。注意hwMemAlloc( ) 和hmMemFree()是在系統(tǒng)啟動初期分配和釋放內(nèi)存
37、,一旦系統(tǒng)完成初始化,就可以使用標(biāo)準(zhǔn)的內(nèi)存分配哈數(shù)進行分配。malloc( ), calloc( ), memPartAlloc( ),這里怎么沒有memalign()硬件訪問讀寫硬件寄存器 vxbRead8( ) vxbRead16( ) vxbRead32( ) vxbRead64( ) vxbWrite8( ) vxbWrite16( ) vxbWrite32( ) vxbWrite64( )使用vxbus 訪問寄存器的宏定義在下面的路徑installDir/vxWorks-6.x/target/src/hwif/h/vxbus/vxbAccess.h 采用vxbRegMap( ). 進
38、行映射/* find the memory mapped window for the device registers */for (i = 0; i < VXB_MAXBARS; i+)if (pInst->regBaseFlagsi = VXB_REG_MEM)break;pDrvCtrl->feiBar = pInst->pRegBasei; /* store the base address */vxbRegMap (pInst, i, &pDrvCtrl->feiHandle); /* map the window */這段程序完成的功能是首先
39、查找空間,找到VXB_REG_MEM 時,跳出,將地址存儲到【pDrvCtrl 】中,同時調(diào)用函數(shù)完成映射,返回句柄,供繼續(xù)讀寫用。中斷處理vxbIntConnect( ) vxbIntDisconnect( ) vxbIntEnable( ) vxbIntDisable( )同步任務(wù)水平的同步采用信號量(這里說mux),spinlock,中斷鎖。中斷水平的同步采用信號量(mux),添加item 到消息隊列。當(dāng)使用后者時,在ISR 中使用msgsend 時,timeout應(yīng)該為zero。 中斷水平的同步采用中斷鎖 intCpulock ,unCpuLockkey = intCpuLock ()
40、;/* access shared data structures. */intCpuUnlock (key); 注意 雖然中斷鎖很簡單,很有效,但是現(xiàn)在不怎么使用中斷鎖了,因為以下兩個原因1. 增加了系統(tǒng)開銷。2. 在多個CPU 或vxwroks SMP 模式下中斷鎖不起作用。第3章 vxWorks 網(wǎng)絡(luò)驅(qū)動開發(fā) 驅(qū)動說明風(fēng)河早期的驅(qū)動采用legacy driver ,在早期的版即vxWorks5.x 中使用,在新的版本中已經(jīng)不再提供legacy driver了,特別是使用SMP 的用戶,風(fēng)河強烈建議采用vxbus模型的驅(qū)動。驅(qū)動開發(fā)可利用到的資源包含網(wǎng)絡(luò)驅(qū)動,總線控制,定時器驅(qū)動,串行設(shè)備
41、驅(qū)動。installDir/vxWorks-6.x/target/src/hwif/end/templateVxbEnd.cinstallDir/vxWorks-6.x/target/src/hwif/busCtlr/vxbTemplatePci.cinstallDir/vxWorks-6.x/target/src/hwif/timer/vxbTemplateTimer.cinstallDir/vxWorks-6.x/target/src/hwif/sio/vxbTemplateSio.c關(guān)于定時器驅(qū)動installDir/vxWorks-6.x/target/src/hwif/sio/vxb
42、TemplateSio.c這里的驅(qū)動采用vxbus 模型開發(fā),是從legacy driver遷移到vxbus的。installDir/vxWorks-6.x/target/src/drv/timer/m8260Timer.c提供了PPC8260 的定時器驅(qū)動,采用legacydriver開發(fā)。3.1驅(qū)動類別注意開發(fā)驅(qū)動對vxWorks的I/O 系統(tǒng)也要有所了解。 通用類別: 串行設(shè)備。軟件提供open(),write(),ioctl() 調(diào)用。串行設(shè)備驅(qū)動例程存放路徑installDir/vxWorks-6.x/target/src/hwif/sio 存儲設(shè)備 管理ram,tape ram,及
43、其板上的flash 設(shè)備,ATA 盤,串行ata 盤,scsi 盤,usb flash 盤等。路徑:installDir/vxWorks-6.x/target/src/hwif/storage網(wǎng)絡(luò)接口驅(qū)動MAC層驅(qū)動installDir/vxWorks-6.x/target/src/hwif/endMAC 驅(qū)動與MUX 相連。物理層驅(qū)動installDir/vxWorks-6.x/target/src/hwif/miiPHY 與MAC 之間由MII 相連。NVRAM (非易失性RAM )驅(qū)動installDir/vxWorks-6.x/target/src/hwif/nvram定時器驅(qū)動ins
44、tallDir/vxWorks-6.x/target/src/hwif/timer定時器驅(qū)動的作用:1. 告訴CPU 某事件已經(jīng)消耗了指定時間2. 提供加減計數(shù)DMA 驅(qū)動installDir/vxWorks-6.x/target/src/hwif/dmaBus Controller Drivers(總線控制器驅(qū)動) 為不同的總線之間提供接口每一個CPU 在設(shè)計的時候都提供了一個與外界相連的接口,稱為總線接口。一般情況下,不考慮CPU類型,直接與總線相連,稱為PLB(processor local bus)。在某些情況下,需要將不同的總線之間進行橋接,用到PCE 或VME.installDir
45、/vxWorks-6.x/target/src/hwif/busCtlr作用: 總線控制器確定系統(tǒng)當(dāng)前是那種總線在工作。2.總線控制器負責(zé)配置下行設(shè)備,使之能夠工作。3.總線控制器負責(zé)管理地址映射。USB 驅(qū)動 USB 主機設(shè)配驅(qū)動 installDir/vxWorks-6.x/target/src/hwif/busCtlr/usb/hcd USB 類驅(qū)動installDir/vxWorks-6.x/target/src/drv/usbInterrupt Controller Drivers(中斷控制器驅(qū)動) 作用:當(dāng)設(shè)備產(chǎn)生中斷時,中斷控制器負責(zé)將中斷傳遞個處理器,并且保證其他中斷源不再送往
46、CPU當(dāng)其正在處理當(dāng)前中斷時。installDir/vxWorks-6.x/target/src/hwif/intCtlrMultifunction DriversRemote Processing Element DriversinstallDir/vxWorks-6.x/target/src/hwif/cpuconsole 驅(qū)動installDir/vxWorks-6.x/target/src/hwif/consoleResource DriversinstallDir/vxWorks-6.x/target/src/hwif/resource資源驅(qū)動的功能是為外圍設(shè)備及其配置資源其他類 A
47、/D D/A要寫驅(qū)動,首先要知道驅(qū)動文件所在位置,這里有三個路徑存放與驅(qū)動有關(guān)的文件installDir/vxWorks-6.x/target/3rdpartyVxBus model device drivers written by third party developers that are installed as add-ons to an existing VxWorks installation.installDir/vxWorks-6.x/target/src/hwifDrivers written in compliance with the VxBus device mod
48、el, distributed and supported by Wind River, and provided as part of a standard product,installation or patch.installDir/vxWorks-6.x/target/src/drvWind River legacy drivers (not in VxBus compliance).這里的驅(qū)動是采用legacy,模型(區(qū)別于vxbus模型),Legacy 模型用于驅(qū)動開發(fā)是應(yīng)用在vxworks 早期版本中。驅(qū)動源文件提供某些實體的邏輯實現(xiàn) Driver source fileins
49、tallDir/vxWorks-6.x/target/src/hwifThird-party drivers are found under:installDir/vxWorks-6.x/target/3rdpartyThe example in this section discusses the file locations3.2 Vxworks 下網(wǎng)絡(luò)驅(qū)動開發(fā) 說明:vxworks下網(wǎng)絡(luò)驅(qū)動開發(fā),是本文檔要講述的重點。在本章節(jié)中,將重點介紹vxworks下驅(qū)動開發(fā)要完成的工作,熟悉驅(qū)動開發(fā)有關(guān)的源文件及其頭文件,根據(jù)具體情況進行修改和配置。理解使用vxbus開發(fā)模型進行驅(qū)動開發(fā)的一般流程
50、。知道在系統(tǒng)初始化過程系統(tǒng)是如何對網(wǎng)絡(luò)驅(qū)動進行初始化的,包括網(wǎng)絡(luò)驅(qū)動的聲明,注冊等。在本章節(jié)中,讀者要重點關(guān)注與網(wǎng)絡(luò)驅(qū)動有關(guān)的頭文件,源文件(對于命名中有end這樣字眼的程序要多加留意),可以仔細研讀,發(fā)現(xiàn)其中的一般性。最后結(jié)合風(fēng)河代碼,給出一款網(wǎng)卡驅(qū)動的開發(fā)方法。 vxWorks 網(wǎng)絡(luò)協(xié)議棧 與windows 下TCP/IP 協(xié)議棧相比,vxWorks增加了MUX 層。VxWorks下網(wǎng)絡(luò)驅(qū)動的開發(fā)要掌握的基本概念1. 網(wǎng)絡(luò)驅(qū)動包括MAC 層驅(qū)動和PHY 驅(qū)動。MAC層和PHY 層通過MII 連接。MII 是meidia independent interface 的縮寫,是一種連接機制。其
51、他媒介還有SGMII,GMII ,PLB 等等。可以通過配置MAC 相關(guān)的寄存器實現(xiàn)。2. Vworks 下網(wǎng)絡(luò)驅(qū)動分為END 模型驅(qū)動和BSD 模型驅(qū)動。現(xiàn)在比較流行的還是END 模型驅(qū)動。3. 寫vxWorks下的驅(qū)動只要實現(xiàn)模板函數(shù)完成的功能即可,如endload(),endunload(),endpollsend(),endpollreceive()等。具體函數(shù)看數(shù)據(jù)結(jié)構(gòu)netfun,有需要實現(xiàn)的函數(shù)接口。這些接口在系統(tǒng)初始化硬件的過程中有mux層調(diào)用實現(xiàn)。驅(qū)動開發(fā)者只需關(guān)心底層的這幾個函數(shù)實現(xiàn),無須關(guān)心mux層的實現(xiàn)方法。4. Socket 與vxWorks網(wǎng)絡(luò)驅(qū)動的關(guān)系Socket
52、 是在應(yīng)用層調(diào)用。起始在vxworks下表現(xiàn)為一種文件。通過socket在不同進程之間傳遞信息。Socket 的發(fā)送接收功能,說到底最后還是調(diào)用底層的驅(qū)動send,receive實現(xiàn)。對vxwroks 網(wǎng)絡(luò)驅(qū)動有一點了解之后,我們來重點學(xué)習(xí)END 驅(qū)動了解什么是MUX這個圖表明MUX 在協(xié)議棧中的位置,與傳統(tǒng)TCP/IP 協(xié)議棧相比,增加了一層MUX,是數(shù)據(jù)鏈路層與IP層之間的接口。這里的協(xié)議層是與傳輸層及其往上應(yīng)用層的接口。與其他TCP/IP 協(xié)議相比VxWorks網(wǎng)絡(luò)協(xié)議棧增加一層MUX層。MUX層是VxWorks為方便在網(wǎng)絡(luò)接口硬件上實現(xiàn)多種協(xié)議而增加的一層 。它主要用于管理底層的多種硬
53、件的設(shè)備驅(qū)動,向上層不同協(xié)議提供統(tǒng)一的接口,降低了上層協(xié)議與底層物理硬件的藕合,使得網(wǎng)絡(luò)驅(qū)動和上層協(xié)議彼此保持獨立,既方便在現(xiàn)有硬件基礎(chǔ)上實現(xiàn)新的上層協(xié)議,也利于用新的硬件支持原有的上層協(xié)議。MUX與END的交互是通過提供一套可供底層調(diào)用接口服務(wù)來實現(xiàn)的,實現(xiàn)END驅(qū)動必須遵循這套接口關(guān)系。如圖所示。MUX 與END 的接口關(guān)系圖3中右邊框中列出的函數(shù)是驅(qū)動需要實現(xiàn)的函數(shù),供MUX 層調(diào)用在必要的時間調(diào)用,如當(dāng)上層使用該網(wǎng)卡發(fā)送數(shù)據(jù)時,MUX 會調(diào)用該網(wǎng)卡END 驅(qū)動提供的Send函數(shù),將數(shù)據(jù)提交給網(wǎng)卡芯片硬件。緩沖池數(shù)據(jù)結(jié)構(gòu)網(wǎng)絡(luò)設(shè)備驅(qū)動與上層協(xié)議進行數(shù)據(jù)交換需要相應(yīng)的內(nèi)存緩沖,并且管理這些緩
54、沖也需要相應(yīng)的函數(shù)。VxWorks提供了netBufLib函數(shù)庫用于創(chuàng)建和管理網(wǎng)絡(luò)設(shè)備用到的內(nèi)存緩沖池,網(wǎng)絡(luò)設(shè)備驅(qū)動可以直接使用也可以在此基礎(chǔ)上設(shè)計自己特定的內(nèi)存緩沖池。數(shù)據(jù)以簇的形式保存,數(shù)據(jù)結(jié)構(gòu)mBlks(內(nèi)存塊)和clBlks(簇塊)形成的數(shù)據(jù)鏈結(jié)構(gòu)則用于指定各個簇。在clBlk之上是mBlk結(jié)構(gòu)。該結(jié)構(gòu)存儲一個到clBlk的連接,也可以存儲一個到另一個mBlk的連接。通過mBlk的連接,可以引用任意數(shù)量的數(shù)據(jù),如圖4所示。圖4 mBlks 和clBlks 的數(shù)據(jù)結(jié)構(gòu)裝載及啟動END 設(shè)備的系統(tǒng)函數(shù)主要用到以下幾個:(1).muxDevLoad()該函數(shù)裝載指定設(shè)備的驅(qū)動程序裝載函數(shù)。如
55、果要裝載END 設(shè)備,系統(tǒng)必須調(diào)用muxDevLoad()函數(shù)。(2).muxDevStart()啟動設(shè)備函數(shù)(3).muxBind()muxBind()可以將協(xié)議綁定到指定的END 設(shè)備上。其調(diào)用過程是系統(tǒng)調(diào)用ipAttach()函數(shù),而該函數(shù)調(diào)用muxBind()函數(shù),綁定協(xié)議堆棧到MUX 上的一個指定的網(wǎng)絡(luò)接口。當(dāng)一個網(wǎng)絡(luò)接口被關(guān)閉時,ipAttach()函數(shù)將釋放網(wǎng)絡(luò)接口所關(guān)聯(lián)的TCP/IP 堆棧模塊。裝載及啟動END 設(shè)備驅(qū)動程序的流程如下:使用指定的END 設(shè)備驅(qū)動程序的BSP 引導(dǎo)VxWorks 系統(tǒng)時,在引導(dǎo)過程中,系統(tǒng)將執(zhí)行任務(wù)tUsrRoot 來完成如下各項:(1)初始化網(wǎng)
56、絡(luò)任務(wù)的工作隊列;(2)創(chuàng)建tNetTask 任務(wù)來處理網(wǎng)絡(luò)任務(wù)工作隊列的條目;(3)調(diào)用muxDevLoad()裝載指定的網(wǎng)絡(luò)驅(qū)動程序;(4)調(diào)用muxDevStart()啟動指定的網(wǎng)絡(luò)驅(qū)動程序。tUsrRoot 任務(wù)調(diào)用MUX 設(shè)備裝載函數(shù)muxDevLoad()和設(shè)備啟動函數(shù)muxDevStart(),通過這兩個函數(shù)來裝載和啟動設(shè)備驅(qū)動程序。muxDevLoad()函數(shù)會根據(jù)網(wǎng)絡(luò)設(shè)備表endDevTbl中的定義逐一調(diào)用各網(wǎng)絡(luò)設(shè)備的裝載函數(shù),其中這個函數(shù)是muxDevLoad()的一個輸入?yún)?shù)。muxDevStart()函數(shù)也會根據(jù)endDevTbl逐一調(diào)用網(wǎng)絡(luò)設(shè)備所定義的設(shè)備開始函數(shù)。至此MUX 的初始化以及END 驅(qū)動程序的初始化工作已經(jīng)完成。但是網(wǎng)絡(luò)設(shè)備還是不可以使用,因為還需要將協(xié)議綁定到指定的END 指定的設(shè)備上,這一步需要用muxBind()函數(shù)實現(xiàn)。在VxWorks 中,系統(tǒng)通過usrRoot()函數(shù)調(diào)用usrNetInit()函數(shù)完成MUX 的初始化、裝載網(wǎng)絡(luò)設(shè)備表endDevTbl中描述的所有設(shè)備并將IP 協(xié)議綁定到網(wǎng)絡(luò)引導(dǎo)設(shè)備上等工作。網(wǎng)絡(luò)設(shè)備驅(qū)動程序的安裝過程即圖5 所示的網(wǎng)絡(luò)初始化順序。圖5 網(wǎng)絡(luò)初始化順序發(fā)送數(shù)據(jù)在VxWorks 網(wǎng)絡(luò)系統(tǒng)中,發(fā)送數(shù)據(jù)的流程如圖6。圖6 數(shù)據(jù)發(fā)送通過對圖6 分析,主要包含以
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)綜合實習(xí)報告
- 2025年即時配送行業(yè)配送路徑優(yōu)化與成本控制:物流機器人技術(shù)應(yīng)用報告
- 威海市金貝殼新材料有限公司高性能工業(yè)刀片生產(chǎn)項目報告表
- 2025年施工員之土建施工專業(yè)管理實務(wù)自我檢測試卷A卷附答案
- 2025年互聯(lián)網(wǎng)金融平臺資金存管業(yè)務(wù)流程優(yōu)化與安全風(fēng)險管理
- 2025年互聯(lián)網(wǎng)金融平臺資金存管系統(tǒng)安全性與穩(wěn)定性提升策略研究
- 2025年互聯(lián)網(wǎng)金融平臺資金存管風(fēng)險控制與風(fēng)險評估體系研究報告
- 2025年互聯(lián)網(wǎng)金融平臺用戶信任度提升策略與客戶滿意度調(diào)查報告
- 廣東省汕尾市2025年九年級下學(xué)期教學(xué)質(zhì)量監(jiān)測英語試題及答案
- 建模圖像題目及答案大全
- 廣東省金山中學(xué)、中山一中、佛山一中、寶安中學(xué)四校2023-2024學(xué)年高二下學(xué)期第一次聯(lián)考數(shù)學(xué)試卷(無答案)
- 浙江省嘉興市2023-2024學(xué)年八年級下學(xué)期6月期末語文試題
- 農(nóng)產(chǎn)品購銷合同范本版
- 語文五年級下冊第六單元大單元整體教學(xué)設(shè)計
- 雞毛信的故事-紅色故事課件
- 中國古都西安英文介紹課件
- 國家開放大學(xué)《合同法》章節(jié)測試參考答案
- 初中英語七選五經(jīng)典5篇(附帶答案)
- (完整版)2019年安徽中考化學(xué)真題(版含答案)
- 2024年晉城市國有資本投資運營有限公司招聘筆試參考題庫附帶答案詳解
- 安全技術(shù)交底書(一級)
評論
0/150
提交評論