小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記_第1頁
小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記_第2頁
小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記_第3頁
小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記_第4頁
小碩vxworks網(wǎng)絡(luò)驅(qū)動開發(fā)筆記_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第1章操作系統(tǒng)基本概念4實時操作系統(tǒng)和分時操作系統(tǒng)的區(qū)別4嵌入式操作系統(tǒng)VxWorks簡介41.3 VxWorks的特點5可靠性5實時性51.3.3 可裁減性6對一個實時內(nèi)核的要求61.4 VxWorks的整體構(gòu)架7第2章 vxWorks驅(qū)動開發(fā)預(yù)備72.1 VxWorks映像82.2 BSP主要文件目錄的組成及作用:11系統(tǒng)啟動順序142.4 Vxworks驅(qū)動概要17第3章 vxWorks 網(wǎng)絡(luò)驅(qū)動開發(fā)21驅(qū)動類別223.2 Vxworks 下網(wǎng)絡(luò)驅(qū)動開發(fā)243.3 VxWorks網(wǎng)絡(luò)驅(qū)動配置及分析60第4章 VxWorks系統(tǒng)中常見問題65前言 在通信,電子領(lǐng)域,目前主流的嵌入式操作系統(tǒng)

2、為linux 和vxworks。Linux多用于消費電子產(chǎn)品,像大家熟悉的andriod,原始系統(tǒng)就是linux,也就是說andriod也是一種linux系統(tǒng)。還有大家熟悉的MP3,也是使用linux操作系統(tǒng)的。Linux因為價格便宜(開源的,不需要付licence),穩(wěn)定性好占據(jù)了一定的市場份額。 Vxworks是風河系統(tǒng)1983開發(fā)的一款嵌入式實時操作系統(tǒng),多用于通信,導(dǎo)航,航天等領(lǐng)域。因為這些領(lǐng)域?qū)崟r性要求非常高,比如現(xiàn)在LTE 系統(tǒng)就是使用vxworks系統(tǒng),因為是采用TDD模式,而這種模式,顯然對實時性要求非常高。也就注定了vxwroks 在這些領(lǐng)域的特有優(yōu)勢。選擇linux還是v

