《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業(yè)界動態(tài) > 基于VxWorks的雙端口網卡智能雙冗余驅動

基于VxWorks的雙端口網卡智能雙冗余驅動

2008-05-06
作者:劉利強,戴運桃,周衛(wèi)東

  摘 要: 針對PC104結構SCM/DETH雙端口以太網卡設計實現(xiàn)" title="設計實現(xiàn)">設計實現(xiàn)了一個基于VxWorks系統(tǒng)的智能雙冗余" title="雙冗余">雙冗余網絡驅動" title="網絡驅動">網絡驅動,在驅動程序中實現(xiàn)了網絡通信故障診斷" title="故障診斷">故障診斷及網卡間智能切換等功能。通過對智能雙冗余驅動進行性能測試,驗證了設計的正確性和有效性。
  關鍵詞: VxWorks操作系統(tǒng) 冗余備份 網絡接口卡 網卡驅動


  隨著網絡技術的成熟,具有價格低廉、連接方便等優(yōu)點的以太網已成為各種控制系統(tǒng)接口互連的主要媒介。它作為一種通用網絡數(shù)據(jù)通信系統(tǒng),在全球計算機網絡領域已經得到了廣泛的應用。隨著現(xiàn)代艦船信息化程度的不斷提高,以太網技術也開始應用于現(xiàn)代艦船信息系統(tǒng)中,不但要求信息傳輸速度快,抗干擾能力強,還要求網絡具有高穩(wěn)定性和高可靠性,在網絡局部故障或受損時,全系統(tǒng)不至于癱瘓失效。
  冗余設計作為一種提高系統(tǒng)可靠性的有效方法,已經得到了廣泛的應用。對于網絡系統(tǒng)中的單個節(jié)點,常常需要對網卡進行雙冗余備份,即每個節(jié)點都采用兩個網絡接口,中間用兩個集線器或交換機互連,當正常通信的網卡或線路出現(xiàn)故障時該節(jié)點能自動地切換到備份網卡進行通信。
  目前大多數(shù)操作系統(tǒng)(如Windows、Unix、Linux等)都支持多網卡,但均非冗余設計,每塊網卡都有獨立的物理地址和IP地址,以獨立的形式供應用系統(tǒng)使用。要實現(xiàn)真正的智能雙冗余網絡系統(tǒng),必須自行設計專用的網絡驅動程序,以透明的形式提交高層應用系統(tǒng)使用,使系統(tǒng)感覺不到雙網卡的存在。本文使用盛博公司PC104結構SCM/DETH型10M雙端口以太網卡,設計實現(xiàn)了基于VxWorks的智能雙冗余網絡驅動。
1 VxWorks系統(tǒng)網絡驅動原理
1.1 VxWorks系統(tǒng)簡介
  VxWorks操作系統(tǒng)是美國風河公司(Wind River System)推出的一款運行在目標機上的高性能、可裁減的嵌入式強實時操作系統(tǒng)。操作系統(tǒng)包括了進程管理、存儲管理、設備管理、文件系統(tǒng)管理、網絡協(xié)議及系統(tǒng)應用等幾個部分,只占用了很小的存儲空間,并可高度裁減,保證了系統(tǒng)能以較高的效率運行。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中。
  VxWorks主要有以下特點:
  (1)具有高度可剪裁的操作系統(tǒng)微內核Wind;
  (2)具有比較優(yōu)秀的網絡處理能力,適用于多種物理介質的TCP/IP協(xié)議族支持;
  (3)具有極其豐富的BSP,支持多處理器系統(tǒng),最多可以支持20個CPU;
  (4)具有友好的開發(fā)調試環(huán)境,便于操作、配置和應用程序的開發(fā)調試;
  (5)具有較好的兼容性,支持POSIX1003.1b;
  (6)支持多種開發(fā)和運行環(huán)境。支持C語言、C++語言以及JAVA虛擬機。
1.2 VxWorks系統(tǒng)網絡驅動原理
  VxWorks中支持兩種類型的網絡設備驅動程序——BSD4.3網絡驅動程序和可裁減的增強型網絡堆棧SENS(Scalable Enhanced Networks Stack)。BSD4.3標準提供了網絡設備驅動程序與IP協(xié)議的緊密結合,而SENS協(xié)議棧提供了可替換的網絡設備驅動程序,即增強型網絡驅動程序END(Enhanced Networks Driver)。
  SENS模型包含三個部分:協(xié)議驅動程序、多元接口層(MUX)和END型網絡驅動。它獨立于硬件設備接口,將網絡設備驅動程序細化,使開發(fā)者可以專注于驅動程序(END驅動)本身的開發(fā)。本文設計實現(xiàn)的智能雙冗余驅動即是一個符合SENS模型標準的END型網絡驅動。在END型網絡驅動中主要實現(xiàn)網卡設備的裝載,網絡芯片的初始化,網絡報文接收及發(fā)送等功能。在系統(tǒng)啟動后,操作系統(tǒng)通過網卡加載函數(shù)調用到END型網絡驅動,在加載過程中完成網絡芯片的初始化、內存池的分配、網卡設備控制結構" title="控制結構">控制結構的填寫等操作,最后通過指針傳遞的方式將網卡設備控制結構和13個網卡操縱函數(shù)提交給MUX層,供上層系統(tǒng)操作網卡工作時使用。
