萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 關於Linux下網卡的一些技術信息

關於Linux下網卡的一些技術信息

class="22301"> 對於那些想了解更多有關網卡如何工作、或如何使用現有驅動程序,以及試圖為目前不支持的網卡編寫自己的驅動程序的人來說,這些信息應該會有用。如果你沒有這種想法,那麼最好跳過這一節。;

1;可編程I/O、共享內存與DMA;

如果已經可以發送接收背靠背數據包,就無法把更多的數據放到網絡上。每一個現代的以太網卡都可以接收背靠背數據包。Linux的DP8390驅動程序(wd80x3、SMC-Ultra、3c503、ne2000,等等)基本上都可以發送背靠背數據包(依賴於當前的中斷延遲),3c509和AT1500的硬件在自動發送背靠背數據包上沒有一點問題。;

ISA總線可以達到5.3MB/sec;(42Mb/sec),對10Mbps以太網而言已經足夠了。對於100Mbps網卡,顯然需要更快的總線來充分利用網絡帶寬。;

可編程I/O(如NE2000、3c509);

優點:沒有使用任何受限制的系統資源,只用了若干I/O寄存器,而且沒有16M的限制。;

缺點:一般傳輸速率較慢,CPU需要等待,幾乎不可能訪問交叉的數據包。;

共享內存(如WD80x3、SMC-Ultra、3c503);

優點:簡單,比可編程I/O速度快,允許隨機訪問數據包。在可能的情況下,Linux驅動程序在從網卡復制出接收的IP數據包時計算其校驗和,從而比相應的PIO網卡進一步減少了對CPU的占用。;

缺點:使用高端內存空間(對DOS用戶來說是個大問題,在Linux下沒有問題),依然要占用CPU。;

從屬(普通)的直接內存存取(Linux下沒有這種情況!);

優點:在實際數據傳遞過程中不占用CPU。;

缺點:檢查邊界條件、分配相鄰的緩存和DMA寄存器編程使該方法成為最慢的技術。它還占用了一個珍貴的DMA通道,並要求對齊的低端內存緩存。;

總線控制的直接內存存取(如LANCE、DEC;21040);

優點:在數據傳輸過程中不占用CPU,可以把緩存串起來,CPU時間很少或不花費在ISA總線上。大多數總線控制的Linux驅動程序現在使用一種“copybreak”方案,較大的數據包直接從網卡放進內核的網絡緩存,小的數據包被CPU復制到cache裡進行下一步的處理。;

缺點:(只適用於ISA總線的網卡)網卡要求低端內存緩存和一個DMA通道。任何總線控制器在與其它強占總線的總線控制器,如某些古老的SCSI適配器,一起工作時都會出問題。有幾個設計低劣的主板芯片組在與總線控制器一起使用時也有麻煩。不使用任何類型的DMA設備的一個原因是使用了設計為代替386的486處理器插件:這些處理器在每個DMA周期都必須刷新cache。(這其中包括Cx486DLC、Ti486DLC、Cx486SLC、Ti486SLC,等等。);


2;編寫驅動程序;

在Linux下使用以太網卡所必需的只不過是相應的驅動程序。因此,關鍵是制造商要向公眾公開編程的技術資料,而無需你(或其他什麼人)簽署什麼協議。關於獲取資料的可能性(也許你不編寫代碼,那麼就是其他人編寫你確實需要的驅動程序的可能性),一個較好的指南是Crynwr;(nee;Clarkson)的包驅動程序的可用性。Russ;Nelson在干這些事,對開發Linux驅動程序很有幫助。網上沖浪者可以試著看一下Russ的軟件。;

Russ;Nelson's;Packet;Drivers;

有了資料,就可以為網卡編寫驅動程序並在Linux下使用(至少從理論上來說是這樣)。記住,有些為XT一類機器設計的老式硬件在Linux這樣的多任務環境下工作得不是很好。如果網絡流量較大,使用這些網卡會帶來大麻煩。;

大多數網卡都帶有如NDIS和ODI一類的MS-DOS接口的驅動程序,但對Linux沒有用。許多人建議直接鏈接它們或自動翻譯一下,但這幾乎是不可能的。MS-DOS驅動程序需要在16比特模式,並依賴於“軟件中斷”,這二者與Linux內核不兼容。這種不兼容實際上是Linux的一個特性,有些Linux驅動程序比其相應的MS-DOS驅動程序要好得多。比如“8390”系列驅動程序使用乒乓傳送緩存,該方法剛剛被引進MS-DOS。;

(乒乓傳送緩存意味著為傳送數據包使用至少兩個最大大小的包緩存。在網卡發送其中的一個時,載入另一個。在第一個包被發出去後,立刻發送第二個包,依次類推。這樣,大多數網卡就可以連續向線路上發送背靠背數據包。);

好啦。你可以決定為Foobar;Ethernet網卡編寫驅動程序了,因為你有編程資料,而且還沒人寫這個驅動程序。(......這是兩個主要的需求)你可以從Linux內核源碼樹中提供的網絡驅動程序框架開始。在所有近期的內核裡都能找到這個文件/usr/src/linux/drivers/net/skeleton.c。也可以看看如下URL的Kernel;Hackers;Guide:KHG;


3;內核的驅動程序接口;

下面對編寫一個新驅動程序所必需的函數進行了若干說明。和上面提到的驅動程序框架一起閱讀可以更清楚一些。;


探測;

