国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于ARM9的VxWorks增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)計(jì)

發(fā)布時(shí)間:2010-4-7 21:46    發(fā)布者:我芯依舊
VxWorks是美國風(fēng)河公司(Wind River)推出的具備網(wǎng)絡(luò)功能的實(shí)時(shí)嵌入式操作系統(tǒng)。VxWorks以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛應(yīng)用于航海、軍事、航窄、通信等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中。vxWorks在各種CPU平臺(tái)上提供了統(tǒng)一的編程接口和一致的運(yùn)行特性,盡可能屏蔽不同CPU之間的底層差異。所以,VxWorks可以方便地移植到不同的CPU平臺(tái)上,如ARM、PowerPC、x86等。

增強(qiáng)犁網(wǎng)絡(luò)驅(qū)動(dòng)(Enhanced Network Driver,END)是一個(gè)使用MUX(多路復(fù)用)功能來與網(wǎng)絡(luò)協(xié)議進(jìn)行通信的數(shù)據(jù)鏈路層驅(qū)動(dòng)。本文主要研究基于sumsang公司S3C2410A處理器的網(wǎng)絡(luò)硬件環(huán)境下VxWorks嵌入式操作系統(tǒng)增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)程序的構(gòu)建和編寫。

1 S3C2410A的網(wǎng)絡(luò)硬件平臺(tái)

S3C2410A微處理器是sumsang半導(dǎo)體公司為手持設(shè)備等相關(guān)應(yīng)用設(shè)計(jì)的一款低功耗、高集成度的處理器,包含一個(gè)ARM920T芯片。S3C2419A內(nèi)嵌的CS8900A作為主控芯片的以太網(wǎng)模塊,是一款低成本的以太局域網(wǎng)控制器,包含片上RAM、10Base-T傳輸和接收濾波器,以及帶24mA驅(qū)動(dòng)的直接ISA總線接口,還集成了一個(gè)10Mbps的以太網(wǎng)收發(fā)器.以及所有用于和局域網(wǎng)通信的模擬及數(shù)字電路,通過一個(gè)電磁隔離器E2023直接和局域網(wǎng)相連。RJ45為網(wǎng)絡(luò)接頭,可連接10M/100M的網(wǎng)絡(luò)集線器。CS8900A工作在全艤工模式下.支持包括用于流控的暫停操作的IEEE802.3MAC控制層協(xié)議。其硬件原理圖如圖1所示。

2 增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)END

VxWorks支持兩種模式的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序,即BSD 4.3網(wǎng)絡(luò)驅(qū)動(dòng)程序和可裁剪的增強(qiáng)型網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)SENS。SENS(Sealable Enhanced Network Stack)是由BSD 4.3 TCP/IP網(wǎng)絡(luò)協(xié)議棧發(fā)展而來的,并包含了許多原協(xié)議棧沒有的協(xié)議。而且SENS在實(shí)現(xiàn)新的協(xié)議時(shí)增加了一些新特性,如在IP協(xié)議實(shí)現(xiàn)時(shí)增加了多播功能。為實(shí)現(xiàn)網(wǎng)絡(luò)接口程序可替換,WindRiver專為SENS設(shè)計(jì)了一種增強(qiáng)的網(wǎng)絡(luò)驅(qū)動(dòng)程序END。SENS模型包含3個(gè)部分:協(xié)議驅(qū)動(dòng)程序、多路復(fù)用接口(MUX)和增強(qiáng)的網(wǎng)絡(luò)驅(qū)動(dòng)(END)。在驅(qū)動(dòng)程序和上層協(xié)議之間,SENS模型提供了協(xié)議驅(qū)動(dòng)層。在協(xié)議驅(qū)動(dòng)層和END驅(qū)動(dòng)層之間,SENS模型提供了MUX層,使其直接與END驅(qū)動(dòng)程序進(jìn)行交互。它們之間的結(jié)構(gòu)關(guān)系如圖2所示。