2 智能雙冗余驅動程序實現(xiàn)
2.1 智能雙冗余驅動實現(xiàn)原理

  智能雙冗余驅動的實現(xiàn)原理如圖1所示,虛線框內為智能雙冗余驅動。在VxWorks系統(tǒng)啟動時,首先要遍歷配置文件confignet.h中的網卡設備表endDevTbl[ ],設備表中包含雙端口網卡上兩個網卡的地址及中斷等配置參數(shù);然后,系統(tǒng)會調用sysDethEnd.c中的sysDethEndLoad(…)函數(shù),將兩個網卡的配置參數(shù)以函數(shù)入口參數(shù)的形式傳遞給智能雙冗余驅動的裝載函數(shù)dethEndLoad(…);裝載函數(shù)為每個網卡設備創(chuàng)建一個控制結構,對入口配置參數(shù)進行解析,并為每個網卡設備分配一塊內存空間,用系統(tǒng)的配置要求初始化兩個網卡,同時填寫好網卡設備的控制結構;最后,智能雙冗余驅動將主通道網卡設備的控制結構指針提交給MUX層,并發(fā)起網絡故障診斷定時器任務和網絡故障診斷任務。


  網絡故障診斷定時器任務配合網絡故障診斷任務執(zhí)行,使用看門狗定時器Watchdog timer完成1ms定時,每定時1次釋放1次二進制信號量sem_netDiagnose;網絡故障診斷任務循環(huán)等待接收信號量sem_netDiagnose,取到信號量后立即判斷主通道網卡設備的端口狀態(tài)(連接/非連接),當端口處于連接狀態(tài)時,任務循環(huán)等待下次信號量,當端口處于非連接狀態(tài)時,網絡故障診斷任務交換主通道與備用通道的控制結構內容,備用通道網卡設備變?yōu)橹魍ǖ谰W卡設備開始工作,但對于上層應用來說,網卡的控制結構并沒有改變。
2.2 網卡設備控制結構
  在智能雙冗余網卡驅動中使用一個控制數(shù)據(jù)結構控制一塊網卡設備,控制結構中包含網卡的中斷向量、I/O基址、總線類型、介質類型、物理地址等特性信息。這些信息有的在網卡設備表endDevTbl[ ]中,在系統(tǒng)啟動過程中作為驅動裝載函數(shù)的參數(shù)傳遞到驅動中;有的保存在網卡的PROM中,在網卡驅動程序初始化時,將這些特性參數(shù)寫入網卡控制結構。
  智能雙冗余網卡驅動中定義了一個控制單網卡設備的控制結構,如下所示:
  typedef struct ne2000_device
  {
  ……
  int    unit;       /*網卡單元號*/
  int    ilevel;      /*中斷優(yōu)先級*/
  int    byteAccess;    /*字節(jié)存儲模式*/
  ULONG   base;       /*基地址*/
  int    offset;      /*內存對齊偏移量*/
  volatile ULONG  imask;   /*中斷屏蔽碼*/
  UCHAR   enetAddr[6];   /*網卡物理地址*/
  ……
  } DETHEND_DEVICE;
  驅動中創(chuàng)建了兩個網卡設備控制結構分別控制兩塊網卡。上層應用通過操作網卡控制結構從而實現(xiàn)對網卡的各種操作。
2.3 網絡通信故障診斷方法
  要實現(xiàn)網絡端口的智能切換,實現(xiàn)網卡間冗余備份的功能,首要前提就是需要診斷出當前工作的網卡是否網絡通信故障。任何一種網絡芯片都提供連接狀態(tài)自動診斷功能,通過在網絡芯片的某個寄存器的相應位置0或置1來表示該網卡連接正常還是連接錯誤。它所檢測的依據(jù)是網卡是否連通,也就是從本機網絡端口到網線另一端的網絡端口整個通路是否連通,它能檢測出網線斷開、網絡接口松動及故障等錯誤。
  本文使用的SEM/DETH雙端口以太網卡采用兩塊RTL8019AS網絡芯片,該網絡芯片的寄存器組采用分頁存儲方式,共分為4頁,都映射到16個I/O地址空間上。其中,第3頁CONFIG0寄存器的B2位表示網卡連接狀態(tài)自動診斷結果,當該位為1時表示連接錯誤,為0時表示連接正常。智能雙冗余驅動的網絡故障診斷任務判斷網卡連接狀態(tài)的代碼如下:
  setting=sysInByte(pDrvCtrl->base); /*讀取命令寄存器狀態(tài)*/
  sysOutByte(pDrvCtrl->base,(0xc0|setting));/*選擇第3頁寄存器組*/
  if(sysInByte(pDrvCtrl->base+CONFIG0_REG) & 0x04)/*網絡連接錯誤*/
  { …… }
