![VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/61015725-3345-49e8-801f-0a1619e512cb/61015725-3345-49e8-801f-0a1619e512cb1.gif)
![VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/61015725-3345-49e8-801f-0a1619e512cb/61015725-3345-49e8-801f-0a1619e512cb2.gif)
![VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/61015725-3345-49e8-801f-0a1619e512cb/61015725-3345-49e8-801f-0a1619e512cb3.gif)
![VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/14/61015725-3345-49e8-801f-0a1619e512cb/61015725-3345-49e8-801f-0a1619e512cb4.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)摘要:本文首先從整體上分析VxWorks 網(wǎng)卡驅(qū)動程序的原理和結(jié)構(gòu),然后深入地分析Rtl8139C網(wǎng)卡驅(qū)動程序的結(jié)構(gòu)以及實(shí)現(xiàn),本文對于VxWorks下的同類開發(fā)也有一定參考作用。關(guān)鍵詞:網(wǎng)卡驅(qū)動程序;VxWorks;嵌入式系統(tǒng);Tornado1引言 VxWorks是當(dāng)前應(yīng)用十分廣泛的嵌入式實(shí)時操作系統(tǒng),而網(wǎng)卡在基于VxWorks的開發(fā)中有著極其重要的作用。Tornado 是VxWorks的開發(fā)工具,它本身支持的網(wǎng)卡不多。本文涉及到的網(wǎng)卡是Realtek 公司的8139C PCI網(wǎng)卡,相關(guān)的硬件資料有:RTL8139C(L) data sheet 和 Rtl81
2、39 Programming Guide 。需要實(shí)現(xiàn)的是RTL8139C END driver 。2 VxWorks簡介 VxWorks是由WRS(Wind River System Inc.)公司開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的實(shí)時操作系統(tǒng),支持廣泛的網(wǎng)絡(luò)通信協(xié)議,并能夠根據(jù)用戶的需求進(jìn)行組合。其開放式的結(jié)構(gòu)和對工業(yè)標(biāo)準(zhǔn)的支持使開發(fā)者只需做最少的工作即可設(shè)計出有效的適合于不同用戶要求的系統(tǒng)。 VxWorks是一種功能強(qiáng)大而且比較復(fù)雜的操作系統(tǒng),VxWorks只占用了很小的存儲空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運(yùn)行。所以僅僅依靠人工編程調(diào)試,很難發(fā)揮它的功能并設(shè)計出可靠、高效的
3、嵌入式系統(tǒng),必須要有與之相適應(yīng)的開發(fā)工具。TornadoII是為開發(fā)VxWorks應(yīng)用系統(tǒng)提供的集成開發(fā)環(huán)境。 VxWorks的優(yōu)秀特性為編寫應(yīng)用程序和設(shè)備驅(qū)動程序提供了極大的便利。在VxWorks下,設(shè)備驅(qū)動程序既可以嵌入到內(nèi)核中隨系統(tǒng)一起啟動,也可以作為可加載模塊在系統(tǒng)啟動之后運(yùn)行。網(wǎng)卡驅(qū)動程序一般采用前一種方式。3 VxWorks的網(wǎng)絡(luò)模型 網(wǎng)卡在VxWorks開發(fā)中是極其重要的。在開發(fā)機(jī)-目標(biāo)機(jī)模式中,通過網(wǎng)線進(jìn)行下載調(diào)試是Tornado調(diào)試器最常用最方便的方式。VxWorks的優(yōu)秀的實(shí)時性能使其在網(wǎng)絡(luò)通信當(dāng)中具有極廣泛的應(yīng)用,如網(wǎng)絡(luò)交換機(jī)、路由器的軟件系統(tǒng)等。 網(wǎng)卡驅(qū)動程序在整個Vx
4、Works網(wǎng)絡(luò)接口中的角色可以從下圖中看出。 整個網(wǎng)絡(luò)接口呈層次結(jié)構(gòu),用戶網(wǎng)絡(luò)應(yīng)用程序通過socket接口調(diào)用TCP/IP協(xié)議層系列軟件,網(wǎng)卡驅(qū)動程序則為協(xié)議軟件提供對網(wǎng)卡的訪問。VxWorks也為網(wǎng)卡驅(qū)動程序進(jìn)行了分層,其中老式的BSD4.3驅(qū)動程序的功能,現(xiàn)在可以由協(xié)議層驅(qū)動、MUX層和END驅(qū)動實(shí)現(xiàn)。而且,工作于BSD的以太網(wǎng)網(wǎng)卡不支持系統(tǒng)級調(diào)試,而工作于END的網(wǎng)卡同時支持任務(wù)級調(diào)試和系統(tǒng)級調(diào)試。很顯然,網(wǎng)卡驅(qū)動程序的層次結(jié)構(gòu)使網(wǎng)卡驅(qū)動程序的實(shí)現(xiàn)和移植更加方便。而且,VxWorks 為編寫網(wǎng)卡增強(qiáng)型驅(qū)動程序(Enhanced Network Drivers)提供了很好的接口和規(guī)范。4
5、Rtl8139C END驅(qū)動程序4.1 PCI局部總線 本文涉及到的網(wǎng)卡是Realtek 公司的8139C PCI網(wǎng)卡,作為一個PCI設(shè)備,在設(shè)備的初始化階段,它和一般的PCI設(shè)備沒有什么不同。 每一個PCI局部總線目標(biāo)設(shè)備都由一個配置寄存器空間,它使目標(biāo)設(shè)備的配置十分簡便。配置空間是一個容量為256字節(jié)并具有特定記錄結(jié)構(gòu)或模型的地址空間。該空間有分為頭標(biāo)區(qū)和設(shè)備有關(guān)區(qū)兩部分。設(shè)備在每個區(qū)中只實(shí)現(xiàn)必要的和與之相配的寄存器。一個設(shè)備的配置空間不僅在系統(tǒng)自舉時可以訪問,而且在其他時間內(nèi)也是可以訪問的。4.2數(shù)據(jù)包結(jié)構(gòu) VxWorks MUX層的數(shù)據(jù)包采用的是mBlkclBlk-cluster 結(jié)構(gòu)
6、,如圖。發(fā)送時,網(wǎng)卡發(fā)送模塊處理的是這樣的結(jié)構(gòu);接收數(shù)據(jù)時,網(wǎng)卡還得將數(shù)據(jù)通過這樣的結(jié)構(gòu)傳遞給上層協(xié)議。不過,這一切Vxworks 都有相應(yīng)的規(guī)范和函數(shù)。另外,mBlk和clBlk可以由netpool 結(jié)構(gòu)管理,VxWorks 提供一系列接口函數(shù)。圖2 網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)4.3驅(qū)動程序的結(jié)構(gòu)以及流程1、網(wǎng)卡的探測以及入口 VxWorks BSP在syslib.c中探測并初始化系統(tǒng)中的PCI設(shè)備,檢測設(shè)備的I/O映射地址,內(nèi)存映射地址以及中斷向量和級別,這些硬件參數(shù)對于主芯片的讀寫和連接中斷起到至關(guān)重要的作用。因此,在這里加入8139C 網(wǎng)卡的探測模塊。然后將探測到的參數(shù)傳遞給驅(qū)動程序入口函數(shù)。網(wǎng)卡
7、的探測模塊為sysRtl8139PciInit模塊,利用的是RTL8139C的廠商標(biāo)識和設(shè)備標(biāo)識,在所有的PCI設(shè)備中判斷有幾塊這樣的網(wǎng)卡,得到它們的功能號,總線號和設(shè)備號,然后配置它的PCI配置空間,將網(wǎng)卡寄存器映射。最后得到網(wǎng)卡I/O映射基地址和Mem基地址以及中斷向量和級別。2、入口函數(shù) END driver與系統(tǒng)的接口是MUX層,BSP對于網(wǎng)卡設(shè)備的驅(qū)動是通過MuxDevLoad()對endDevTbl(configNet.h中)的處理來實(shí)現(xiàn)的。因此,可以將一個自定義的入口函數(shù)加到endDevTbl,這樣就可以使驅(qū)動程序在合適的時間對設(shè)備進(jìn)行初始化。 驅(qū)動程序的入口分為兩個步驟,他們分
8、別是sysRtl8139EndLoad模塊和Rtl8139EndLoad模塊。sysRtl8139EndLoad獲得sysRtl8139PciInit 探測到網(wǎng)卡硬件參數(shù),并且兩次調(diào)用Rtl8139EndLoad模塊。Rtl8139EndLoad模塊第一次被調(diào)用時只是為了返回設(shè)備名稱。 在Rtl8139EndLoad入口函數(shù)中,解析參數(shù),為網(wǎng)卡的DMA工作方式分配一定大小的空間,寫寄存器,準(zhǔn)備工作。這之后,網(wǎng)卡的開始工作和停止,以及其他設(shè)置完全由MUX 層管理,驅(qū)程只需要將一系列模塊的指針傳遞給它。這些模塊按照MUX 層的要求是一個 NET_FUNCS 結(jié)構(gòu),如下所示。LOCAL NET_FU
9、NCS rtlFuncTable = (FUNCPTR)rtl8139Start, /* start func. */(FUNCPTR)rtl8139Stop, /* stop func. */(FUNCPTR)rtl8139Unload, /* unload func. */(FUNCPTR)rtl8139Ioctl, /* ioctl func. */ (FUNCPTR)rtl8139Send, /* send func. */ (FUNCPTR)rtl8139MCastAddrAdd,/* multicast add func. */(FUNCPTR)rtl8139MCastAddrDe
10、l,/* multicast delete func. */ (FUNCPTR)rtl8139MCastAddrGet,/* multicast get fun. */ (FUNCPTR)rtl8139PollSend, /* polling send func. */ (FUNCPTR)rtl8139PollReceive, /* polling receive func. */ endEtherAddressForm, /* put address info into a NET_BUFFER */endEtherPacketDataGet, /* get pointer to data
11、in NET_BUFFER */endEtherPacketAddrGet,/*Get packet addresses. */; Rtl8139EndLoad 模塊是rtl8139.c中唯一的外部函數(shù),當(dāng)程序流程到達(dá)這里的時候,已經(jīng)可以對網(wǎng)卡寄存器讀寫,程序完全是對寄存器進(jìn)行設(shè)置。在這個模塊中,首先判斷函數(shù)參數(shù),因?yàn)樗徽{(diào)用兩次。當(dāng)確定是第二次調(diào)用時,首先為驅(qū)動程序分配一個結(jié)構(gòu)RTL8139END_DEVICE,用以存儲共享參數(shù)。然后解析函數(shù)參數(shù),依據(jù)這些參數(shù)配置RTL8139END_DEVICE。接著,調(diào)用rtl8139InitMem模塊,為網(wǎng)卡分配所需要的內(nèi)存,將這些參數(shù)寫進(jìn)RTL813
12、9END_DEVICE。這樣,網(wǎng)卡所需的資源齊全了。用上層協(xié)議提供的函數(shù)END_OBJ_INIT和END_MIB_INIT,將RTL8139END_DEVICE 和驅(qū)動程序模塊傳遞給上層協(xié)議。需要為網(wǎng)卡分配的內(nèi)存包括:接收區(qū),發(fā)送區(qū),cluster區(qū),mBlk,clBlk和管理它們的netpool。這些都是在Rtl8139InitMem模塊中完成。3、網(wǎng)卡的啟動和關(guān)閉 網(wǎng)卡要開始工作,還得依賴MUX層調(diào)用rtl8139Start模塊,該模塊將中斷向量和處理函數(shù)連接在一起。然后調(diào)用硬件初始化rtl8139HwStart模塊,在這個模塊中,設(shè)置接收地址寄存器,使其能管理接受區(qū),寫設(shè)置寄存器,設(shè)置網(wǎng)
13、卡的工作方式,寫中斷屏蔽寄存器,確定處理哪些中斷。最后,寫命令寄存器,使接受和發(fā)送位有效。程序到此,就能產(chǎn)生中斷,并進(jìn)行處理。當(dāng)系統(tǒng)要退出或者其他原因時,就得關(guān)閉網(wǎng)卡。系統(tǒng)是調(diào)用通過MUX層中的rtl8139Stop模塊完成。4、中斷處理程序 RTL8139C 有一個中斷狀態(tài)寄存器和一個中斷屏蔽寄存器,它們對應(yīng)位意義相同。中斷狀態(tài)寄存器反映了網(wǎng)卡能產(chǎn)生的幾種中斷。一旦有中斷發(fā)生,中斷處理函數(shù)首先屏蔽中斷,再分析中斷狀態(tài)寄存器,調(diào)用相應(yīng)的處理函數(shù) 只要中斷發(fā)生,系統(tǒng)調(diào)用中斷處理函數(shù)。中斷處理函數(shù)的主要功能是分析中斷狀態(tài)寄存器,進(jìn)行相應(yīng)的處理。依據(jù)RTL8139 Programming Guide
14、 中的說明,若是發(fā)送中斷,無論成功與否,調(diào)用發(fā)送處理函數(shù),若是接收中斷,開辟新的接受任務(wù),這么做是因?yàn)橹袛嗵幚砗瘮?shù)運(yùn)行在系統(tǒng)級,而接收處理較復(fù)雜耗時,所以采用系統(tǒng)函數(shù)netJobAdd開辟新的任務(wù)。而簡單的處理就直接在中斷處理函數(shù)中完成,包括發(fā)送完后產(chǎn)生的中斷。 由于,處理函數(shù)在執(zhí)行的過程中,新的中斷可能出現(xiàn),而此時中斷已屏蔽,但各自的狀態(tài)位依然變化。因此,在中斷處理函數(shù)中采用循環(huán)結(jié)構(gòu),直到中斷狀態(tài)寄存器表明在處理過程中沒有新的中斷發(fā)生。5、數(shù)據(jù)接收和發(fā)送 接收數(shù)據(jù)時,從相應(yīng)的寄存器取出當(dāng)前數(shù)據(jù)包的地址,首先分析數(shù)據(jù)包頭部,包括數(shù)據(jù)包的接收狀態(tài)和大小。如果是錯誤的狀態(tài),就使命令寄存器中的接收能
15、位失效,再使其有效,這可看作接收重啟,再重新設(shè)置與接收相關(guān)的寄存器。如果接收的數(shù)據(jù)包正常,接收處理函數(shù)就得按照數(shù)據(jù)包的大小將數(shù)據(jù)包拷貝到cluster 區(qū)(Rtl8139InitMem 模塊中分配),用mBlk-clBlk-cluster結(jié)構(gòu)傳遞給上層協(xié)議,并刷新寄存器使其指向下一個數(shù)據(jù)包。然后,讀命令寄存器,判斷是否接收完畢,否則循環(huán)。發(fā)送數(shù)據(jù)時,由于Rtl8139采用四個描述符寄存器和四個狀態(tài)寄存器。所以在使用它們前首先判斷是否有空閑的寄存器,如果沒有,就得等待一段時間。在這段時間里,如果有寄存器空閑出來,就開始發(fā)送數(shù)據(jù),否則退出。發(fā)送時,只要將上層協(xié)議傳遞過來的mBlk-clBlk-cluster中的cluster數(shù)據(jù)拷貝到發(fā)送區(qū),寫描述符寄存器就可。而記錄每個描述符寄存器使用情況,就使用RTL8139END_DEVICE 結(jié)構(gòu)中的一個數(shù)組。如果發(fā)送完畢,無論成功與否,都得讓描述符空閑出來。5結(jié)束語 本文具體的分析了Rtl8139C網(wǎng)卡驅(qū)動程序在VxWorks操作系統(tǒng)下的實(shí)現(xiàn)。在分析過程中,更多側(cè)重PCI網(wǎng)卡END驅(qū)動程序在VxWorks下實(shí)現(xiàn)的共性,包括必需的配置和步驟,比如PCI設(shè)備的相關(guān)工作以及VxWorks下MUX層的數(shù)據(jù)包結(jié)構(gòu)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《陳涉世家筆記》課件
- 《霧化吸入醫(yī)學(xué)》課件
- 2025年西雙版納貨運(yùn)上崗證考試題庫答案
- 我國學(xué)前教育質(zhì)量監(jiān)測的現(xiàn)實(shí)困境及發(fā)展對策
- 急診??谱o(hù)士角色認(rèn)知的研究進(jìn)展
- 月度團(tuán)隊(duì)協(xié)作報告模板
- 智能家居產(chǎn)品路演模板
- 祝福追夢人生日模板
- 小學(xué)家委會活動方案
- 怎么申請死亡申請書
- 中建雨季專項(xiàng)施工方案
- 《我國個人所得稅制下稅收征管問題研究》
- 建筑工程三通一平技術(shù)方案
- 綠化養(yǎng)護(hù)工安全培訓(xùn)
- DB21-T 1720-2017海水源熱泵系統(tǒng)工程技術(shù)規(guī)程
- 組長競選課件教學(xué)課件
- 《基于UTAUT2模型的虛擬學(xué)術(shù)社區(qū)用戶持續(xù)使用意愿影響因素研究》
- 2022年公務(wù)員多省聯(lián)考《申論》真題(遼寧A卷)及答案解析
- 2024 ESC慢性冠脈綜合征指南解讀(全)
- 消防設(shè)施操作員(初級)題庫與參考答案
- 北師大版四年級下冊數(shù)學(xué)第一單元測試卷帶答案
評論
0/150
提交評論