圖1 CS8900A硬件原理圖


圖2 網(wǎng)絡(luò)協(xié)議棧結(jié)構(gòu)圖

在BSD 4.3模型下,VxWorks網(wǎng)絡(luò)驅(qū)動(dòng)程序與協(xié)議緊密結(jié)合,它們依賴于彼此的數(shù)據(jù)結(jié)構(gòu);而在基于MUX模型下,網(wǎng)絡(luò)驅(qū)動(dòng)程序和協(xié)議之間沒有內(nèi)部交換數(shù)據(jù),它們只通過MUX間接相互作用。MUX接口的作用便是分解網(wǎng)絡(luò)驅(qū)動(dòng)程序和協(xié)議,使它們幾乎獨(dú)立。這種獨(dú)立使得添加新的驅(qū)動(dòng)程序和協(xié)議變得非常簡單。

3 END網(wǎng)絡(luò)驅(qū)動(dòng)程序的裝載和啟動(dòng)

在基于S3C2410A的VxWorks BSP設(shè)計(jì)中,configNet.h文件定義了一個(gè)END_TBL_ENTRY結(jié)構(gòu)的數(shù)組endDevTbl[],該數(shù)組將網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序的裝載函數(shù)cs8900EndLoad()入口點(diǎn)及相關(guān)參數(shù)添加到網(wǎng)絡(luò)設(shè)備表endDevTbl[]中。endDevTbl[]數(shù)組描述了系統(tǒng)所有網(wǎng)絡(luò)設(shè)備的裝載入口點(diǎn)及其相關(guān)參數(shù).其中的一個(gè)參數(shù)CS_LOAD_STRING進(jìn)行資源字符串的初始化工作。資源字符串的描述和加載程序的處理有關(guān),需要包含網(wǎng)卡基地址、中斷向量號(hào)、中斷號(hào)、偏移、配置值、MAC地址等。不同網(wǎng)卡的資源字符串有所不同,而且排列順序也沒有硬性的規(guī)定,只要提供的數(shù)據(jù)能滿足endLoad()的需要即可。

在使用編寫好的vxworks BSP引導(dǎo)操作系統(tǒng)時(shí),系統(tǒng)將執(zhí)行usrRoot()函數(shù)來實(shí)現(xiàn)以下功能:首先初始化網(wǎng)絡(luò)任務(wù)的工作隊(duì)列,然后調(diào)用tNetTask()任務(wù)來處理網(wǎng)絡(luò)任務(wù)工作隊(duì)列中的任務(wù)。tNetTask()通過調(diào)用muxDevLoad()來裝載網(wǎng)絡(luò)接口驅(qū)動(dòng),在tNetTask()中已經(jīng)定義了網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備的endLoad()接入點(diǎn),muxDevLoad()也要執(zhí)行endLoad()。endLoad()執(zhí)行設(shè)備初始化并返回一個(gè)名為END_OBJ的結(jié)構(gòu)體。MUX在END_OBJ上加一個(gè)指針,指向能夠?qū)?shù)據(jù)包向MUX上層發(fā)送的函數(shù)。然后MUX把返同的END_OBJ加入到END_OBJ結(jié)構(gòu)鏈表中。當(dāng)從muxDevLoad()返回后,網(wǎng)絡(luò)設(shè)備就準(zhǔn)備好可以使用了。設(shè)備裝載完成后,muxDevload()調(diào)用muxDevStart()啟動(dòng)函數(shù),該函數(shù)通過intConnect()和intEnable()實(shí)現(xiàn)中斷服務(wù)的注冊(cè)并打開中斷宏。當(dāng)有數(shù)據(jù)交換時(shí),打開中斷服務(wù)程序,調(diào)用排列網(wǎng)絡(luò)任務(wù)處理函數(shù)netJobAdd(),指派網(wǎng)絡(luò)系統(tǒng)任務(wù)tNeflask(),由tNetTask()數(shù)據(jù)接收和發(fā)送任務(wù)。其網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)程序安裝順序如圖3
所示。