2.4 單物理地址實現(xiàn)
  要使兩塊網卡實現(xiàn)智能雙冗余備份,它們必須有相同的物理地址和IP地址。否則,當由其中一個網卡切換到另一個網卡上時,如果IP地址發(fā)生變化,系統(tǒng)將無法正常接收、發(fā)送數(shù)據(jù);如果IP地址不發(fā)生變化而僅僅物理地址發(fā)生變化,雖然網卡切換后,系統(tǒng)仍可以正常接收、發(fā)送數(shù)據(jù),但由于物理地址發(fā)生變化,將引起協(xié)議棧中ARP綁定表的變化,重新對應ARP綁定表中IP地址與網卡物理地址的關系,則延長了兩個網卡之間的切換時間。
  系統(tǒng)的IP地址存在于系統(tǒng)的網絡協(xié)議棧中,在系統(tǒng)啟動后與網卡進行綁定。由于本文設計實現(xiàn)的智能雙冗余驅動對于應用系統(tǒng)和協(xié)議棧來說呈現(xiàn)單網卡的特征,網卡之間的切換只在驅動程序中完成,所以,當發(fā)生網卡切換時,系統(tǒng)的IP地址并不發(fā)生變化。
  對于網卡的物理地址來說,通常每塊網卡有一個全世界范圍內惟一的物理地址,它保存在網卡的PROM中。網卡初始化時,要從PROM中讀出物理地址,把它存放在適當?shù)募拇嫫骱蛿?shù)據(jù)結構中,對外來說,寄存器和數(shù)據(jù)結構中的數(shù)值就是這塊網卡的物理地址。在智能雙冗余驅動程序中,當驅動程序初始化時只讀取一塊網卡PROM中的物理地址,然后把這個地址寫入兩塊網卡的對應物理地址寄存器和數(shù)據(jù)結構變量pDrvCtrl中,這樣,兩塊網卡對外就具有統(tǒng)一的物理地址了。因為驅動程序自始至終只有一塊網卡處于激活狀態(tài),另一塊作為備份,因此不會發(fā)生同一個網絡上兩個物理地址相同出現(xiàn)沖突這種現(xiàn)象。
3 性能測試
3.1 測試方法

  針對本文設計、實現(xiàn)的雙端口網卡智能雙冗余驅動進行性能測試。將智能雙冗余驅動編譯到VxWorks操作系統(tǒng)中,使用帶有SEM/DETH雙端口以太網卡的計算機做目標機,使用兩根網線把目標機連接到交換機上。目標機應用程序以40次/秒的速率向外發(fā)送UDP廣播報文。采用普通PC機作為主機系統(tǒng),運行Windows2000操作系統(tǒng),使用sniffer Pro工具進行網絡監(jiān)控。
3.2 測試結果及分析
  測試結果如圖2所示,橫坐標代表報文數(shù),縱坐標代表主機接收到的目標機UDP廣播報文中兩個連續(xù)UDP報文之間的間隔時間(單位為秒)。由圖2可以看到,由于目標機正常工作狀態(tài)下是以40次/秒的速率廣播發(fā)送UDP網絡報文的,所以每兩個報文之間的時間間隔大部分為25ms左右。在圖2中出現(xiàn)了8次主機接收到的廣播報文時間間隔為100ms左右的情況,這是由于在目標機端進行了8次網卡切換,在網卡切換過程中出現(xiàn)了報文丟失現(xiàn)象。


  由測試結果看,本文設計實現(xiàn)的智能雙冗余驅動能夠很好地實現(xiàn)雙端口網卡冗余備份的功能,在檢測到主通道網卡設備連接錯誤時可以切換到備用通道繼續(xù)進行網絡通信,并且可以在兩塊網卡之間循環(huán)切換;同時,該驅動對上層用戶透明,呈現(xiàn)單網卡的特性,完全在驅動中實現(xiàn)網卡間的冗余備份。
  本文設計實現(xiàn)了一個基于VxWorks的雙端口網卡智能雙冗余驅動,在驅動中實現(xiàn)了網絡通信故障診斷和網卡間智能切換功能,對上層應用呈現(xiàn)單網卡特性。通過對設計實現(xiàn)的智能雙冗余驅動進行性能測試,驗證了設計的正確性和有效性,但通過測試結果也可以看到,在網卡切換過程中還存在切換時間較長的問題,有待進一步研究。
參考文獻
1 鄭宗漢.實時系統(tǒng)軟件基礎.北京:清華大學出版社,2003
2 孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2002
3 李方敏.VxWorks高級程序設計.北京:清華大學出版社,2004
4 周啟平,張 楊.VxWorks下設備驅動程序及BSP開發(fā)指南.北京:中國電力出版社,2004
5 Comer D E.計算機網絡與因特網.北京:清華大學出版社,2002
6 田 煒,劉利強,袁贛南.VxWorks環(huán)境下雙網卡冗余備份技術的實現(xiàn).自動化技術與應用,2003;(7):32~34
7 張均東,任 光,孫培廷.船舶監(jiān)控網絡中的冗余設計和實現(xiàn).中國造船,2002;(9):99~104
8 徐紹衡.艦船雙網絡信息和控制一體化系統(tǒng).船舶工程,2002;(6):47~49

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118;郵箱:[email protected]