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ǒng)一的編程接口和一致的運(yùn)行特性,盡可能屏蔽不同CPU之間的底層差異。所以,VxWorks可以方便地移植到不同的CPU平臺上,如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ò)硬件平臺
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所示。
在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)卡基地址、中斷向量號、中斷號、偏移、配置值、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ù)的注冊并打開中斷宏。當(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)的初始化字符串。這樣就會在生成的BSP中包含END/MUX。
調(diào)試時(shí),配置Tomado的目標(biāo)服務(wù)器(Target Server),通過選擇Tools-》Target Server-》Configure來啟動(dòng)目標(biāo)服務(wù)器的配置程序.選擇wbdrpc后臺,選中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ù)分別對設(shè)置MAC地址請求、獲取MAC地址請求、設(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ù)級別的處理服務(wù)程序.可以通過調(diào)用netJobAdd()實(shí)現(xiàn)。它接收一個(gè)程序指針和多達(dá)5個(gè)附加自變量,可以將應(yīng)用程序用來處理數(shù)據(jù)包的入口點(diǎn)設(shè)定為任務(wù)級別。然后把任務(wù)放入tNetTask隊(duì)列,可以用tNetTask來處理任務(wù)級別的網(wǎng)路處理。只要tNetTask隊(duì)列中有函數(shù),它就會一直工作,直到隊(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ò)硬件平臺,闡述了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ù)囊?。由于硬件環(huán)境不間,所以不同開發(fā)板上END的設(shè)計(jì)會在驅(qū)動(dòng)的初始化、發(fā)送和接收函數(shù)的配置上有所不同,但根據(jù)相應(yīng)的硬件用戶手冊稍加改動(dòng)即可使用,對其他開發(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)方法。
責(zé)任編輯:gt
-
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229852 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305241 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6825瀏覽量
123333
發(fā)布評論請先 登錄
相關(guān)推薦
評論