下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VxWorks下網(wǎng)卡驅(qū)動程序的開發(fā)摘要:本文首先從整體上分析 VxWorks網(wǎng)卡驅(qū)動程序的原理和結(jié)構(gòu),然后深入地分析Rtl8139C網(wǎng)卡驅(qū)動程序的結(jié)構(gòu)以及實現(xiàn),本文對于VxWorks下的同類開發(fā)也有一定參考作用。關(guān)鍵詞:網(wǎng)卡驅(qū)動程序; VxWorks ;嵌入式系統(tǒng);Tornado1引言VxWorks是當前應(yīng)用十分廣泛的嵌入式實時操作系統(tǒng),而網(wǎng)卡在基于VxWorks的開發(fā)中有著極其重要的作用。Tornado是VxWorks的開發(fā)工具,它本身支持的網(wǎng)卡不多。本文涉及到的網(wǎng)卡是 Realtek公司的 8139C PCI 網(wǎng)卡,相關(guān)的硬件資料有:RTL8139C(L) data sheet 和 Rtl
2、8139 Programming Guide。需要實現(xiàn)的是 RTL8139C END driver 。2 VxWorks 簡介VxWorks是由WRS(Wind River System Inc.)公司開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的實時操作系 統(tǒng),支持廣泛的網(wǎng)絡(luò)通信協(xié)議,并能夠根據(jù)用戶的需求進行組合。其開放式的結(jié)構(gòu)和對工業(yè)標準的支持使 開發(fā)者只需做最少的工作即可設(shè)計出有效的適合于不同用戶要求的系統(tǒng)。VxWorks是一種功能強大而且比較復(fù)雜的操作系統(tǒng),VxWorks只占用了很小的存儲空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運行。所以僅僅依靠人工編程調(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)啟動之后運行。網(wǎng)卡驅(qū)動程序一般 采用前一種方式。3 VxWorks的網(wǎng)絡(luò)模型網(wǎng)卡在VxWorks開發(fā)中是極其重要的。在開發(fā)機 -目標機模式中,通過網(wǎng)線進行下載調(diào)試是Tornado調(diào)試器最常用最方便的方式。VxWorks的優(yōu)秀的實時性能使其在網(wǎng)絡(luò)通信當中具有極廣泛的應(yīng)用,如網(wǎng)絡(luò)交換機、路由器的軟件系統(tǒng)等。網(wǎng)卡驅(qū)動程序在整
4、個 VxWorks網(wǎng)絡(luò)接口中的角色可以從下圖中看出。眈 1 迅訪冋htAp : /inrw. Slkai fa. z omNetwork Interface Comparisoniipplicution- ,丄 -sovkcistxrkelstxrkeipn'iocolproiouolprobKotprotocolprotocolprotocol圖1網(wǎng)絡(luò)接口結(jié)構(gòu)整個網(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ū)動程序進行了分層,其中老式的BSD4.3驅(qū)動程序的功能,現(xiàn)在可以由協(xié)議
5、層驅(qū)動、MUX層和END驅(qū)動實現(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ū)動程序的實現(xiàn)和移植更加方便。而且,VxWorks為編寫網(wǎng)卡增強型驅(qū)動程序( Enhanced NetworkDrivers)提供了很好的接口和規(guī)范。4 Rtl8139C END 驅(qū)動程序4.1 PCI局部總線本文涉及到的網(wǎng)卡是 Realtek公司的8139C PCI網(wǎng)卡,作為一個PCI設(shè)備,在設(shè)備的初始化階段, 它和 一般的PCI設(shè)備沒有什么不同。每一個PCI局部總線目標設(shè)備都由一個配置寄存器空間,它使目標設(shè)備的配置十分簡
6、便。配置空間是一 個容量為256字節(jié)并具有特定記錄結(jié)構(gòu)或模型的地址空間。該空間有分為頭標區(qū)和設(shè)備有關(guān)區(qū)兩部分。設(shè) 備在每個區(qū)中只實現(xiàn)必要的和與之相配的寄存器。一個設(shè)備的配置空間不僅在系統(tǒng)自舉時可以訪問,而且 在其他時間內(nèi)也是可以訪問的。4.2數(shù)據(jù)包結(jié)構(gòu)VxWorks MUX 層的數(shù)據(jù)包采用的是 mBIk - cIBIk-cluster結(jié)構(gòu),如圖。發(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ù)。歡迎訪冋Slkai
7、 fa. comNetwork Packets as Buffer Chainskrl p水 krl Z圖2網(wǎng)絡(luò)數(shù)據(jù)包結(jié)構(gòu)圖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)卡的探測模塊為sysRtl8139Pcilnit模塊,利用的是 RTL8139C的廠商標識和設(shè)備標識,在所有的PCI設(shè) 備中判斷有幾
8、塊這樣的網(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 中)的處理來實現(xiàn)的。因此,可以將一個自定義的入口函數(shù)加到endDevTbl ,這樣就可以使驅(qū)動程序在合適的時間對設(shè)備進行初始化。驅(qū)動程序的入口分為兩個步驟,他們分別是 sysRtl8139EndLoad 模塊和 Rtl8139EndLoad 模塊。 sysRtl813
9、9EndLoad 獲得 sysRtl8139PciInit 探測到網(wǎng)卡硬件參數(shù),并且兩次調(diào)用 Rtl8139EndLoad 模塊。 Rtl8139EndLoad 模塊第一次被調(diào)用時只是為了返回設(shè)備名稱。在 Rtl8139EndLoad 入口函數(shù)中,解析參數(shù),為網(wǎng)卡的 DMA 工作方式分配一定大小的空間,寫寄存器, 準備工作。這之后,網(wǎng)卡的開始工作和停止,以及其他設(shè)置完全由MUX 層管理,驅(qū)程只需要將一系列模塊的指針傳遞給它。這些模塊按照 MUX 層的要求是一個 NET_FUNCS 結(jié)構(gòu),如下所示。 LOCAL NET_FUNCS rtlFuncTable =(FUNCPTR)rtl8139St
10、art, /* start func. */(FUNCPTR)rtl8139Stop, /* stop func. */(FUNCPTR)rtl8139Unload, /* unload func. */(FUNCPTR)rtl8139Ioctl, /* ioctl func. */(FUNCPTR)rtl8139Send, /* send func. */(FUNCPTR)rtl8139MCastAddrAdd,/* multicast add func. */(FUNCPTR)rtl8139MCastAddrDel,/* multicast delete func. */(FUNCPTR)
11、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 in NET_BUFFER */ endEtherPacketAddrGet,/*
12、Get packet addresses. */;Rtl8139EndLoad 模塊是 rtl8139.c 中唯一的外部函數(shù),當程序流程到達這里的時候,已經(jīng)可以對網(wǎng)卡寄 存器讀寫,程序完全是對寄存器進行設(shè)置。在這個模塊中,首先判斷函數(shù)參數(shù),因為它被調(diào)用兩次。當確 定是第二次調(diào)用時,首先為驅(qū)動程序分配一個結(jié)構(gòu) RTL8139END_DEVICE ,用以存儲共享參數(shù)。然后解析 函數(shù)參數(shù),依據(jù)這些參數(shù)配置 RTL8139END_DEVICE 。接著,調(diào)用 rtl8139InitMem 模塊,為網(wǎng)卡分配所需 要的內(nèi)存,將這些參數(shù)寫進 RTL8139END_DEVICE 。這樣,網(wǎng)卡所需的資源齊全了。用
13、上層協(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)卡的工作方式,寫中斷屏蔽寄
14、存器,確定處理哪些中斷。最后,寫命令寄存器,使接 受和發(fā)送位有效。程序到此,就能產(chǎn)生中斷,并進行處理。當系統(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)寄存器,進行相應(yīng)的 處理。依據(jù) RTL8139 Programming Guide 中的說明,
15、若是發(fā)送中斷,無論成功與否,調(diào)用發(fā)送處理函數(shù), 若是接收中斷,開辟新的接受任務(wù),這么做是因為中斷處理函數(shù)運行在系統(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)的寄存器取出當前數(shù)據(jù)包的地址,首先分析數(shù)據(jù)包頭部,包括數(shù)據(jù)包的接收狀態(tài)和 大小。如果是錯誤的狀態(tài),就使命令寄存器中的接收能位
16、失效,再使其有效,這可看作接收重啟,再重新 設(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)下的實現(xiàn)。 在分析過程中, 更多側(cè)重 PCI 網(wǎng)卡 END 驅(qū)動程序在 VxWorks 下實現(xiàn)的共性,包括必需的配置和步驟,比如 PCI 設(shè)備的相關(guān)工作以及 VxWorks 下 MUX 層的數(shù)據(jù)
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢民政職業(yè)學(xué)院《電工技術(shù)與電氣控制》2023-2024學(xué)年第一學(xué)期期末試卷
- 個性化高端導(dǎo)購服務(wù)2024協(xié)議
- 2024版在線教育平臺合作協(xié)議3篇
- 2024版反擔(dān)保協(xié)議二
- 二零二五版臨時用工崗位合同范本6篇
- 二零二五年度金融科技股票投資委托合同模板3篇
- 二零二五年度食品飲料個人物資采購合同參考文本6篇
- 四川職業(yè)技術(shù)學(xué)院《稅收理論與實務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版城市改造房屋拆遷掛靠管理合同3篇
- 2024美團商家入駐平臺數(shù)據(jù)共享及隱私保護協(xié)議3篇
- 公務(wù)員考試工信部面試真題及解析
- GB/T 15593-2020輸血(液)器具用聚氯乙烯塑料
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價標準
- 定量分析方法-課件
- 朱曦編著設(shè)計形態(tài)知識點
評論
0/150
提交評論