在啟動時調用以檢查網卡存在與否。如果可以通過讀取內存等非強制手段進行檢查最好。也可以從I/O端口讀取。在探測開始向I/O端口寫不好,因為這樣可能會損害另一個設備。通常在這裡還進行一些設備初始化(分配I/O空間、IRQ、填充dev->???域等等)。必須了解網卡可以配置到哪些I/O端口/內存、如何啟用共享內存(如果用了的話)以及如何選擇/啟用中斷產生,等等。;

中斷處理程序;

在網卡發出一個中斷時內核調用的程序。他需要確定網卡發出中斷的原因並進行相應的操作。一般的中斷條件是接收到數據、發送完成、報告出錯狀況。需要了解相關的中斷狀態位以進行相應的操作。;

傳送函數;

與dev->hard_start_xmit()鏈接,在內核想通過設備傳送數據時調用它。該函數把數據放入網卡並觸發傳送。需要了解如何把數據打包並傳給網卡(共享內存拷貝、PIO傳送、DMA?),以及放入網卡正確的位置。然後需要了解如何通知網卡把數據發送到線路上,(可能)在發送完成後發出一個中斷。在硬件無法接收更多數據包時需要設置dev->tbusy標志。在網卡有空間可用時,一般這發生在傳送完成中斷過程中,清除dev->tbusy標志並用mark_bh(INET_BH)通知上一層。;

接收函數;

在網卡報告有數據時由內核中斷處理程序調用。它把數據從網卡上移出,放入一個sk_buff並通過執行netif_rx(sk_buff)告訴內核數據所在位置。需要了解如何在接收數據時啟用中斷生成,如何檢查相關的接收狀態位,以及如何從網卡獲取數據(通過共享內存拷貝、PIO、DMA,等等)。;

打開函數;

與dev->open鏈接,在有人使用ifconfig;eth0;up時網絡層調用它——;把設備連到線路上並啟用來接收/發送數據。任何在探測過程中(啟用IRQ生成等)沒有完成的特別的初始化操作都在這裡進行。;

關閉函數(可選);

在有人使用ifconfig;eth0;down時使網卡進入一個清醒的狀態。如果硬件許可的話它會釋放中斷和DMA通道,並完全關閉以節約能源(象收發器一樣)。;

其它函數;

象一個重新設置函數,如果事情變得很糟,驅動程序可以試圖重新設置網卡作為最後防線。一般在發送超時或類似情況下如此進行。也是一個讀取網卡統計寄存器的函數,如果是這樣配備的話。;


4;3Com的技術信息;

如果對3Com網卡驅動程序的工作感興趣,可以從3Com公司獲取技術資料。Cameron友好地告訴了我們該如何做:;

在我們的“技術參考文獻”裡給出了3Com的以太網適配器驅動程序程序員需要了解的資料。這些手冊描述了板上的程序員接口,但沒有提及診斷、安裝程序等終端用戶所看到的東西。;

網絡適配器分部的市場部有技術參考資料分發。為了使這個計劃更有效,我們把它集中到一個稱作“CardFacts”的自動電話系統裡。你可以打電話來,然後它把資料傳真給你。要索取技術參考資料,打電話到408-727-7021。索取開發人員的訂單,資料號是9070。在打電話前准備好你的傳真號碼。填完訂單後把它傳真到408-764-5004。手冊會由聯邦速遞的次日服務送到。;

有人認為我們的手冊不該免費,他們也在尋找此系統過於昂貴或占用的時間和努力太多的證據。到目前為止,3Com的顧客確實很好,向我們提出的要求也很合理。我們需要你們的繼續合作並把這樣的服務維持下去。;


5;基於AMD;PCnet/LANCE的網卡的注意事項;

AMD的LANCE(以太網的局域網控制器)是最早提供的,已經被“PCnet-ISA”芯片所取代,否則又名為79C960。注意,名稱“LANCE”有毛病,有些人會用老名稱稱呼新芯片。AMD的網絡產品分部的Dave;Roberts友好地提供了下面有關該芯片的信息:;

“從功能上來看,它等同與NE1500。它的寄存器組與使用附加1500/2100結構的老式LANCE一樣。PCnet-ISA可以使用較早的1500/2100驅動程序。NE1500和NE2100的結構基本上是相同的。開始Novell把它稱為2100,但後來想區分同軸電纜與10BASE-T網卡。屬於10BASE-T的就只采用1500范圍的編號。這是僅有的區別。;

許多公司提供基於PCnet-ISA的產品,包括HP、Racal-Datacom、Allied;Telesis、Boca;Research、Kingston;Technology等等。除了有些制造商增加了“無跳線”特性允許軟件配置網卡外,這些網卡基本上都是一樣的。大多數制造商沒有增加這一特性。AMD提供了一個使用PCnet-ISA的網卡的標准設計軟件包,許多制造商不加改變地直接使用我們的設計。這也就是說,如果想編寫大多數基於PCnet-ISA的網卡的驅動程序,只需要從AMD獲取數據資料。打電話給我們的資料分發中心(800)222-9323,索取PCnet-ISA的數據資料Am79C960。這是免費的。;

要迅速了解一塊網卡是否“標准”網卡只需要看一下它。如果是標准的,網卡上只有一塊大的芯片、一塊晶振、一塊小的IEEE地址PROM、可能還有一個啟動ROM的插座和一個連接器(依照提供的媒介選項可能是1、2或3)。注意,如果是同軸電纜網卡,卡上就應該有一些收發器緩存,它們靠近連接器,遠離PCnet-ISA。”;

一個可能的網卡黑客需要注意,不同的LANCE產品采用不同的
copyright © 萬盛學電腦網 all rights reserved