圖3 END加載順序圖

在VxWorks中添加END網(wǎng)絡(luò)驅(qū)動(dòng),需要在文件config.h中添加#define INCLUDEEE_NETWORK和#define INCLUDE_END。在configNet.h中添加END驅(qū)動(dòng)的入口函數(shù)#define LOAD_FUNC_0 cs8900aLoad和一些相關(guān)的初始化字符串。這樣就會(huì)在生成的BSP中包含END/MUX。

調(diào)試時(shí),配置Tomado的目標(biāo)服務(wù)器(Target Server),通過選擇Tools->Target Server->Configure來啟動(dòng)目標(biāo)服務(wù)器的配置程序.選擇wbdrpc后臺(tái),選中Add description to menu,根據(jù)BSP中的配置填寫IP地址。

4 END驅(qū)動(dòng)程序相關(guān)函數(shù)的設(shè)計(jì)

END網(wǎng)絡(luò)驅(qū)動(dòng)程序相關(guān)處理函數(shù)的設(shè)計(jì)是網(wǎng)絡(luò)驅(qū)動(dòng)和管理的關(guān)鍵部分,它包括ioctl、收/發(fā)處理、中斷處理函數(shù)和網(wǎng)絡(luò)驅(qū)動(dòng)程序函數(shù)。

(1) ioctl函數(shù)的編寫

ioctl函數(shù)主要完成網(wǎng)卡的啟動(dòng)和停止,以及MAC地址的設(shè)置等,由文件cs8900aEnd.c中的es8900aloctl()函數(shù)實(shí)現(xiàn)。在函數(shù)中可以通過輸入命令行參數(shù)分別對(duì)設(shè)置MAC地址請(qǐng)求、獲取MAC地址請(qǐng)求、設(shè)置設(shè)備標(biāo)志、獲取設(shè)備標(biāo)志、啟動(dòng)輪詢操作、結(jié)束輪詢操作、返網(wǎng)MIB信息、返同第一個(gè)最小的緩沖區(qū)和返同頭的大小等進(jìn)行參數(shù)設(shè)置。

(2)數(shù)據(jù)接收函數(shù)的編寫

為了保證數(shù)據(jù)幀接收的實(shí)時(shí)性,在cs8900aRecv()函數(shù)中使用中斷的方式處理數(shù)據(jù)幀的接收。中斷中應(yīng)盡可能做較少的處理,所以當(dāng)網(wǎng)絡(luò)設(shè)備產(chǎn)生中斷時(shí),用戶中斷服務(wù)程序最好包含任務(wù)級(jí)別的處理服務(wù)程序.可以通過調(diào)用netJobAdd()實(shí)現(xiàn)。它接收一個(gè)程序指針和多達(dá)5個(gè)附加自變量,可以將應(yīng)用程序用來處理數(shù)據(jù)包的入口點(diǎn)設(shè)定為任務(wù)級(jí)別。然后把任務(wù)放入tNetTask隊(duì)列,可以用tNetTask來處理任務(wù)級(jí)別的網(wǎng)路處理。只要tNetTask隊(duì)列中有函數(shù),它就會(huì)一直工作,直到隊(duì)列為空,進(jìn)入睡眠狀態(tài)。

當(dāng)有數(shù)據(jù)到達(dá)網(wǎng)絡(luò)設(shè)備時(shí),觸發(fā)中斷進(jìn)入中斷服務(wù)程序cs8900aEndInt。在中斷服務(wù)程序里查看中斷狀態(tài)寄存器,如果ReceiveComplete位為高則進(jìn)入cs8900aMacRxInt()。在cs8900aMacRxInt()中關(guān)閉中斷.并調(diào)用BeOobAdd()將cs8900aEndHandleRcvInt()添加到tNetTask要處理的網(wǎng)絡(luò)任務(wù)隊(duì)列中。cs8900aEndHandleRevlnt()主要完成以下工作:

