摘 要: 針對PC104結構SCM/DETH雙端口以太網卡設計實現" title="設計實現">設計實現了一個基于VxWorks系統的智能雙冗余" title="雙冗余">雙冗余網絡驅動" title="網絡驅動">網絡驅動,在驅動程序中實現了網絡通信故障診斷" title="故障診斷">故障診斷及網卡間智能切換等功能。通過對智能雙冗余驅動進行性能測試,驗證了設計的正確性和有效性。
關鍵詞: VxWorks操作系統 冗余備份 網絡接口卡 網卡驅動
隨著網絡技術的成熟,具有價格低廉、連接方便等優點的以太網已成為各種控制系統接口互連的主要媒介。它作為一種通用網絡數據通信系統,在全球計算機網絡領域已經得到了廣泛的應用。隨著現代艦船信息化程度的不斷提高,以太網技術也開始應用于現代艦船信息系統中,不但要求信息傳輸速度快,抗干擾能力強,還要求網絡具有高穩定性和高可靠性,在網絡局部故障或受損時,全系統不至于癱瘓失效。
冗余設計作為一種提高系統可靠性的有效方法,已經得到了廣泛的應用。對于網絡系統中的單個節點,常常需要對網卡進行雙冗余備份,即每個節點都采用兩個網絡接口,中間用兩個集線器或交換機互連,當正常通信的網卡或線路出現故障時該節點能自動地切換到備份網卡進行通信。
目前大多數操作系統(如Windows、Unix、Linux等)都支持多網卡,但均非冗余設計,每塊網卡都有獨立的物理地址和IP地址,以獨立的形式供應用系統使用。要實現真正的智能雙冗余網絡系統,必須自行設計專用的網絡驅動程序,以透明的形式提交高層應用系統使用,使系統感覺不到雙網卡的存在。本文使用盛博公司PC104結構SCM/DETH型10M雙端口以太網卡,設計實現了基于VxWorks的智能雙冗余網絡驅動。
1 VxWorks系統網絡驅動原理
1.1 VxWorks系統簡介
VxWorks操作系統是美國風河公司(Wind River System)推出的一款運行在目標機上的高性能、可裁減的嵌入式強實時操作系統。操作系統包括了進程管理、存儲管理、設備管理、文件系統管理、網絡協議及系統應用等幾個部分,只占用了很小的存儲空間,并可高度裁減,保證了系統能以較高的效率運行。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中。
VxWorks主要有以下特點:
(1)具有高度可剪裁的操作系統微內核Wind;
(2)具有比較優秀的網絡處理能力,適用于多種物理介質的TCP/IP協議族支持;
(3)具有極其豐富的BSP,支持多處理器系統,最多可以支持20個CPU;
(4)具有友好的開發調試環境,便于操作、配置和應用程序的開發調試;
(5)具有較好的兼容性,支持POSIX1003.1b;
(6)支持多種開發和運行環境。支持C語言、C++語言以及JAVA虛擬機。
1.2 VxWorks系統網絡驅動原理
VxWorks中支持兩種類型的網絡設備驅動程序——BSD4.3網絡驅動程序和可裁減的增強型網絡堆棧SENS(Scalable Enhanced Networks Stack)。BSD4.3標準提供了網絡設備驅動程序與IP協議的緊密結合,而SENS協議棧提供了可替換的網絡設備驅動程序,即增強型網絡驅動程序END(Enhanced Networks Driver)。
SENS模型包含三個部分:協議驅動程序、多元接口層(MUX)和END型網絡驅動。它獨立于硬件設備接口,將網絡設備驅動程序細化,使開發者可以專注于驅動程序(END驅動)本身的開發。本文設計實現的智能雙冗余驅動即是一個符合SENS模型標準的END型網絡驅動。在END型網絡驅動中主要實現網卡設備的裝載,網絡芯片的初始化,網絡報文接收及發送等功能。在系統啟動后,操作系統通過網卡加載函數調用到END型網絡驅動,在加載過程中完成網絡芯片的初始化、內存池的分配、網卡設備控制結構" title="控制結構">控制結構的填寫等操作,最后通過指針傳遞的方式將網卡設備控制結構和13個網卡操縱函數提交給MUX層,供上層系統操作網卡工作時使用。
2 智能雙冗余驅動程序實現
2.1 智能雙冗余驅動實現原理
智能雙冗余驅動的實現原理如圖1所示,虛線框內為智能雙冗余驅動。在VxWorks系統啟動時,首先要遍歷配置文件confignet.h中的網卡設備表endDevTbl[ ],設備表中包含雙端口網卡上兩個網卡的地址及中斷等配置參數;然后,系統會調用sysDethEnd.c中的sysDethEndLoad(…)函數,將兩個網卡的配置參數以函數入口參數的形式傳遞給智能雙冗余驅動的裝載函數dethEndLoad(…);裝載函數為每個網卡設備創建一個控制結構,對入口配置參數進行解析,并為每個網卡設備分配一塊內存空間,用系統的配置要求初始化兩個網卡,同時填寫好網卡設備的控制結構;最后,智能雙冗余驅動將主通道網卡設備的控制結構指針提交給MUX層,并發起網絡故障診斷定時器任務和網絡故障診斷任務。
網絡故障診斷定時器任務配合網絡故障診斷任務執行,使用看門狗定時器Watchdog timer完成1ms定時,每定時1次釋放1次二進制信號量sem_netDiagnose;網絡故障診斷任務循環等待接收信號量sem_netDiagnose,取到信號量后立即判斷主通道網卡設備的端口狀態(連接/非連接),當端口處于連接狀態時,任務循環等待下次信號量,當端口處于非連接狀態時,網絡故障診斷任務交換主通道與備用通道的控制結構內容,備用通道網卡設備變為主通道網卡設備開始工作,但對于上層應用來說,網卡的控制結構并沒有改變。
2.2 網卡設備控制結構
在智能雙冗余網卡驅動中使用一個控制數據結構控制一塊網卡設備,控制結構中包含網卡的中斷向量、I/O基址、總線類型、介質類型、物理地址等特性信息。這些信息有的在網卡設備表endDevTbl[ ]中,在系統啟動過程中作為驅動裝載函數的參數傳遞到驅動中;有的保存在網卡的PROM中,在網卡驅動程序初始化時,將這些特性參數寫入網卡控制結構。
智能雙冗余網卡驅動中定義了一個控制單網卡設備的控制結構,如下所示:
typedef struct ne2000_device
{
……
int unit; /*網卡單元號*/
int ilevel; /*中斷優先級*/
int byteAccess; /*字節存儲模式*/
ULONG base; /*基地址*/
int offset; /*內存對齊偏移量*/
volatile ULONG imask; /*中斷屏蔽碼*/
UCHAR enetAddr[6]; /*網卡物理地址*/
……
} DETHEND_DEVICE;
驅動中創建了兩個網卡設備控制結構分別控制兩塊網卡。上層應用通過操作網卡控制結構從而實現對網卡的各種操作。
2.3 網絡通信故障診斷方法
要實現網絡端口的智能切換,實現網卡間冗余備份的功能,首要前提就是需要診斷出當前工作的網卡是否網絡通信故障。任何一種網絡芯片都提供連接狀態自動診斷功能,通過在網絡芯片的某個寄存器的相應位置0或置1來表示該網卡連接正常還是連接錯誤。它所檢測的依據是網卡是否連通,也就是從本機網絡端口到網線另一端的網絡端口整個通路是否連通,它能檢測出網線斷開、網絡接口松動及故障等錯誤。
本文使用的SEM/DETH雙端口以太網卡采用兩塊RTL8019AS網絡芯片,該網絡芯片的寄存器組采用分頁存儲方式,共分為4頁,都映射到16個I/O地址空間上。其中,第3頁CONFIG0寄存器的B2位表示網卡連接狀態自動診斷結果,當該位為1時表示連接錯誤,為0時表示連接正常。智能雙冗余驅動的網絡故障診斷任務判斷網卡連接狀態的代碼如下:
setting=sysInByte(pDrvCtrl->base); /*讀取命令寄存器狀態*/
sysOutByte(pDrvCtrl->base,(0xc0|setting));/*選擇第3頁寄存器組*/
if(sysInByte(pDrvCtrl->base+CONFIG0_REG) & 0x04)/*網絡連接錯誤*/
{ …… }
2.4 單物理地址實現
要使兩塊網卡實現智能雙冗余備份,它們必須有相同的物理地址和IP地址。否則,當由其中一個網卡切換到另一個網卡上時,如果IP地址發生變化,系統將無法正常接收、發送數據;如果IP地址不發生變化而僅僅物理地址發生變化,雖然網卡切換后,系統仍可以正常接收、發送數據,但由于物理地址發生變化,將引起協議棧中ARP綁定表的變化,重新對應ARP綁定表中IP地址與網卡物理地址的關系,則延長了兩個網卡之間的切換時間。
系統的IP地址存在于系統的網絡協議棧中,在系統啟動后與網卡進行綁定。由于本文設計實現的智能雙冗余驅動對于應用系統和協議棧來說呈現單網卡的特征,網卡之間的切換只在驅動程序中完成,所以,當發生網卡切換時,系統的IP地址并不發生變化。
對于網卡的物理地址來說,通常每塊網卡有一個全世界范圍內惟一的物理地址,它保存在網卡的PROM中。網卡初始化時,要從PROM中讀出物理地址,把它存放在適當的寄存器和數據結構中,對外來說,寄存器和數據結構中的數值就是這塊網卡的物理地址。在智能雙冗余驅動程序中,當驅動程序初始化時只讀取一塊網卡PROM中的物理地址,然后把這個地址寫入兩塊網卡的對應物理地址寄存器和數據結構變量pDrvCtrl中,這樣,兩塊網卡對外就具有統一的物理地址了。因為驅動程序自始至終只有一塊網卡處于激活狀態,另一塊作為備份,因此不會發生同一個網絡上兩個物理地址相同出現沖突這種現象。
3 性能測試
3.1 測試方法
針對本文設計、實現的雙端口網卡智能雙冗余驅動進行性能測試。將智能雙冗余驅動編譯到VxWorks操作系統中,使用帶有SEM/DETH雙端口以太網卡的計算機做目標機,使用兩根網線把目標機連接到交換機上。目標機應用程序以40次/秒的速率向外發送UDP廣播報文。采用普通PC機作為主機系統,運行Windows2000操作系統,使用sniffer Pro工具進行網絡監控。
3.2 測試結果及分析
測試結果如圖2所示,橫坐標代表報文數,縱坐標代表主機接收到的目標機UDP廣播報文中兩個連續UDP報文之間的間隔時間(單位為秒)。由圖2可以看到,由于目標機正常工作狀態下是以40次/秒的速率廣播發送UDP網絡報文的,所以每兩個報文之間的時間間隔大部分為25ms左右。在圖2中出現了8次主機接收到的廣播報文時間間隔為100ms左右的情況,這是由于在目標機端進行了8次網卡切換,在網卡切換過程中出現了報文丟失現象。
由測試結果看,本文設計實現的智能雙冗余驅動能夠很好地實現雙端口網卡冗余備份的功能,在檢測到主通道網卡設備連接錯誤時可以切換到備用通道繼續進行網絡通信,并且可以在兩塊網卡之間循環切換;同時,該驅動對上層用戶透明,呈現單網卡的特性,完全在驅動中實現網卡間的冗余備份。
本文設計實現了一個基于VxWorks的雙端口網卡智能雙冗余驅動,在驅動中實現了網絡通信故障診斷和網卡間智能切換功能,對上層應用呈現單網卡特性。通過對設計實現的智能雙冗余驅動進行性能測試,驗證了設計的正確性和有效性,但通過測試結果也可以看到,在網卡切換過程中還存在切換時間較長的問題,有待進一步研究。
參考文獻
1 鄭宗漢.實時系統軟件基礎.北京:清華大學出版社,2003
2 孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境Tornado[M].北京:中國電力出版社,2002
3 李方敏.VxWorks高級程序設計.北京:清華大學出版社,2004
4 周啟平,張 楊.VxWorks下設備驅動程序及BSP開發指南.北京:中國電力出版社,2004
5 Comer D E.計算機網絡與因特網.北京:清華大學出版社,2002
6 田 煒,劉利強,袁贛南.VxWorks環境下雙網卡冗余備份技術的實現.自動化技術與應用,2003;(7):32~34
7 張均東,任 光,孫培廷.船舶監控網絡中的冗余設計和實現.中國造船,2002;(9):99~104
8 徐紹衡.艦船雙網絡信息和控制一體化系統.船舶工程,2002;(6):47~49