3、xworks看自己的專業(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 提供的document(自己翻譯,特別是針對網(wǎng)絡(luò)驅(qū)動部分),希望對廣大嵌入式驅(qū)動開發(fā)者有所幫助。聲明: 此文檔并不適合于vxworks初學(xué)者,因為這里,小編省去了很多vxwork

4、s下的基本知識,包括內(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.消費電子:如:個人數(shù)字助理等 5.交通運輸:如:導(dǎo)航系統(tǒng)、高速火車控制系統(tǒng)等 6.工業(yè):如:機器人 7.航空航天:如:衛(wèi)星跟蹤系統(tǒng) 8.多媒體:如:電視會議

5、設(shè)備 9.計算機外圍設(shè)備:如:X終端、I/O 系統(tǒng)等 總之,VxWorks的系統(tǒng)結(jié)構(gòu)是一個相當小的微內(nèi)核的層次結(jié)構(gòu)。內(nèi)核僅提供多任務(wù)環(huán)境、進程間通信和同步功能。這些功能模塊足夠支持VxWorks在較高層次所提供的豐富的性能的要求。第1章 操作系統(tǒng)基本概念實時操作系統(tǒng)和分時操作系統(tǒng)的區(qū)別    從操作系統(tǒng)能否滿足實時性要求來區(qū)分,可把操作系統(tǒng)分成分時操作系統(tǒng)和實時操作系統(tǒng)。  分時操作系統(tǒng)按照相等的時間片調(diào)度進程輪流運行,分時操作系統(tǒng)由調(diào)度程序自動計算進程的優(yōu)先級,而不是由用戶控制進程的優(yōu)先級。這樣的系統(tǒng)無法實時響應(yīng)外部異步事件。實時操

6、作系統(tǒng)能夠在限定的時間內(nèi)執(zhí)行完所規(guī)定的功能,并能在限定的時間內(nèi)對外部的異步事件作出響應(yīng)。分時系統(tǒng)主要應(yīng)用于科學(xué)計算和一般實時性要求不高的場合。實時性系統(tǒng)主要應(yīng)用于過程控制、數(shù)據(jù)采集、通信、多媒體信息處理等對時間敏感的場合。VxWorks簡介VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領(lǐng)域占據(jù)一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精尖技術(shù)及實時性要求極高的領(lǐng)域中,如衛(wèi)星通訊、軍事演習(xí)

7、、彈道制導(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ù)間通信。Ø 硬件中斷處理。Ø VxWorks多任務(wù)內(nèi)核完成的功能是:實時調(diào)度,任務(wù)間通信及互斥。Ø 其它功能則作為系統(tǒng)庫圍繞在內(nèi)核周圍,它們可根據(jù)需要進行剪裁。Ø VxWorks與非實時系統(tǒng)的不同之處在于:

8、6; VxWorks的優(yōu)先搶占機制基于調(diào)度,Ø VxWorks對外部事件的反應(yīng)和處理快,Ø VxWorks容量小并且可配置(微內(nèi)核結(jié)構(gòu))1.3 VxWorks的特點可靠性    操作系統(tǒng)的用戶希望在一個工作穩(wěn)定,可以信賴的環(huán)境中工作,所以操作系統(tǒng)的可靠性是用戶首先要考慮的問題。而穩(wěn)定、可靠一直是VxWorks的一個突出優(yōu)點。自從對中國的銷售解禁以來,VxWorks以其良好的可靠性在中國贏得了越來越多的用戶。實時性    實時性是指能夠在限定時間內(nèi)執(zhí)行完規(guī)定的功能并對外部的異步事件作出響應(yīng)的能力。實時性的強弱是以完成

9、規(guī)定功能和作出響應(yīng)時間的長短來衡量的。     VxWorks 的實時性做得非常好,其系統(tǒng)本身的開銷很小,進程調(diào)度、進程間通信、中斷處理等系統(tǒng)公用程序精練而有效,它們造成的延遲很短。VxWorks 提供的多任務(wù)機制中對任務(wù)的控制采用了優(yōu)先級搶占(Preemptive Priority Scheduling)和輪轉(zhuǎn)調(diào)度(Round-Robin Scheduling)機制,也充分保證了可靠的實時性,使同樣的硬件配置能滿足更強的實時性要求,為應(yīng)用的開發(fā)留下更大的余地。 1.3.3 可裁減性   用戶在使用操作系統(tǒng)時,并不是操作系統(tǒng)中的每一個部件都要用

10、到。例如圖形顯示、文件系統(tǒng)以及一些設(shè)備驅(qū)動在某些嵌入系統(tǒng)中往往并不使用。VxWorks 由一個體積很小的內(nèi)核及一些可以根據(jù)需要進行定制的系統(tǒng)模塊組成。VxWorks 內(nèi)核最小為 8kB,即便加上其它必要模塊,所占用的空間也很小,且不失其實時、多任務(wù)的系統(tǒng)特征。由于它的高度靈活性,用戶可以很容易地對這一操作系統(tǒng)進行定制或作適當開發(fā),來滿足自己的實際應(yīng)用需要。 1.3.4對一個實時內(nèi)核的要求一個實時操作系統(tǒng)內(nèi)核需滿足許多特定的實時環(huán)境所提出的基本要求,這些包括:多任務(wù):由于真實世界的事件的異步性,能夠運行許多并發(fā)進程或任務(wù)是很重要的。多任務(wù)提供了一個較好的對真實世界的匹配,因為它允許對應(yīng)于許多外部

11、事件的多線程執(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資源。換句話說,當一個高優(yōu)先級的任務(wù)變?yōu)榭蓤?zhí)行態(tài),它會立即搶占當前正在運行的較低優(yōu)先級的任務(wù)。任務(wù)間的通訊與同步:在一個實時系統(tǒng)中,可能有許多任務(wù)作為一個應(yīng)用的一部分執(zhí)行。系統(tǒng)必須提供這些任務(wù)間的快速且功能強大的通信機制。內(nèi)核也要提供為了有效地共享不可搶占的資源或臨界區(qū)所需的同步機制。任務(wù)與中斷之間的通信:盡管真實世界的事件通常作為中斷方

12、式到來,但為了提供有效的排隊、優(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,為各種目標板的硬件功能提供了統(tǒng)一的軟件接口它們包括:Ø 硬件初始化Ø 中斷處理和產(chǎn)生Ø 硬件時鐘和定時器管理Ø 內(nèi)存映射和分配BSP還包括boot Rom和其它啟動機制,sysLib和sysALib庫是VxWorks可移植的

13、核心,BSP庫是硬件與軟件的接口,處理硬件的初始化、中斷處理與產(chǎn)生、硬件時鐘與定時管理、局部和總線內(nèi)存空間的映射、內(nèi)存大小定義,等等2.1 VxWorks映像用戶通過定制VxWorks組件和進行應(yīng)用程序開發(fā)所生成映像包括wind多任務(wù)微內(nèi)核,也包括BSP的引導(dǎo)代碼pVxworks映像的三部分組成u BSS段(Block Started by Symbol,未手動初始化的數(shù)據(jù))u 代碼段u 數(shù)據(jù)段p兩大類Ø BootRom類型映像Ø VxWorks類型BootRom類型映像最小化、專用的VxWorks引導(dǎo)映像,實現(xiàn)最少的系統(tǒng)初始化用于啟動裝載VxWorks映像,功能類似于PC

14、機的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ī)則文件是BootRom類型分為三種BootRom_res一直運行在rom中的映象,只把data段拷貝到ram里面。BootRom_uncmp非壓縮方式的映象,data段和text段都要拷貝到ram里 面,并在ram里面運行。BootRom壓縮方式的映象,生成的時候編譯器會把除掉romlnit.s 和之外的目標文件壓縮并“匯編”成一個 ,最后和, 進行鏈接,

15、生成bootrom映像。要全部拷貝到ram中,并必須要進行解壓縮的工作。而這 些工作基本上都是在中進行的。VxWorks類型映像系統(tǒng)的主映像,是系統(tǒng)最終要運行的映像該映像在運行時至少有一部分(如:數(shù)據(jù)段和BSS段)需要在 RAM中運行。在系統(tǒng)中其對應(yīng)的編譯規(guī)則文件是Vxworks 類型映像運行環(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 運行的Vx

16、Works映像,不需要BootRom輔 助u VxWorks_romResidentROM啟動ROM運行的VxWorks映像,不需要BootRom輔助。包含引導(dǎo)代碼,在重啟時清空RAM,引導(dǎo)代碼只將data段拷 貝到RAM 中的RAM_LOW_ADRS處,系統(tǒng)的運行是在ROM 中進行的,啟動速度快,需要的RAM 空間少,但是運行速度慢 。u VxWorks_romCompressVxWorks_rom的壓縮形式VxWorks型vs BootROM型映像對于沒有自啟動功能的VxWorks類型映像(如 VxWorks型),映像運行前需一段程序?qū)⒃撚?像拷貝到RAM中運行,BootRom類型映像完成

17、VxWorks系統(tǒng)下載, 完畢后BootRom的任務(wù)就結(jié)束了二者在系統(tǒng)初始化的時候,所做的功能基本相 同,BootRom類型映像調(diào)用,而 VxWorks類型映像調(diào)用映像鏈接方式可被靜態(tài)或動態(tài)鏈接VxWorks在開發(fā)階段可動態(tài)地下載目標文件,并與 操作系統(tǒng)及其它目標文件動態(tài)鏈接。鏈接以后是浮動的,只在裝載時才與絕對物理地址 相對應(yīng)。靜態(tài)VxWorks成品階段是采用靜態(tài)鏈接的。要對系統(tǒng)底層驅(qū)動清楚,也就是對CPU及相關(guān)的硬件有所了解.主要是32微處理器(上電啟動過程, download image的方式方法,讀寫ROM,地址空間分配,MMU,寄存器,中斷定義,.).參照硬件資料,多讀一些源碼會有所

18、幫助.Tornado 2 開發(fā)調(diào)試環(huán)境協(xié)議框圖主機開發(fā)(Host Development System)目標機(Target System)Tornado 工具 WTX協(xié)議通信<=>EditorProjectShellDebuggerBrowserWindviewTarget Server|Target AgentVxWorks Target SimulatorWDB協(xié)議通信<=>ApplicationVxWorks OSVxWorks Target (WDB)Agent兩個主要兩個協(xié)議WTX協(xié)議(Wind River Tool eXchange): 用于開發(fā)機內(nèi)部To

19、rnado工具與Target Server之間通信.WDB協(xié)議(Wind DeBug): 用于主機Target Server與目標機之間的通信.2.2 BSP主要文件目錄的組成及作用:Install_direction/target/config/All: 這個目錄下的文件是所有BSP文件共享的,不是特別需要不要更改里面的任何文件.configAll.h: 缺省定義了所有VxWorks的設(shè)置.如果不用缺省的設(shè)置,可在BSP目錄下的文件中用#define或#undef方式來更改設(shè)置.bootInit.c: 在后,完成Boot ROM的第二步初始化.程序從中的romInit()跳到這個文件中的ro

20、mStart().來執(zhí)行必要的解壓和ROM image的放置.bootConfig.c:完成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image的初始化代碼.Install/target/config/comps/src: .intasll/target/config/bspname:包含系統(tǒng)或硬件相關(guān)的BSP文件.Makefile 一些命令行控制images的生成,參見 BSP設(shè)置部分及生成下載READMEBSP發(fā)布紀錄,版本,總的文檔包括所有涉及CPU主板的設(shè)置及定義(includes,definations),參見 BSP設(shè)置文件及生成下載網(wǎng)絡(luò)

21、驅(qū)動的主要設(shè)置文件,主要對END驅(qū)動設(shè)置.匯編語言文件,是VxWorks Boot ROM和ROM based image的入口,參見 系統(tǒng)啟動部分匯編語言文件,程序員可以把自己的匯編函數(shù)放在這個文件里,在上層調(diào)用.VxWorks image的入口點_sysInit在這個文件里,是在RAM中執(zhí)行的第一個函數(shù)。 包含一些系統(tǒng)相關(guān)的函數(shù)例程,提供了一個board-level的接口,VxWorks和應(yīng)用程序可以以system-indepent的方式生成.這個文件還能包含目錄target/config/comps/src的驅(qū)動.可選文件用于Scsi設(shè)備設(shè)置和初始化.可選文件用于所有的串口設(shè)置和初始化.

22、ASIC文件包含VxWorks Boot ROM代碼VxWorks運行在目標機上,完整的,連結(jié)后的VxWorks二進制文件.VxWorks.sym完全的,連結(jié)后帶有符號表的VxWorks二進制文件完全的,連結(jié)后,standalone,帶有符號表的VxWorks二進制文件BSP用"make"來編譯連接生成(Created),而不是用Tornado的工具. BSP和應(yīng)用程序都可以在"make"或"tornade"上開發(fā)(developed) 。BSP被設(shè)置包括以下驅(qū)動:² 中斷控制interrupt controller

23、8; 計時器timer(sys/aux)² 串口UART(serial)² 顯示屏LCD² 鍵盤Keyboard(opt)² 觸摸屏touch-screen(opt).系統(tǒng)啟動順序VxWorks image 分為在ROM中運行和在RAM中運行兩種.兩者啟動順序的區(qū)別在于sysInit()函數(shù)的調(diào)用.該函數(shù)在RAM運行的VxWorks中初始化RAM.ROM中運行的VxWorks VxWorks在ROM中運行,即寫入ROM中的VxWorks是非壓縮的,不需要解壓,系統(tǒng)直接跳到ROM的首地址,運行VxWorks.注意:ROM運行的VxWorks并不支持所有的主

24、扳,應(yīng)以主扳手冊為準.文件中的romInit()->文件中的romStart()->文usrConfigusrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。Vxwroks在ROM 中運行的優(yōu)勢  VxWorksVxWorks image的data段復(fù)制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中執(zhí)行.。ROM中運行的VxWorks缺點是運行速度慢.RAM中運行的VxWorks VxWorks在RAM中運行,即寫入ROM中的Boot或VxWo

25、rks Image是壓縮的,需要先解壓copy所有的text和data到RAM的LOCAL_LOW_ADRS中,下面sysInit()主要是初始化RAM用的,系統(tǒng)直接跳到RAM的首地址,運行VxWorksusrInit()前面不壓縮,即romInit(),romStart()不能壓縮.啟動過程文件中的romInit()->文件中的中的sysInit()->文件中的usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。RAM運行的Boot或VxWorks image的text段或data段會從R

26、OM復(fù)制到RAM,在RAM中運行。其中usrRoot()是VxWorks啟動的第一個任務(wù),由它來初始化 driver,network等。BootROM image 的啟動過程最少的系統(tǒng)初始化,主要用于啟動裝載VxWorks image.一般有壓縮和不壓縮兩種形式,如bootrom和boot_uncmp.與VxWorks image的區(qū)別在于一個Bootrom調(diào)用bootConfig.c,而VxWorks調(diào)用usrConfig.c. 啟動順序文件中的romInit()->文件中的romStart()->文件bootConfig中的usrInit()->sysHwInit()-&

27、gt;usrKernelInit()->KernelInit(usrRoot,.)    其中是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,dis

28、able interrupt,put boot type on the 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

29、task completes the start up.sysHwInit()-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. u

30、srRoot() 初始化內(nèi)存分區(qū)表(memory partition library) ,初始化系統(tǒng)系統(tǒng)時鐘(system clock) 。初始化輸入輸出系統(tǒng)(I/O system)-可選 Create devices-可選設(shè)置網(wǎng)絡(luò)(Configure network)-可選激活WDB目標通信(Activate WDB agent)-可選調(diào)用程序(Activate application)VxWorks Image在RAM中解壓的位置RAM Low AddressRAM High AddressVxWorks運行的位置Boot image由ROM解壓后Copy的位置,即bootRom區(qū)BSP配

31、置文件及生成下載VxWorks 在ROM中的情況ROM 低高地址位ROM 低地址位壓縮的VxWorks Imgage沒有壓縮的romInit.s和romStart()在ROM的起始位置,系統(tǒng)power up后,從這個起始位開始執(zhí)行,即執(zhí)行romInit(),起始位置由硬件定義,一般為0x00000000注:淺藍色為整個VxWorks Image.BSP配置文件及生成下載2.4 Vxworks驅(qū)動概要總線類型PLB(processor local bus),VME,PCI,PCI-Express,RapidIO,Mii,Virtual,MF(multi function device bus),

32、USB,IIC,SPI.驅(qū)動可以提供的服務(wù)配置 配置資源例如ns83902VxbEnd.c 設(shè)備驅(qū)動中有這么一段devResourceGet (pHcf, "regWidth", HCF_RES_INT, (void *) &registerWidth;這里的registerwidth 就是資源配置參數(shù)vxbInstParamByNameGet (pInst, "jumboEnable", VXB_PARAM_INT32, &val);這句話的意思是支持大包處理,jumboenable.這個就是參數(shù)配置又如:中有這么一段LOCAL VXB

33、_PARAMETERS rtgParamDefaults ="rxQueue00", VXB_PARAM_POINTER, (void *)&rtgRxQueueDefault,"txQueue00", VXB_PARAM_POINTER, (void *)&rtgTxQueueDefault,"jumboEnable", VXB_PARAM_INT32, (void *)0,NULL, VXB_PARAM_END_OF_LIST, NULL;內(nèi)存管理系統(tǒng)啟動過程中分配內(nèi)存。 當系統(tǒng)早期啟動的過程中,那些最初被初始化的

34、設(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)存,一旦系統(tǒng)完成初始化,就可以使用標準的內(nèi)存分配哈數(shù)進行分配。malloc( ), calloc( ), memPartAlloc( ),這里怎么沒有memalign()硬件訪問讀寫硬件寄存器vxbRead8( ) vxbRead16( ) vxbR

35、ead32( ) vxbRead64( ) vxbWrite8( ) vxbWrite16( ) vxbWrite32( ) vxbWrite64( )使用vxbus 訪問寄存器的宏定義在下面的路徑installDir/vxWorks-6.x/target/src/hwif/h/vxbus/vxbAccess.h 采用vxbRegMap( ). 進行映射/* find the memory mapped window for the device registers */for (i = 0; i < VXB_MAXBARS; i+)if (pInst->regBaseFlagsi

36、 = VXB_REG_MEM)break;pDrvCtrl->feiBar = pInst->pRegBasei; /* store the base address */vxbRegMap (pInst, i, &pDrvCtrl->feiHandle); /* map the window */這段程序完成的功能是首先查找空間,找到VXB_REG_MEM 時,跳出,將地址存儲到【pDrvCtrl 】中,同時調(diào)用函數(shù)完成映射,返回句柄,供繼續(xù)讀寫用。中斷處理vxbIntConnect( ) vxbIntDisconnect( ) vxbIntEnable( ) vx

37、bIntDisable( )同步任務(wù)水平的同步采用信號量(這里說mux),spinlock,中斷鎖。中斷水平的同步采用信號量(mux),添加item 到消息隊列。當使用后者時,在ISR 中使用msgsend 時,timeout應(yīng)該為zero。 中斷水平的同步采用中斷鎖 intCpulock ,unCpuLockkey = intCpuLock ();/* access shared data structures. */intCpuUnlock (key); 注意 雖然中斷鎖很簡單,很有效,但是現(xiàn)在不怎么使用中斷鎖了,因為以下兩個原因1. 增加了系統(tǒng)開銷。2. 在多個CPU 或vxwroks

38、SMP 模式下中斷鎖不起作用。第3章 vxWorks 網(wǎng)絡(luò)驅(qū)動開發(fā)驅(qū)動說明風河早期的驅(qū)動采用legacy driver ,在早期的版即vxWorks5.x 中使用,在新的版本中已經(jīng)不再提供legacy driver了,特別是使用SMP 的用戶,風河強烈建議采用vxbus模型的驅(qū)動。驅(qū)動開發(fā)可利用到的資源包含網(wǎng)絡(luò)驅(qū)動,總線控制,定時器驅(qū)動,串行設(shè)備驅(qū)動。installDir/vxWorks-6.xinstallDir/vxWorks-6.xinstallDir/vxWorks-6.xinstallDir/vxWorks-6.x關(guān)于定時器驅(qū)動installDir/vxWorks-6.x這里的驅(qū)動采

39、用vxbus 模型開發(fā),是從legacy driver遷移到vxbus的。installDir/vxWorks-6.x提供了PPC8260 的定時器驅(qū)動,采用legacydriver開發(fā)。驅(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,及其板上的flash 設(shè)備,ATA 盤,串行ata 盤,scsi 盤,usb flash 盤等。路徑:install

40、Dir/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ū)動installDir/vxWorks-6.x/target/src/hwif/timer定時器驅(qū)動的作用:1. 告訴CP

41、U 某事件已經(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/vxWorks-6.x/target/src/hwif/busCtlr作用: 總線控制器確定系統(tǒng)當前是那種總線在工

42、作。2.總線控制器負責配置下行設(shè)備,使之能夠工作。3.總線控制器負責管理地址映射。USB 驅(qū)動 USB 主機設(shè)配驅(qū)動installDir/vxWorks-6.x/target/src/hwif/busCtlr/usb/hcdUSB 類驅(qū)動installDir/vxWorks-6.x/target/src/drv/usbInterrupt Controller Drivers(中斷控制器驅(qū)動) 作用:當設(shè)備產(chǎn)生中斷時,中斷控制器負責將中斷傳遞個處理器,并且保證其他中斷源不再送往CPU當其正在處理當前中斷時。installDir/vxWorks-6.x/target/src/hwif/intCtl

43、rMultifunction 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/D D/A要寫驅(qū)動,首先要知道驅(qū)動文件所在位置,這里有三個路徑存放與驅(qū)動有關(guān)的文件installDir/vxWorks

44、-6.x/target/3rdpartyVxBus model device drivers written by third party developers that areinstalled as add-ons to an existing VxWorks installation.installDir/vxWorks-6.x/target/src/hwifDrivers written in compliance with the VxBus device model, distributed and supported by Wind River, and provided as

45、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 fileinstallDir/vxWorks-6.x/target/src/hwifThird-party drivers are fo

46、und 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ā)的一般流程。知道在系統(tǒng)初始化過程系統(tǒng)是如何對網(wǎng)絡(luò)驅(qū)動進行初始化的,包括網(wǎng)絡(luò)驅(qū)動的聲明,注冊等。在本章節(jié)中,讀者要重點關(guān)注與網(wǎng)絡(luò)驅(qū)動有關(guān)

47、的頭文件,源文件(對于命名中有end這樣字眼的程序要多加留意),可以仔細研讀,發(fā)現(xiàn)其中的一般性。最后結(jié)合風河代碼,給出一款網(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的縮寫,是一種連接機制。其他媒介還有SGMII,GMII ,PLB 等等??梢酝ㄟ^配置MAC 相關(guān)的寄存器實現(xiàn)。2. Vworks 下網(wǎng)絡(luò)驅(qū)動分為END

48、 模型驅(qū)動和BSD 模型驅(qū)動?,F(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 是在應(yīng)用層調(diào)用。起始在vxworks下表現(xiàn)為一種文件。通過socket在不同進程之間傳遞信息。Socket 的發(fā)送接收功能,

49、說到底最后還是調(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é)議而增加的一層。它主要用于管理底層的多種硬件的設(shè)備驅(qū)動,向上層不同協(xié)議提供統(tǒng)一的接口,降低了上層協(xié)議與底層物理硬件的藕合,使得網(wǎng)絡(luò)驅(qū)動和上層協(xié)議彼此保持獨立,既方便在現(xiàn)有

50、硬件基礎(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)用,如當上層使用該網(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)存緩沖,并且管理這些緩沖也需要相應(yīng)的函數(shù)。VxWorks提供了netBufLib函數(shù)庫用于創(chuàng)建和管理網(wǎng)絡(luò)設(shè)備用到的內(nèi)存緩沖池,網(wǎng)絡(luò)設(shè)備驅(qū)動可以直接使用

51、也可以在此基礎(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ù)。如果要裝載END 設(shè)備,系統(tǒng)必須調(diào)用muxDevLoad()函數(shù)。(2).muxDevStart()啟動設(shè)備函數(shù)(3).muxBi

52、nd()muxBind()可以將協(xié)議綁定到指定的END 設(shè)備上。其調(diào)用過程是系統(tǒng)調(diào)用ipAttach()函數(shù),而該函數(shù)調(diào)用muxBind()函數(shù),綁定協(xié)議堆棧到MUX 上的一個指定的網(wǎng)絡(luò)接口。當一個網(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)絡(luò)任務(wù)的工作隊列;(2)創(chuàng)建tNetTask 任務(wù)來處理網(wǎng)絡(luò)任務(wù)工作隊列的條目;(3)調(diào)用muxDevLoad()裝載指定的網(wǎng)絡(luò)

53、驅(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 指定

54、的設(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) 用戶調(diào)用write()函數(shù),通過套接字訪問網(wǎng)絡(luò)。(2) 網(wǎng)絡(luò)協(xié)議拷貝需要發(fā)送的數(shù)據(jù)到網(wǎng)絡(luò)緩沖區(qū)中,并調(diào)用協(xié)議驅(qū)動程序的發(fā)送程序。(3) 協(xié)議驅(qū)動程序調(diào)用mu

55、xSend()啟動發(fā)送循環(huán)。(4) muxSend()通過調(diào)用send()回調(diào)函數(shù),把緩沖區(qū)傳遞給END。(5) 數(shù)據(jù)發(fā)送程序把數(shù)據(jù)拷貝到設(shè)備緩沖區(qū)中,并把它放置到設(shè)備的發(fā)送隊列中。(6) 當產(chǎn)生發(fā)送中斷時,驅(qū)動程序的中斷服務(wù)程序調(diào)度程序丟棄已發(fā)送的數(shù)據(jù)包,徹底清理發(fā)送隊列。接收數(shù)據(jù)在VxWorks 網(wǎng)絡(luò)系統(tǒng)中,接收數(shù)據(jù)的流程如圖7。通過對圖7 進行分析,它主要包含以下幾個處理。(1)設(shè)備接收到數(shù)據(jù)包后直接把數(shù)據(jù)存放到預(yù)先分配的簇中。(2)當接收到中斷時,驅(qū)動程序的中斷服務(wù)程序調(diào)度任務(wù)級接收程序進行如下操作。clBlk 結(jié)構(gòu)和簇連接;mBlk 和clBlk 連接;最后構(gòu)成緩沖區(qū)。通過調(diào)用rec

56、eiveRtn()函數(shù),把緩沖區(qū)傳遞給更高級別的協(xié)議。(3)muxReceive()調(diào)用協(xié)議的stackRcvRtn()函數(shù),把成列的緩沖區(qū)傳遞給應(yīng)用。用戶使用read()函數(shù),通過套接字訪問網(wǎng)絡(luò)中的成列緩沖區(qū)驅(qū)動程序的中斷處理中斷處理函數(shù)fei82557INT()處理設(shè)備中斷。根據(jù)中斷狀態(tài)調(diào)用相應(yīng)的中斷處理程序,如接收終端程序、發(fā)送中斷程序等。當網(wǎng)絡(luò)接口產(chǎn)生中斷時,系統(tǒng)調(diào)用中斷服務(wù)程序。為了將中斷阻塞減到最小,中斷驅(qū)動程序只處理那些需要最小時間的工作,把其他耗時的任務(wù)排列到網(wǎng)絡(luò)任務(wù)的工作隊列中。為了排列任務(wù)級的包接收處理工作,網(wǎng)絡(luò)驅(qū)動程序中斷服務(wù)程序必須調(diào)用netJobAdd()函數(shù)。在調(diào)用netJobAdd()函數(shù)時,應(yīng)當指定任務(wù)級處理數(shù)據(jù)包的驅(qū)動程序入口。然后由netJobAdd()把函數(shù)指派到網(wǎng)絡(luò)系統(tǒng)任務(wù)tNetTask 的工作隊列中。VxWorks 通過tNetTask 處理任務(wù)級的網(wǎng)絡(luò)處理。tNetTask 調(diào)用隊列中處理程序如下:(1)包接收程序:把接收到的數(shù)據(jù)包上傳到網(wǎng)絡(luò)緩沖區(qū)的堆棧中,通過一個調(diào)用上傳給MUX。(2)釋放所有發(fā)送幀程序:程序調(diào)用netClFree()函數(shù)釋放發(fā)送緩沖區(qū)中所有已經(jīng)發(fā)送的數(shù)據(jù)幀。協(xié)議層執(zhí)行下列入口點s

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論