通過netClBtkGet()來預(yù)定一個(gè)clBlk結(jié)構(gòu);

通過netClBlkJoin()把clBlk結(jié)構(gòu)鏈接到包含數(shù)據(jù)包的cluster;

通過netMblkGet()來預(yù)定一個(gè)mBlk結(jié)構(gòu);

通過netMblkClJoin()把mBlk連接到clBlk、cluster;

通過netClusterGel()重新預(yù)定一個(gè)cluster給收緩沖描述符供下次接收使用;

重新開啟中斷。

(3)數(shù)據(jù)發(fā)送函數(shù)的編寫

數(shù)據(jù)幀的發(fā)送不采用中斷模式,直接調(diào)用底層驅(qū)動(dòng)發(fā)送函數(shù)cs8900aEndSend()。發(fā)送的步驟如下:1.用戶凋用write()通過socket套接字訪問網(wǎng)絡(luò);2.網(wǎng)絡(luò)協(xié)議拷貝到網(wǎng)絡(luò)緩沖區(qū),并調(diào)用協(xié)議驅(qū)動(dòng)的發(fā)送程序;3.協(xié)議驅(qū)動(dòng)發(fā)送程序調(diào)用muxSend()啟動(dòng)發(fā)送;4.muxSend()通過調(diào)用send()回調(diào)函數(shù),把緩沖區(qū)傳遞給END;5.?dāng)?shù)據(jù)發(fā)送程序cs8900aEndSend()調(diào)用netMblkToBufCopy()將數(shù)據(jù)拷貝到緩沖中,并立即發(fā)送出去。拷貝完成后,調(diào)用netMblkClChainFree()釋放所有鏈中的mBlk緩沖并歸還到內(nèi)存池。

(4)修改cs8900a.h文件

由于S3C2410A芯片內(nèi)部集成了MAC控制器,由芯片內(nèi)部寄存器進(jìn)行控制。因此不需要為網(wǎng)卡模塊另外分配外設(shè)端口或映射寄存器地址。雖然S3C2410A芯片和物理層接口芯片在外部足兩個(gè)部分,但是從開發(fā)的角度看它們是一個(gè)整體。在cs8900a.h文件中主要完成一些基本配置的設(shè)定:

#define CS_CHIP_FRAME_BUF_SIZE    (2048)
#define CS_PKTPG_DMA_NUM    (0x0024)
#define CS_INIT_DMA_NUM    (3)
#define CS_INIT_INT_NUM   (0)
#define CS_CHIP_MEM_BASE    (0x28100000)
#define CS_CHlP_IO_BASE   (0x28000000)
#define CS_CHIP_IO_0FFSET   (0x300)
#define CS_CHIP_MEM_OFFSET    (0)

(5)修改cs8900aEND.c文件

cs8900aEND.c  主要完成設(shè)備驅(qū)動(dòng)程序函數(shù)的編寫:
//從MIB獲取硬件地址
#define END_HADDR(pEnd) ((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)
#defitae END_HADDR_LEN(pEnd) ((pEnd)->mib2Tbl.ifPhysAddress.addrLength)
//配置設(shè)定
#define END_BUFSIZ  (ETHERMTU+SIZEOF_ETHERHEADER+6)
#define END_SPEED_10M    10000000    /*10Mbs*/
#define END_SPEED     END_SPEED_10M
//定義名稱
#define  DRV_NAME    "cs"
......

然后添加驅(qū)動(dòng)控制結(jié)構(gòu),其結(jié)構(gòu)如下:

typedef struct end device
{
END_0BJ end    //繼承的END_OBJ結(jié)構(gòu)
int unit;     //設(shè)備單元數(shù)
int ivecBdmaTx;    //bdmaTx中斷向量
int ivecBdmaRx;    //bdmaRx中斷向量
......
UCHAR csAddr[6];    //以太網(wǎng)地址
CACHE_FUNS * cacheFuns;   //高速緩沖功能函數(shù)指針
......
}

該結(jié)構(gòu)中的內(nèi)容是根據(jù)網(wǎng)絡(luò)設(shè)備和用戶需要而設(shè)計(jì)的,其中END_OBJ結(jié)構(gòu)必須包含。并放置在結(jié)構(gòu)的第一項(xiàng)。

5 結(jié)束語

VxWorks下增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)是一個(gè)鏈路層驅(qū)動(dòng)程序,它通過MUX層函數(shù)與網(wǎng)絡(luò)協(xié)議層進(jìn)行通信,本文分析了基于samsung公司的S3C2410A處理器的VxWorks操作系統(tǒng)嵌入式網(wǎng)絡(luò)硬件平臺(tái),闡述了VxWorks操作系統(tǒng)下增強(qiáng)型網(wǎng)絡(luò)接口結(jié)構(gòu),并根據(jù)硬件的設(shè)計(jì)環(huán)境詳盡描述并給出了適合該硬件系統(tǒng)的END型網(wǎng)卡驅(qū)動(dòng)的編寫及其在vxWorks系統(tǒng)中的加載,滿足系統(tǒng)網(wǎng)絡(luò)傳輸?shù)囊蟆S捎谟布h(huán)境不間,所以不同開發(fā)板上END的設(shè)計(jì)會(huì)在驅(qū)動(dòng)的初始化、發(fā)送和接收函數(shù)的配置上有所不同,但根據(jù)相應(yīng)的硬件用戶手冊(cè)稍加改動(dòng)即可使用,對(duì)其他開發(fā)板的網(wǎng)絡(luò)驅(qū)動(dòng)開發(fā)具有一定的參考和借鑒價(jià)值。

本文作者創(chuàng)新點(diǎn):本文闡述了vxworks操作系統(tǒng)下增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)的構(gòu)成原理,給出了基于S3C2410A芯片的增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)的具體實(shí)現(xiàn)方法。


作者:錢華明,趙斌      來源:《微計(jì)算機(jī)信息》(嵌入式與SOC)2009年第4-2期
本文地址:http://www.qingdxww.cn/thread-10233-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 了解一下Microchip強(qiáng)大的PIC18-Q24 MCU系列
  • 5分鐘詳解定時(shí)器/計(jì)數(shù)器E和波形擴(kuò)展!
  • 無線充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程2
  • 無線充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程3
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青草国产成人久久91网 | 99re这里都是精品 | www.日本高清视频 | 国产精品久久久久毛片真精品 | 久久这里只有精品任你色 | 99视频免费播放 | 拍真实国产伦偷精品 | 五月综合激情网 | 看一级毛片免费观看视频 | 日韩在线1 | 欧洲亚洲欧美国产日本高清 | 美女国产在线观看免费观看 | 69免费视频大片 | 四虎永久免费地址在线网站 | 德国毛片| 亚洲欧洲精品成人久久曰 | 精品一区二区三区视频在线观看 | 91天堂素人精品系列全集亚洲 | 成人a一级毛片免费看 | 美女又黄又免费的视频 | 欧美系列在线播放 | 亚洲成人黄色网址 | 国产精品视频自拍 | 岛国大片免费 | 亚洲综合色就色手机在线观看 | 黄页免费观看 | 欧美一区二区三区免费看 | 亚洲一区二区三区首页 | 成人在线午夜 | 中文字幕在第10页线观看 | 欧美日韩在线一本卡 | 亚洲麻豆国产精品 | 成人午夜爽爽爽免费视频 | 91亚瑟视频 | 在线国产毛片 | 国产成人亚洲综合无 | 麻豆天美精东91制片厂 | 一级毛片不卡片免费观看 | 亚洲一级毛片免观看 | 国产精品臀控福利在线观看 | 精品国产一区二区三区成人 |