Linux以太網-HOWTO by Paul Gortmaker v2.7, 5 May 1999 _________________________________________________________________ 本文為以太網-HOWTO,匯集了哪些以太網裝置可以用在Linux上,以及如何 進行 設置的信息。請注意本文側重于以太網卡的硬件與底層驅動方面的內 容,并未涵 蓋諸如ifconfig和route等軟件方面的問題。對于那 些問題,請參 閱Network-HOWTO。 _________________________________________________________________ 1. 導言 * 1.1 本文檔的新版本 * 1.2 以太網-HOWTO的用法 * 1.3 幫幫我 - 網卡沒反應! 2. 該為Linux買什么網卡? * 2.1 哪些驅動程序是穩定的? * 2.2 8比特卡與16比特網卡 * 2.3 32比特(VLB/EISA/PCI)以太網卡 * 2.4 可用的100Mbs網卡及其驅動程序 * 2.5 100VG與100BaseT * 2.6 網卡應當支持的線纜類型 3. 常見問題 * 3.1 Alpha驅動程序──獲取與使用 * 3.2 一台機器使用多個以太網卡 * 3.3 這個以太東東不干活。為什么? * 3.4 NE1000/NE2000網卡(及其兼容卡)的問題 * 3.5 SMC Ultra/EtherEZ和WD80*3網卡的問題 * 3.6 3Com網卡的問題 * 3.7 非特定網卡的FAQs 4. 性能小技巧 * 4.1 一般概念 * 4.2 ISA網卡和ISA總線速度 * 4.3 設置TCP的Rx窗口 * 4.4 增強NFS性能 5. 有關銷售商/制造廠家/型號的信息 * 5.1 3Com * 5.2 Accton * 5.3 Allied Telesyn/Telesis * 5.4 AMD / Advanced Micro Devices * 5.5 Ansel Communications * 5.6 Apricot * 5.7 Arcnet * 5.8 AT&T * 5.9 Boca Research * 5.10 Cabletron * 5.11 Cogent * 5.12 Compaq * 5.13 Danpex * 5.14 D-Link * 5.15 DFI * 5.16 Digital / DEC * 5.17 Farallon * 5.18 Fujitsu * 5.19 Hewlett Packard * 5.20 IBM / International Business Machines * 5.21 ICL Ethernet Cards * 5.22 Intel Ethernet Cards * 5.23 Kingston * 5.24 LinkSys * 5.25 Microdyne * 5.26 Mylex * 5.27 Novell Ethernet, NExxxx及其相關兼容卡。 * 5.28 Proteon * 5.29 Pure Data * 5.30 Racal-Interlan * 5.31 RealTek * 5.32 Sager * 5.33 Schneider & Koch * 5.34 SEEQ * 5.35 SMC (Standard Microsystems Corp.) * 5.36 Texas Instruments * 5.37 Thomas Conrad * 5.38 VIA * 5.39 Western Digital * 5.40 Winbond * 5.41 Xircom * 5.42 Zenith * 5.43 Znyx * 5.44 識別未知網卡 * 5.45 非以太網設備的驅動程序 6. 電纜、同軸電纜、雙絞線 * 6.1 細纜以太網(thinnet) * 6.2 雙絞線 * 6.3 粗纜以太網 7. 軟件設置與網卡診斷 * 7.1 以太網卡的配置程序 * 7.2 以太網卡的診斷程序 8. 技朮信息 * 8.1 可編程I/O、共享內存與DMA * 8.2 編寫驅動程序 * 8.3 內核的驅動程序接口 * 8.4 3Com的技朮信息 * 8.5 基于AMD PCnet/LANCE的網卡的注意事項 * 8.6 廣播與混雜模式 * 8.7 Berkeley包過濾器(BPF) 9. 便攜式/筆記本電腦聯網 * 9.1 使用SLIP * 9.2 PCMCIA支持 * 9.3 插座內的ISA以太網卡。 * 9.4 袖珍/并口適配器。 10. 雜項 * 10.1 向內核傳遞以太網參數 * 10.2 把以太網驅動程序作為模塊使用 * 10.3 相關文檔 * 10.4 聲明與版權 * 10.5 結束語 _________________________________________________________________ 1. 導言 以太網-HOWTO包括了該買什么網卡與不該買什么網卡﹔如何設置網卡,怎 樣運行 多個網卡,以及其它常見錯誤和問題。它包含了目前所有最常見網 卡能夠得到支 持的細節資料。 它不包含有關軟件方面的內容,因為NET-3 Howto中包含了這些內容。 還要注意 這里不包括(或者至少不應當包括)那些非Linux特有的有關以太 網的一般問題 的解答。對于那些問題,可以參考comp.dcom.lans.ethernet 的FAQ中的大量資料 ,與所有其它新聞組FAQs一樣通過FTP到rtfm.mit.edu 獲取。 本修訂版覆蓋了Linux 2.2.7及其之前的內核發行版本。 以太網-HOWTO的作者為: Paul Gortmaker, p_gortmaker@yahoo.com 原始的ASCII版本的以太網-HOWTO的主要資料來源為: Donald J. Becker, becker@cesdis.gsfc.nasa.gov 感謝他編寫了Linux目前使用的絕大多數以太網卡驅動程序。他也是最初的 NFS服 務器的作者。謝謝Donald! Copyright (c) 1993-1999 本文的版權所有人為Paul Gortmaker。請閱讀 本文檔 結尾處的聲明與版權信息( [1]copyright) 以了解有關分發本文及通常的“我們 不對你試圖破壞......的行為負責” 之類的法律信息。 1.1 本文檔的新版本 本文檔的新版本可以從如下主頁獲得: [2]Ethernet-HOWTO 希望采用FTP方式或者希望獲取非HTML格式文檔的可使用以下站點: [3]Sunsite HOWTO Archive 這是“官方”站點 - 也可以在其它各種Linux WWW/ftp鏡像站點找到本文 檔。在 有了新資料或新驅動程序時本文檔將進行更新。如果你閱讀的文檔 已經存在6個 月以上了,那么你需要檢查一下是否已經有更新過的版本。 本文檔有多種格式(postscript,dvi,ASCII,HTML,等等)。推荐用 HTML格式 瀏覽(通過WWW瀏覽器)或Postscript/dvi格式瀏覽。這兩種格式 都包含有普通 文本ASCII格式無法提供的交叉引用功能。 1.2 以太網-HOWTO的用法 由于本指南越來越大,你可能不希望花一個下午從頭讀到尾。而令人高興 的是你 不必閱讀全部內容。HTML和Postscript/dvi版本都有內容列表, 可以幫助你更快 地找到所需的內容。 可能你是由于無法使網卡工作,而且不知道該怎么做或者如何檢查,才來 閱讀本 文檔的。下一節( [4]幫幫我 - 網卡沒反應!) 就是針對Linux初學者并給出正確 的指引。 經常有一些問題被不同的人問了一遍又一遍。可能你碰到的某個問題 就是常見問 題之一,而且在本文檔的FAQ部分 ( [5]常見問題)已經有了答案。每個人在發文 尋求幫助 之前都最好先看一下這一節。 如果你還沒有網卡,那么你可能想從決定買網卡開始。 ( [6]該為Linux買什么網 卡?) 如果你已經有了一塊以太網卡,但不能確定是否可以在Linux上使用它,那 么你 可能想讀一下包含每一個制造廠家及其網卡的特定信息的章節。 ( [7]有關銷售 商/制造廠家/型號的信息) 如果你對Linux設備驅動程序的一些技朮細節感興趣,那么你可以瀏覽有此 類信 息的章節。 ( [8]技朮信息) 1.3 幫幫我 - 網卡沒反應! 好,別緊張。下面就告訴你如何解決問題,即使你此前對Linux或以太網硬 件一 無所知。 首先你需要弄清楚你的網卡類型,Linux是否有此類型網卡的驅動程序。主 機在 控制不同的網卡時使用的方法一般也不一樣,而Linux驅動程序(如果 有的話) 就以允許Linux使用此卡的格式包含了這樣的控制信息。如果你沒 有手冊一類的 東西讓你知道網卡的類型,那么你可以嘗試處理“神秘”網 卡的章節 (參考章節 : [9]識別未知網卡)。 現在你知道了你的網卡類型,閱讀特定網卡章節中有關你的網卡的細節(參 考章 節: [10]有關銷售商/制造廠家/型號的信息), 那里以字母順序列出了網卡制 造廠家、各自的類型號以及是否有Linux驅動 程序。如果在列表中被表明“不支 持”,你就可以放棄了。如果從中找不 到你的網卡,那么看一下你的網卡手冊是 否說它與某個已知網卡類型“兼 容”。例如至少有几百種網卡與原來的Novell NE2000設計兼容。 假設你已經發現了你的網卡有Linux驅動程序,現在就找到并利用它。因為 Linux有你的網卡的驅動程序并不意味著它存在每一個內核中。(內 核是啟動時 最先載入的操作系統核心,包含各種硬件的驅動程序,以及其 它等等。)可能只 有很少几個預先生成的內核,和一大批較小的作為分立 模塊的驅動程序,或者是 許多的內核,覆蓋了大量內建驅動程序的組合, 這都完全取決于是誰生成了你所 使用的Linux發行版本。 現在的大多數Linux發行版本都提供大量較小的作為分立模塊的不同驅動程 序。 需要的模塊通常可以在啟動過程的后期載入,或者在存取特定設備時 以命令的形 式載入一個驅動程序。你需要在內核啟動后把該模塊加載到內 核上。查閱你所用 的發行版本中有關安裝和使用模塊的信息,并參考本文 檔的有關模塊章節。 ( [11]把以太網驅動程序作為模塊使用) 如果你沒有找到包含你的網卡驅動程序的已生成內核,也沒有找到該驅動 程序的 模塊形式,那么可能是你的網卡不夠常見,而且需要你自己生成一 個包含該驅動 程序的內核。只要你已經安裝了Linux,生成一個定制的內核 一點兒都不難。你 只要對內核需要包含些什么回答是或者不是,然后讓它 生成就行了。有一 個Kernel-HowTo可以幫助你。 此時你還需要以某種方式啟動內建了你的驅動程序的內核,或者以模塊的 形式載 入驅動程序。大約人們碰到的問題有一半兒出在沒有以這種或那種 方式載入驅動 程序,所以你會發現網卡現在工作了。 如果它還不工作,那么你需要証實一下內核確實檢測到了網卡。要做到這 一點, 你需要在系統啟動以及所有模塊載入之后鍵入dmesg | more。 這可以讓你查看啟 動過程中內核所顯示的啟動信息。如果網卡被檢測到, 你可以從中找到以eth0開 頭的網卡驅動程序顯示信息,指出網卡 所使用的驅動程序名稱和硬件參數(中斷 設置、I/O地址等等)。(注意: 在啟動時,Linux會列出所有系統中安裝的PCI 卡,無論是否有驅動程序 -- 不要把這個誤認為其后的驅動程序檢測!) 如果你沒看到這樣的驅動程序識別信息,那么驅動程序就沒有檢測到你的 網卡, 這就是問題所在。查看FAQ( [12]常見問題)尋找 網卡未檢測到時該做些什么。如 果你的網卡是NE2000兼容的,在FAQ中有一 些有關NE2000網卡檢測的技巧。 如果網卡被檢測到了,但檢測信息報告了一些錯誤,比如資源沖突,那么 驅動程 序可能無法正常初始化,網卡還是不可用。這一類的最常見錯誤信 息也在FAQ中 列出來了,并給出了相應的解決方案。 如果檢測信息看起來沒問題,那么再檢查一下驅動程序報告的網卡資源是 否與網 卡的物理設置一致(網卡的物理設置或者是通過網卡上的跳線,或 者是網卡制造 廠家提供的軟件工具完成。)它們必須完全一致。例如,網 卡的跳線或配置 為IRQ 15,而驅動程序在啟動信息中報告為IRQ 10,那么 就會出問題。在FAQ中 討論了最常見的驅動程序錯誤地檢測各種網卡配置信 息的情況。 現在你已經使你的網卡以正確的參數被檢測到了,但愿一切正常。如果還 有問題 ,那么或者是軟件配置有錯,或者是硬件配置有錯。軟件配置錯誤 就是 在ifconfig和route命令中沒有設置正確的網絡地址,其處 理細節可以 在Network HowTo和“Network Administrator's Guide”中找 到,它們可能都在 你用來安裝的CD-ROM上。 硬件配置錯誤是某些資源沖突或忘記配置(即在啟動時沒檢測到驅動程序), 使 網卡無法正常工作。通常可以用几種不同的方法來檢查。(1) 在 ifconfig試圖打 開設備來使用時報告出錯信息,如“SIOCSFFLAGS: Try again”。(2) 驅動程序 報告eth0出錯信息(用 dmesg | more查看)或者每次試圖發送或接受數據時奇怪 的不一 致。(3) 鍵入cat /proc/net/dev來顯示eth0的errs、drop、 fifo 、frame或carrier列中的非零數字。(4) 鍵入 cat /proc/interrupts顯示網卡的 零中斷計數。大多數典型的硬 件配置錯誤也在FAQ中進行了討論。 好吧,如果你現在還有麻煩,閱讀本文檔的FAQ,閱讀有關銷售商章節中有 關你 的網卡的細節,如果問題還沒解決,那么你只好求助于某個相應 的新聞組了。在 求助文章中請給出所有相關的細節資料,比如網卡商標、 內核版本、驅動程序的 啟動信息、cat /proc/net/dev的輸出、 清晰的問題描述,當然還有你在試圖解 決問題時嘗試采用的方法。 你可能會奇怪有那么多的人發出諸如“Can someone help me? My ethernet doesn't work.”而沒有其它內容的無用信件。新聞組的讀者一般會忽略掉 這些 愚蠢的信件,而詳細的有內容的問題描述則會讓“Linux大拿”立即指 出你的問 題所在。 2. 該為Linux買什么網卡? 這個問題的答案很大程度取決于你希望用網絡連接干些什么,以及會遇到 多大的 數據流量。 如果你只想作為一個用戶偶爾使用一下FTP或WWW,那么即使是8比特的老ISA 網卡 都能滿足你的需要。 如果你想建立一個服務器,并要求接收或發送網絡數據給CPU帶來的負載最 小, 那么你可能需要看一下使用具有總線控制能力的芯片的PCI網卡,比如 DEC tulip (21xxx)芯片,或者AMD PCnet-PCI芯片。 如果你的需求在這二者之間,那么使用有穩定的驅動程序的便宜的PCI網卡 或16 比特的ISA網卡就可以了。 2.1 哪些驅動程序是穩定的? 對于16比特的ISA網卡,下面的驅動程序非常成熟,如果你買的網卡使用這 些驅 動程序,那么你應該不會遇到任何問題。 SMC-Ultra/EtherEZ, SMC-Elite (WD80x3), 3c509, Lance, NE2000. 這并不是說所有其它的驅動程序都不穩定,而是因為這些是Linux驅動程序 中最 老最常用的,也是最安全的選擇。 注意:某些蹩腳的主板在ISA Lance網卡進行總線控制時會出問題,某些蹩 腳 的NE2000系列網卡在啟動檢測時會引起麻煩。 最常用的Linux PCI驅動程序大概是3Com Vortex/Boomerang (3c59x/3c9xx)、 DEC tulip (21xxx)和Intel EtherExpressPro 100。各種PCI-NE2000系列 網卡也 很普遍,但不推荐購買這類網卡,除非你認為價格低廉比擁有現代 高性能設計的 網卡更重要。 2.2 8比特卡與16比特網卡 你可能不會再買一個新的8比特ISA以太網卡了,但在几年之內你會發現計 算機物 物交換市場一類的地方有很多很便宜的這種卡。這使得它們在“家 用以太網”系 統中很常見。對于16比特的ISA網卡來說也是一樣的,因為現 在PCI卡已經很普遍 了。 對于較低的或平均的應用,一些可以提供足夠性能的8比特網卡是wd8003、 3c503和ne1000。3c501的性能較差,而且要避免使用那些12年前的XT時代 的低性 能紀念品。(可以把它們送給Alan,他在收集......) 8比特的數據通道不會對性能造成太大損害,你依然可以從一個快的主機上 的8比 特wd8003網卡(使用快的ISA總線)獲得大約500到800kB/s的ftp下載 速度。如果 你的所有網絡流量几乎都是來自遠端站點,那么數據通道上的 瓶頸將發生在其它 地方,只有在進行本地子網操作時你才會注意到不同網 卡間的速度差別。 2.3 32比特(VLB/EISA/PCI)以太網卡 注意,10Mbs網絡并不一定要求32比特的接口。參考 [13]可編程I/O、共享內存 與DMA以了解為什么 8MHz的ISA總線上10Mbps的以太網卡并非真正的瓶頸。盡管使 用快的總線的 以太網卡并不一定帶來更快的數據傳輸,但會減少CPU負載,這對 多用戶系 統來說是件好事。 當然,對于現在普通的100Mbps網絡,32比特接口是充分使用所有帶寬的必 要條 件。AMD有32比特的PCnet-VLB和PCnet-PCI芯片。參考 [14]AMD PCnet-32以了 解LANCE/PCnet-ISA芯片 的32比特版本的有關信息。 有能力的用戶也可以選擇DEC的21xxx PCI“tulip”芯片(參考 [15]DEC 21040) 。許多制造廠家生產使用這種 芯片的網卡,這樣的無名網卡的價格一般也相當便 宜。 3Com的“Vortex”和“Boomerang”PCI網卡也可以選擇使用,如果你善于 砍價的 話,其價格也是相當便宜的。(參考 [16]3c590/3c595) Intel的EtherExpress Pro 10/100 PCI網卡據說在Linux上也運行得很好。 (參 考 [17]EtherExpress) 許多兼容卡的制造廠家開始制造基于RealTek或Winbond芯片的PCI NE2000 兼容卡 。據說v2.0.31及更新版本內核Linux的ne2000驅動程序也支持這些 網卡。但你只 從更快的總線接口中獲益,因為這種網卡依然使用老式的 ne2000驅動程序接口。 由于在v2.0.34(及更新版本)中也為這些網卡提供 了獨立的PCI專用驅動程 序ne2k-pci.c,其效果要比ISA的ne.c 驅動程序有顯著提高。 2.4 可用的100Mbs網卡及其驅動程序 目前支持的100Mbs硬件如下:使用DEC的21140芯片的網卡﹔3c595/3c90x Vortex 網卡﹔EtherExpressPro10/100B﹔PCnet-FAST﹔SMC的83c170 (epic100)和HP 的100VG ANY-LAN。 看一下本文檔里有關每一種產品的銷售商的相關信息。也可以訪問以下網址: [18]Linux and 100Mbs Ethernet [19]Donald's 100VG Page [20]Dan Kegel's Fast Ethernet Page 2.5 100VG與100BaseT 100BaseT遠比100VG有名,下面的簡介出自Donald的comp.os.linux上 的信件,它 很好地總結了這一情況: “對于不了解的人來說,有兩種競爭的100Mbs以太網標准:100VG(所謂的 100baseVG和100VG-AnyLAN)和100baseT(線纜類型分為100baseTx、 100baseT4 和100baseFx)。 100VG先出現在市場上,而且我覺得它的設計要比100baseTx強。我曾經認 為它會 勝出,但明顯它不會獲勝了。HP等公司犯了几個錯誤: 1) 推遲發布標准以適應IBM并支持令牌環幀。這“在當時看起來是個好主 意”, 因為它可以使令牌環用戶升級,而管理者不用承認自己犯了一個代 價高昂的錯誤 :使用錯誤的技朮。但這沒有帶來任何好處,因為兩種幀的 類型無法在一個網絡 里共存,令牌環錯綜復雜,IBM則轉而支持100baseT。 2) 只生產ISA和EISA網卡。(僅在不久前才宣布了一個PCI型號。)ISA總 線對 于100mbs來說太慢了,而EISA機器几乎不存在了。那時VLB已是使用 PCI的普通、 快速和廉價的選擇,但“老經驗”則認為服務器還會繼續使用 更昂貴的EISA總線 。 3) 沒有送給我一本數據手冊。沒錯,這才是100VGs沒落的真正原因 :-)。 我到 處打電話索要編程資料,只拿到几頁AT&T的描述Regatta芯片組如 何神奇的彩色 宣傳手冊。” 2.6 網卡應當支持的線纜類型 如果你要建立一個小的“個人”網絡,那么可能你想使用細纜以太網。這 是使用 標准BNC連接器的典型情況。使用BNC(金屬的推進和旋轉鎖定)連 接器的細纜以 太網(RG-58同軸電纜)從技朮上來說叫做10Base2。 大多數以太網卡都有價格高$10-$20的“Combo”版本。它們同時提供雙絞 線和細 纜以太網收發器,可以讓你以后改變主意。 使用RJ-45(大的電話插頭)連接器的雙絞線從技朮上來說叫做10BaseT。 你可能 聽到過它被稱為UTP(無屏蔽雙絞線)。 只會在早期的裝置上發現的老式粗纜以太網(10mm同軸電纜)被稱為 10Base5。 在某些以太網卡上使用的15針D形插座是用來連接粗纜以太網和 外部收發器的。 大的社區裝置大多使用10BaseT,而不是10Base2。因為10Base2無法升級為 100Base之類的網絡。 參考 [21]電纜、同軸電纜......以了解有關以太網 線纜不同類型的情況。 3. 常見問題 這里是一些有關使用Linux進行以太網連接的常見問題。某些特定問題按照 制造 商進行分類。可能你想問的問題別人已經問過(而且被回答了!), 所以即使沒 有在這里找到你的答案,還可能在諸如 [22]Dejanews之類的新聞檔案 中找到你 所要的。 3.1 Alpha驅動程序──獲取與使用 我聽說我的網卡有一個更新的或初步的/alpha驅動程序。從哪兒得到它呢? 最新的“新”驅動程序可以在Donald的FTP站點: cesdis.gsfc.nasa.gov里面 的/pub/linux/下找到。因為事 情變化很頻繁,可能需要四處找一找。或者使 用WWW瀏覽器去: [23]Don's Linux Home Page 查找你想要的驅動程序更簡單一些。(留神WWW瀏覽器會悄悄地把源碼中的 TABs 替換為空格,等等 - 如果無法確定的話,使用FTP下載,至少也得用 WWW瀏覽器 的FTP URL。) 如果驅動程序確實是alpha版本,或pre-alpha版本,那么請恰當地對待它。 換句 話說,不要抱怨,因為你無法弄清用它能做些什么。同樣,如果它使 你的機器宕 機了,不要抱怨。相反,你應該發給我們一份材料組織很好的 Bug報告,如果是 一個補丁,那就更好! 注意,某些“可用”的實驗性/alpha驅動程序已經包含在標准的內核源碼 樹中。 在運行make config時你首先要回答的一個問題就是“Prompt for development and/or incomplete code/drivers”。在此你要回答 “Y”以包括任何alpha/實 驗性驅動程序。 3.2 一台機器使用多個以太網卡 做些什么才能讓Linux運行兩塊以太網卡? 這個問題的答案取決于驅動程序是否被用做可載入的模塊或者直接編譯進 了內核 。大多數Linux發行版本現在都使用模塊化的驅動程序。這樣就不用 發行許多內 核,每種內核設置一個不同的內建驅動程序。使用一個單一的 基本內核,如果特 定用戶系統需要,一旦系統啟動,就可以從驅動程序模 塊文件(通常存放 在/lib/modules/)中載入個別的驅動程序。 把驅動程序作為模塊使用: 對于PCI驅動程序,模塊通常會自動檢測該品牌類型 所有安裝的網卡。但對 于ISA網卡,探尋一個網卡是不安全的操作,因此你需要 提供網卡的I/O地 址以便模塊知道去哪里查找。這一信息存儲在文件 /etc/conf.modules中。 例如,如果一個用戶有兩塊ISA NE2000網卡,一塊在0x300,一塊在 0x240,它們 在/etc/conf.modules文件中顯示如下: alias eth0 ne alias eth1 ne options ne io=0x240,0x300 這几行的意義:就是說如果管理員(或內核)進行modprobe eth0或 者modprobe eth1,那么為eth0或者eth1載入ne.o驅 動程序。此外,在載入ne.o模塊時,使用 選項io=0x240,0x300, 這樣驅動程序就知道去哪里尋找網卡。注意0x很重要 - DOS里常用的 300h在這里沒有用。改變0x240和0x300的順序會使哪一塊 物理網卡 以eth0和eth1結尾發生改變。 同這個例子一樣,大多數ISA模塊驅動程序可以接受多個以逗號分隔的I/O 值以處 理多塊網卡。但是,某些(老的?)驅動程序,比如3c501.o模塊, 目前載入一 個模塊只能處理一塊網卡。這樣,要檢測兩塊網卡就必須載入 兩次該模塊。此時 ,文件/etc/conf.modules將如下所示: alias eth0 3c501 alias eth1 3c501 options eth0 -o 3c501-0 io=0x280 irq=5 options eth1 -o 3c501-1 io=0x300 irq=7 在此例中,選項-o用來給每個模塊實例一個唯一的名字,因為不能用 同一個名字 載入兩個模塊。選項irq=也是用來指定網卡設置的硬件IRQ。 (此方法也能用于 可接受多個以逗號分隔的I/O值的模塊,但這樣會使模塊 被不必要地載入兩次, 降低了效率。) 最后一個例子,假設用戶有一塊在0x350的3c503網卡和一塊在 0x280的SMC Elite16 (wd8013)網卡。則應該這樣: alias eth0 wd alias eth1 3c503 options wd io=0x280 options 3c503 io=0x350 對于PCI網卡,只要用alias語句把ethN接口和相應的驅動程序 名聯系起來就行了 ,因為PCI網卡的I/O地址可以被安全地檢測到。 可用的模塊一般存放在/lib/modules/`uname -r`/net下,這里 uname -r命令可 以得到內核的版本(比如2.0.34)。你可以在這里看 看哪一個驅動程序適合你的 網卡。一旦你在conf.modules文件里進行 了正確的設置,就可以用下面的方法檢 查一下: modprobe ethN dmesg | tail 這里“N”是你要檢測的以太網卡的接口號。 使用編譯進內核的驅動程序: 如果你需要的驅動程序編譯進了內核,那么處理多 塊以太網卡的接口已經 存在了。但缺省情況下只自動檢測一塊以太網卡。這樣就 避免了啟動 時檢測敏感網卡可能引起的麻煩。 (注意:在2.1.x之后的內核中,啟動檢測被分為安全和不安全的兩類,所 有安 全的檢測(如對PCI和EISA網卡)可以自動找到所有相關的網卡。在至 少有一 塊ISA網卡的多網卡系統中還需要進行以下的處理。) 有兩種方法可以啟動對第二塊(或第三塊等等)網卡的自動檢測。最簡單 的方法 是向內核傳遞啟動參數,由LILO完成。使用ether=0,0,eth1這 樣簡單的啟動參數 就可以完成對第二塊網卡的檢測。此時按照啟動時找到 的網卡順序分配eth0 和eth1。假如你想讓0x300處的網卡 為eth0,而0x280處的網卡為eth1,那么可以 使用 LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1 命令ether=可以接受的參數并不僅限于如上所示的IRQ + I/O + name。 請參看 [24]傳遞以太網參數......以了解全部的句法、 網卡特定參數和LILO使用技巧。 這些啟動參數可以固定,這樣就不用每次都必須重新敲一遍。參看LILO手 冊中有 關LILO的配置選項“append”。 第二種方法(不建議使用)是編輯文件Space.c并用零替換I/O地址中 的0xffe0入 口。0xffe0入口是用來告訴內核不要檢測該設備 -- 把它替換為零就啟動了對該 設備的自動檢測。 注意,如果想用Linux作為兩個網絡間的路由,你需要啟動IP轉發并重新編 譯內 核。一般在一台老式的AT/286上運行“kbridge”一類的軟件就相當不 錯了。 如果你是一邊在網絡沖浪,一邊看本文檔,最好去閱讀Donald的WWW 站點上 的mini-howto。看一下 [25]Multiple Ethercards. 3.3 這個以太東東不干活。為什么? 如上所述,ether=命令只對編譯進了內核的驅動程序起作用。 現在大多數的發行 版本都用模塊的方式使用驅動程序,所以很少再使用 ether=命令了。(某些早期 文檔需要更新以反映這一變化。)如果你 想使用模塊化的以太網驅動程序的選項 ,必須修改 /etc/conf.modules文件。 如果你是使用編譯的驅動程序,而且已經把ether=加進了LILO 配置文件,需要重 新運行lilo使更新后的配置文件生效。 3.4 NE1000/NE2000網卡(及其兼容卡)的問題 問題: 在用v2.0.x啟動時沒有檢測到PCI NE2000兼容網卡。 原因: 在v2.0.30之前的ne.c驅動程序只知道基于RealTek 8029的兼容網卡 的PCI ID號。在此只后才出現了使用其它PCI ID號的PCI NE2000兼容網卡, 所以 驅動程序無法檢測這些網卡。 解決方案: 最簡單的方法是把Linux內核升級到v2.0.31以上版本。它可以識別五 種不 同的NE2000-PCI芯片的ID號,在啟動或載入模塊時自動檢測到它們。如果 你升級到了2.0.34以上版本,會有一個比原先的ISA/PCI驅動程序稍小但更 高效 的PCI專用NE2000驅動程序。 問題: 啟動時PCI NE2000兼容網卡被報告為ne1000(8比特網卡!)或者 在v2.0.x 下載入ne.o模塊不起作用。 原因: 某些PCI兼容網卡不支持字節存取(因此不是百分之百的兼容NE2000)。 這 使它在檢測時被誤認為NE1000網卡。 解決方案: 你需要升級到v2.0.31以上版本。現在的驅動程序會檢測到這種硬 件Bug。 問題: PCI NE2000網卡的性能很差,即使按照性能技巧章節所說的減小了窗口大 小。 原因: 十多年前設計和出售的初始8390芯片的技朮數據手冊上提到,為了得到最 高的可靠性,在每次寫操作之前需要一個讀操作。驅動程序能夠輕易地做 到這一 點,但從v1.2內核時代起,缺省情況下取消了這一操作。有一個用 戶報告說重新 啟用這一“錯誤的特性”就可以改善廉價的PCI NE2000兼容 網卡的性能。 解決方案: 由于只有一個用戶提出報告把它作為解決方案,不要對此寄予太大的 希望。 重新使用寫之前的讀操作可以簡單地編輯linux/drivers/net/下 的驅動 程序文件,取消包含NE_RW_BUGFIX的那一行的注釋,然后重建 內核或載入相應的 模塊。如果這樣確實有效,請給我發一封e-mail,描述 性能上的差異和你所使用 的網卡/芯片類型。(對ne2k-pci.c驅動程 序也可以如法炮制。) 問題: ne2k-pci.c驅動程序對PCI NE2000網卡報告諸如 timeout waiting for Tx RDC錯誤信息,無法正常工作。 原因: 你的網卡或網卡到PCI總線的連接無法處理該驅動程序使用的長字I/O優化 。 解決方案: 首先,檢查BIOS/CMOS設置,看看與PCI總線相關的計時對于可靠的操 作是 否過于嚴格了。否則,使用ISA/PCI的ne.c驅動程序(或者刪除 ne2k-pci.c中的#define USE_LONGIO),使你的網卡可用。 Probem: 沒檢測到ISA的即插即用NE2000網卡(如RealTek 8019)。 原因: 初始的NE2000特性不支持即插即用,因此Linux的NE2000驅動程序也不支 持 即插即用。 解決方案: 使用網卡所附的DOS配置盤取消PnP,并為該網卡設置一個指定的I/O 地址和 IRQ。在/etc/conf.modules里增加這樣的一行 options ne io=0xNNN,其 中0xNNN是你為網卡設置的16進制I/O 地址。(假設你使用的是模塊化驅動程序﹔ 否則,在啟動時使用一個 ether=0,0xNNN,eth0參數。你也可以進入BIOS/CMOS設 置,把IRQ從 PnP改為Legacy-ISA。如果你需要為兼容其它的操作系統而保留PnP 設置, 那么你可以看一下isapnptools軟件包。使用man isapnp看看它 是否已經 安裝在你的系統上了。如果沒有,瀏覽一下下面的連接: [26]ISA PNP Tools 問題: 在啟動檢測時NE*000驅動程序報告“not found (no reset ack)”。 原因: 這跟上面所說的改動有關。在証實8390處于所檢測的I/O地址之后,進行 重 新設置。在網卡完成重新設置后,應當通知重新設置完成。你的網卡沒有 通 知,所以驅動程序認為不存在NE網卡。 解決方案: 你可以在啟動時使用一個未被使用的mem_end的16進制值0xbad, 告 訴驅動程序你有一個壞網卡。在使用0xbad覆蓋時你必須為網 卡提供一個非零 的I/O地址。例如,在0x340的網卡不響應重新設置時, 則使用如下方法: LILO: linux ether=0,0x340,0,0xbad,eth0 這樣,即使你的網卡不響應重新設置,網卡檢測還能繼續下去。如果你是 以模塊 方式使用驅動程序,那么可以象提供I/O地址一樣提供選項 bad=0xbad。 問題: NE*000網卡使機器在第一次網絡訪問時死機。 原因: 這個問題從早期的1.1.57內核到現在都出現過,而且只在有限的几種軟件 配置的兼容網卡上出現。看來是需要用某些特殊的方法來初始化它們。 解決方案: 有几個人報告在熱啟動(即loadlin或Ctrl-Alt-Del)Linux之前,運 行提 供的DOS軟件配置程序或提供的DOS驅動程序可以使網卡工作。這表明這些 卡需要以某種特殊的方式初始化,與當前的Linux驅動程序稍有區別。 問題: 在0x360的NE*000以太網卡沒有檢測到。 原因: 你的NE2000網卡在I/O空間占據了0x20個字節,使它與0x378處 的并口發 生沖突。其它可能的設備是0x370處的第二個軟盤控制器 (如果有的話),以 及0x376--0x377處的第二個IDE控制器。如果該 口已被其它驅動程序注冊,內核 將不再進行檢測。 解決方案: 或者把你的網卡移到0x280, 0x340, 0x320一類的地址,或者在編譯 時不支持并行打印機。 問題: 每次打印時網絡都斷開(NE2000)。 原因: 與上一個問題相同,但你的內核比較老,不支持對重疊I/O區域的檢查。 使 用如上的解決方案,有空時獲取一個新的內核。 問題: 沒檢測到0xNNN: 00 00 C5 ... 處的NE*000以太網卡。(非法標識yy zz ) 原因: 首先,你是否在地址0xNNN處有一個NE1000或NE2000網卡?如果有,報告 的 硬件地址是否象一個合法地址?如果是的話,那么你的NE*000兼容網卡很 差 勁。所有的NE*000兼容網卡都假定網卡上的SA PROM的第14和15字節為 0x57。而 你的網卡不是這樣 -- 它的值為“yy zz”。 解決方案: 有兩種解決方法。最簡單的方法就是如上所述的“no reset ack”解 決方 案,使用一個0xbad的mem_end值。這樣在提供一個非零的I/O地址時 就可以 忽略標識檢查。此方法無需重新編譯內核。 第二種方法(對黑客)需要修改驅動程序,并重新編譯內核(或模塊)。 在驅動 程序(/usr/src/linux/drivers/net/ne.c)的42行有一個“Hall of Shame”列 表。這個表是用來檢測那些差勁的兼容網卡的。例如,DFI網 卡在PROM的前三個 字節使用“DFI”,而不是象要求的那樣在第14和15字節 使用0x57。 問題: 機器在啟動時出現“8390...”或“WD....”信息后死機。拔掉NE2000就 好 了。 解決方案: 把你的NE2000地址改為0x340一類的地址。此外,你可以在和 “ether=” 參數一起使用“reserve=”啟動參數,保護網卡不受其它設備驅動程 序檢 測的影響。 原因: 你的NE2000兼容網卡兼容性不好。一個激活的NE2000是個無底洞,會使其 它的驅動程序陷在其空間內進行自動檢測。把NE2000改到一個不常用的地 址就可 以從其它的自動檢測中消除這一陷阱,機器也就可以啟動了。 問題: 機器啟動時在進行SCSI檢測時死機。 原因: 這個問題跟上面的一樣,改變以太網卡的地址,或使用reserve/ether啟 動 參數。 問題: 機器啟動時在進行聲卡檢測時死機。 原因: 不對,實際上是發生在靜默方式的SCSI檢測過程中,與上面的問題一樣。 問題: 啟動時檢測不到NE2000 -- 根本就沒有啟動信息。 解決方案: 因為造成檢測不到的原因很多,所以沒有“神奇的解決方案”。下面 列出 了可能有所幫助的一些措施。 1) 構建一個只包含需要的設備驅動程序的內核。証實你確實是從新內核啟 動的 。忘記運行lilo等會使你從老的內核啟動。(仔細觀察啟動時報告的 構建時間/ 日期。)聽起來很明顯,但我們以前都犯過這個錯。通過檢查 System.map文件 里ne_probe一類的名稱,確定驅動程序已包含 在新的內核里。 2) 仔細觀察啟動信息。看看它是否提及正在進行諸如“NE*000 probe at 0xNNN: not found (blah blah)”一類的ne2k檢測,或者就是靜悄悄地失 敗了。 這里的區別很大。使用dmesg|more在登錄后瀏覽啟動信息, 或者在啟動完成顯示 登錄提示符時使用Shift-PgUp卷回屏幕。 3) 啟動后,執行cat /proc/ioports,証實網卡要求的全部I/O 空間是空的。如 果網卡在0x300,那么ne2k驅動程序要求的空間為 0x300-0x31f。如果其它設備的 驅動程序注冊了其中的一個口,就不 會對該地址進行檢測,而是靜悄悄地檢測下 一個要檢測的地址。常見的情 況是lp驅動程序保留了 _________________________________________________________________ 0x378 _________________________________________________________________ ,或者第二個IDE通道保留了 0x376,這就使ne驅動程序停止檢測0x360-0x380。 4) 與上面一樣執行cat /proc/interrupts。確定沒有其它設備 注冊了你為以太 網卡設置的中斷。這種情況下,檢測可以進行,以太網卡 驅動程序會在啟動時大 聲抱怨無法得到所要求的IRQ中斷線。 5) 如果你還為驅動程序靜悄悄地失敗而苦惱,那么編輯并給檢測增加一些 printk()。比如,對于ne2k,你可以在linux/drivers/net/ne.c 中增加/刪除某 些行(用“+”或“-”表示),如下所示: _________________________________________________________________ int reg0 = inb_p(ioaddr); + printk("NE2k probe - now checking %x\n",ioaddr); - if (reg0 == 0xFF) + if (reg0 == 0xFF) { + printk("NE2k probe - got 0xFF (vacant I/O port)\n"); return ENODEV; + } _________________________________________________________________ 那么它就會輸出檢查的每一個口地址信息,你可以看到你的網卡地址是否 被檢測 了。 6) 你還可以從Don的ftp站點(在howto中也提及了)獲取ne2k的診斷程序, 看看 你在啟動進入Linux后能否用它檢測你的網卡。使用“-p 0xNNN” 選項告訴它在 哪里尋找你的網卡。(缺省情況下只檢測0x300,與啟 動時的探測不同,不會檢 測其它的地址。)在找到網卡時的輸出如下: _________________________________________________________________ Checking the ethercard at 0x300. Register 0x0d (0x30d) is 00 Passed initial NE2000 probe, value 00. 8390 registers: 0a 00 00 00 63 00 00 00 01 00 30 01 00 00 00 00 SA PROM 0: 00 00 00 00 c0 c0 b0 b0 05 05 65 65 05 05 20 20 SA PROM 0x10: 00 00 07 07 0d 0d 01 01 14 14 02 02 57 57 57 57 NE2000 found at 0x300, using start page 0x40 and end page 0x80. _________________________________________________________________ 你的注冊值和PROM值可能會不一樣。注意,對16比特網卡,所有PROM值都 增加一 倍,以太網卡地址(00:00:c0:b0:05:65)出現在第一行,加倍后的 0x57標識出 現在PROM的結尾。 在0x300處沒有安裝網卡時的輸出如下: _________________________________________________________________ Checking the ethercard at 0x300. Register 0x0d (0x30d) is ff Failed initial NE2000 probe, value ff. 8390 registers: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff SA PROM 0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff SA PROM 0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Invalid signature found, wordlength 2. _________________________________________________________________ 出現值0xff的原因是在讀取空I/O口時返回的就是該值。如果在檢測 的區域內有 其它硬件,你可以看到一些非0xff的值。 7) 嘗試在運行提供的DOS驅動程序或配置程序之后,從DOS啟動軟盤(通過 loadlin)熱啟動進入Linux。這可能會進行一些額外的(即非標准的) “魔法” 來初始化網卡。 8) 試一下Russ Nelson的ne2000.com包驅動程序,看它能否看見你的網卡 -- 如 果還不行,事情就不大妙了。例如: A:> ne2000 0x60 10 0x300 所用參數為軟件中斷向量、硬件IRQ和I/O地址。你可以從任意的msdos檔案 文件 中的pktdrv11.zip里找到它 -- 現在的版本大概是11以上了。 3.5 SMC Ultra/EtherEZ和WD80*3網卡的問題 問題: 你得到了如下信息: eth0: bogus packet size: 65531, status=0xff, nxpg=0xff 原因: 是共享內存的問題。 解決方案: 最普遍的原因是配置的PCI機器沒有映射到ISA內存設備里。因此你讀 到的 是PC的RAM(全都是0xff值),而不是存放接收數據包數據的網卡上 的RAM 。 另一個容易解決的典型問題是板卡沖突,在此區域有緩存或“shadow ROM”, 或 者你的ISA總線運行速度高于8Mhz。以太網卡上的內存失效的數目也令人 驚奇, 所以如果你的以太網卡有診斷程序的話,運行一下。 問題: SMC EtherEZ在非共享內存(PIO)模式下不工作。 原因: 老版本的Ultra驅動程序只支持共享內存模式下的操作。 解決方案: 版本2.0以上的內核所附驅動程序就支持可編程I/O模式的操作。升級 到 v2.0以上版本。 問題: 老的wd8003或可跳線的wd8013總是得到錯誤的IRQ。 原因: 老的wd8003網卡或可跳線的wd8013兼容卡沒有驅動程序可以從中讀取設置 的IRQ的EEPROM。如果驅動程序無法讀到IRQ,就嘗試用auto-IRQ發現它。 若auto-IRQ返回0,那么驅動程序就給8比特網卡分配IRQ 5,或者為16比特 網卡 分配IRQ 16。 解決方案: 使auto-IRQ代碼無效,并在你的模塊配置文件(對于內建的驅動程序 則通 過啟動參數)告訴內核你把網卡跳成了什么IRQ。 問題: SMC Ultra網卡被檢測成了wd8013,但IRQ和共享內存地址是錯的。 原因: Ultra網卡看起來跟wd8013很相象,如果內核里沒有Ultra驅動程序,wd驅 動程序就會把ultra誤認為wd8013。ultra檢測在wd之前,所以一般不會出 問題 。ultra在EEPROM保存的IRQ和內存地址與wd8013保存的位置不同,所 以報告的值 是假的。 解決方案: 只保留需要的驅動程序重新編譯內核。如果你在同一台機器上同時使 用wd 和ultra網卡,并使用模塊,那么首先載入ultra模塊就行了。 3.6 3Com網卡的問題 問題: 3c503選擇了IRQ N,但其它設備也需要IRQ N。(比如CD ROM驅動程序、 modem等。)可以不編譯進內核就解決這個問題嗎? 解決方案: 3c503驅動程序按照順序{5, 9/2, 3, 4}檢測空閑的IRQ線,從中找到 一個 未被使用的IRQ。在網卡被ifconfig操作配置時選擇中斷IRQ。 如果你使用的是模塊化的驅動程序,可以用模塊參數設置各種情況,包括 中 斷IRQ的值。 下面的語句選擇IRQ9、基址0x300、和 if_port #1(外部收發器 )。 io=0x300 irq=9 xcvr=1 另外,如果驅動程序被編譯進了內核,你還可以通過LILO在啟動時傳遞參 數來設 置同樣的值。 LILO: linux ether=9,0x300,0,1,eth0 下面的語句選擇IRQ3、檢測基址、和缺省if_port #0 (外部收 發器)。 LILO: linux ether=3,0,0,0,eth0 問題: 3c503: configured interrupt X invalid, will use autoIRQ. 原因: 3c503網卡只能使用中斷IRQ{5, 2/9, 3, 4}中的一個(這些是網卡所能連 接的中斷線。)如果你使用一個不在其中的IRQ值,就會得到如上的提示。 一般 情況下,沒必要為3c503指定中斷值。3c503會在ifconfig配置時使用 autoIRQ, 并從IRQ{5, 2/9, 3, 4}中選擇一個。 解決方案: 使用上述的合法IRQ值,或者不指定IRQ以啟用autoIRQ。 問題: 提供的3c503驅動程序無法使用AUI(粗纜以太網)端口。怎樣才能不使用 缺省的細纜以太網端口而選擇AUI端口? 解決方案: 3c503的AUI端口對于內建驅動程序可以在啟動時選擇,對于模塊化驅 動程 序可以在插入模塊時選擇。這一選擇會覆蓋未使用的dev->rmem_start 變量 的低比特位,所以啟動參數: LILO: linux ether=0,0,0,1,eth0 可以對內建在內核的驅動程序起作用。 要在載入模塊時指定AUI端口,只需把xcvr=1附加在模塊選項包含你 的I/O和IRQ 值的那一行就行了。 3.7 非特定網卡的FAQs Linux與ISA的即插即用以太網卡。 要獲得最佳效果(問題最少),推荐使用隨網卡附的程序(通常是DOS程序) 取 消PnP機制,并給網卡設置一個固定的I/O地址和IRQ。確定你使用的I/O 地址在啟 動時被驅動程序檢測到,如果使用模塊,則在 /etc/conf.modules中使用io=選項 提供地址。你也可以進 入BIOS/CMOS設置,把IRQ從PnP改為Legacy-ISA(如果你 的計算機有此選項 的話)。 注意,運行基于DOS的配置程序一般并不需要安裝DOS。可以用DOS軟盤啟動, 然 后從提供的軟盤上運行它們就可以了。你可以自由地下載OpenDOS和FreeDOS。 如果需要使用PnP以與其它操作系統兼容,你就得每次啟動時都使用Linux 的isapnptools包配置網卡。你還需要確定為網卡選擇的I/O地址被驅動程 序檢測 到,或用io=選項提供I/O地址。 啟動時沒有檢測到以太網卡。 出現這個問題的常見原因是人們使用的內核不支持特定的網卡。對于模塊 化的內 核,這一般說明要求的模塊尚未被載入,或者需要用模塊選項指定 其I/O地址。 如果你使用的是模塊化的內核,就象大多數用Linux發行版安裝的那樣,試 著用 一下該發行版的配置工具來選擇網卡所用模塊。對于ISA網卡一個較好 的主意是 ,確定網卡的I/O地址,如果配置工具要求選項則把它作為一個選 項( 如io=0x340)加進去。如果沒有配置工具,那么你需要在 /etc/conf.modules里 添加正確的模塊名稱(及選項)-- 閱讀 man modprobe以了解更多的細節。 如果你使用的發行版套件里的預編譯內核,那么查看文檔以確定你安裝的 是哪一 種內核,以及是否支持你所用的網卡。如果不支持的話,要么試著 找一個支持你 網卡的內核,要么自己生成一個內核。 只保留所需的驅動程序生成自己的內核是個聰明的主意,因為這會減小內 核大小 (為應用程序保留寶貴的RAM!),減少打擾敏感硬件的設備檢測數 目。生成內 核并不象聽起來那么復雜。你只需要對一些有關你想要哪些驅 動程序的問題回答 是或不是,其它的事都由程序完成。 另一個主要原因是其它的設備占用了網卡所需的部分I/O空間。大多數網卡 在I/O空間里占用了16或32個字節。如果你的網卡設在0x300并需要32 個字節,那 么驅動程序就要求0x300-0x31f。如果某個其它設備驅動 程序注冊了哪怕其中一 個端口,驅動程序就不會對該地址進行檢測,而是 靜悄悄地進入下一個檢測地址 。所以,在啟動之后,運行一下 cat /proc/ioports以確定網卡要求的全部I/O空 間都是空的。 還有一個問題就是網卡跳到的I/O地址不是缺省檢測的地址。每個驅動程序 的檢 測地址列表可以很容易地在驅動程序源碼中的文本注釋里找到。即使 網卡設定 的I/O地址不在檢測地址列表上,你也可以在啟動時用ether= 命令提供(對內建 驅動程序),參見 [27]傳遞以太網參數...。模塊化的驅動程序可以在 /etc/conf.modules里使用io=選項指定一個非缺省檢測的 地址。 ifconfig報告了錯誤的網卡I/O地址。 這不可能。你只是理解錯誤。這不是一個Bug,而且報告的數字是正 確的。這只 出現在某些基于8390的網卡上(如wd80x3、smc-ultra等),實 際的8390芯片位 于第一個給定I/O端口加上一個偏移量處。此偏移量保存在 dev->base_addr里, 也就是ifconfig報告的值。如果你想看到 網卡使用的全部端口,試一下cat /proc/ioports以得到想要的 數字。 PCI機器探測到了網卡,但驅動程序檢測失敗。 某些PCI的BIOS在上電時沒有啟用所有的PCI卡,特別是在使用了“PNP OS” 的BIOS選項情況下。這一特性是為了支持當前依然使用某些實模式驅動程 序 的Windows版本。或者禁用該選項,或者升級到一個可以啟用被禁用網卡 的新驅 動程序。 PCI機器里的共享內存ISA網卡不工作(0xffff) 這常表現為顯示讀出大量0xffff值。除非你正確地設置了PCI ROM BIOS/CMOS SETUP配置,任何類型的共享內存網卡都不會在PCI機器上工作。 你必須把網卡所 用內存區域設置為可以從ISA總線訪問共享內存。如果你不 知道哪些設置有用, 那么詢問你的供應商或者當地的計算機大拿。對于AMI BIOS,在“Plug and Play”部分有一個“ISA Shared Memory Size”和 “ISA Shared Memory Base” 的設置。對于類似wd8013和SMC Ultra的網卡, 把共享內存的大小從缺省的禁用 改為16kB,并把基址改為網卡的共享內存 地址。 網卡看來在發送數據,但沒有收到過數據。 執行cat /proc/interrupts。這樣產生的列表會顯示網卡產生的 所有中斷事件的 實時數目。如果為0或在試圖使用網卡時沒有增加,那么可 能是與計算機安裝的 其它設備發生物理中斷沖突(無論其它的設備是否安 裝/提供了驅動程序)。把 其中一個設備的IRQ改為未使用的IRQ。 異步傳輸模式(ATM)支持 Werner Almesberger在進行Linux的ATM的支持工作。他使用的是Efficient Networks的ENI155p板( [28]Efficient Networks)和Zeitnet的ZN1221板 ( [29]Zeitnet)。 Werner說ENI155p的驅動程序已經很穩定了,而ZN1221的驅動程序還沒有完 成。 去下面的連接查看一下最新的進展: [30]Linux ATM Support 吉比特以太網支持 Linux支持吉比特以太網嗎? 是的,目前至少已經有了兩個驅動程序。在v2.0和v2.2內核里有一個Packet Engines G-NIC PCI吉比特以太網適配器的驅動程序。驅動程序的更多細節、 支 持和更新可訪問: http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html v2.2內核提供的acenic.c驅動程序可用于Alteon的AceNIC吉比特以太 網卡和其它 如3Com的3c985一類的基于Tigon的網卡。這個驅動程序還可以 用于NetGear 的GA620,但還需要証實。 FDDI支持 Linux支持FDDI嗎? 是的。Larry Stefani為v2.0編寫了Digital的DEFEA(FDDI EISA)和DEFPA (FDDI PCI)網卡驅動程序。它被包含進v2.0.24內核。目前還沒有其它的 網卡 被支持。 全雙工支持 全雙工能達到20MBps嗎?Linux支持嗎? Cameron Spitzer對全雙工10Base-T網卡有如下論斷:“如果你連在全雙工 交 換HUB上,你的系統足夠快而且不做太多其它的工作,它會使你的網絡在 兩個方 向上都保持忙碌。不存在什么全雙工的10BASE-2或10BASE-5(細纜 和粗纜)。全 雙工是通過取消適配器的碰撞檢測來達到的。這就是為什么 用同軸電纜實現不了 全雙工﹔LAN無法以全雙工方式運轉。10BASE-T(RJ45 接口)使用不同的線進行 發送和接收,所以二者可能同時進行。交換HUB處 理碰撞問題。信號速率 是10Mbps。” 所以,你只能以10Mbps速率接收或發送數據,無法期望得到兩倍的性能提 高。對 于是否支持,取決于網卡和可能的驅動程序。有些網卡可以自動協 商,有些需要 驅動程序支持,還有的需要用戶在網卡的EEPROM配置中設置 選項。只有那些認真 的用戶會注意到全雙工與半雙工模式間的差別。 SMP機器上的Linux以太網卡 如果你有錢買多處理器(MP)的計算機,那么最好買一個好點兒的以太網 卡。 對v2.0內核這還不是個問題,但對v2.2就成問題了。大多數老式的非 智能( 如ISA總線的PIO和共享內存設計)網卡在設計時根本沒考慮多處理 器應用。簡單 地說就是買一個現代設計的智能網卡,并確定有能夠處理多 處理器操作的驅動程 序。(注意這里的“現代設計” - PCI-NE2000就是在 現代總線上有10多年歷史 的老式設計。)在驅動程序的源碼里查找 spin_lock可以很好地說明該驅動程序 是否能夠處理多處理器操作。 下面詳細解釋了為何要為多處理器應用購買好的網 卡(以及不買會出現什 么問題)。 在v2.0內核,在任意時刻只有一個處理器允許進入“內核態”(即改變內 核數據 或運行設備驅動程序)。所以從網卡(及相關驅動程序)的角度來 看,這與單處 理器操作沒有什么不同,所以不會出問題。(這也是得到一個 可以工作的Linux多 處理器版本的最簡單的辦法 -- 使用一個大鎖使得一次 只有一個處理器處于內核 狀態。這樣你就知道不可能有兩個處理器同時要 修改同一數據!) 在任意時刻只有一個處理器允許進入內核態的不利之處在于只有運行自我 控制和 密集計算的程序時才會獲得多處理器的優越性。如果程序進行了大 量諸如向磁盤 或網絡讀/寫數據的I/O操作,在處于內核的那個處理器努力 運行所有的設備驅動 程序以滿足I/O請求的同時,其它的處理器都必須等待 自己的I/O請求被處理完成 。這樣內核就成為了瓶頸,由于只有一個處理器 運行在內核態,多處理器機器的 性能在I/O任務重、單鎖的情況下迅速降級 到接近單處理器的水平。 很明顯這與理想情況相差太遠(尤其是對于文件/WWW服務器、路由器等), v2.2的內核就使用了粒度更小的鎖──也就是說同時可以有多個處理器進 入內核 。不再是對整個內核使用一個大鎖,而是使用許多較小的鎖保護關 鍵數據,防止 同時被多個處理器控制──例如,一個處理器可以運行網卡 驅動程序,同時另一 個處理器可以運行磁盤驅動器的驅動程序。 好的,這樣就有問題了:更小的鎖定就意味著可以有一個處理器試圖通過 以太網 驅動程序發送數據,同時另一個處理器試圖訪問同一個驅動程序/網 卡來做別的 事情(比如通過cat /proc/net/dev得到網卡統計數 據)。哎呦──你的網卡正 在通過網線發數據,你又要用它來收數據。網 卡被同時要求做兩件事(或更多) ,會弄糊涂的,所以有可能在處理過程 中網卡使你的機器死機。 因此,為單處理器寫的驅動程序不再適用──它需要更新控制對網卡訪問 的鎖, 使得網卡的接收、發送和操作配置數據這三種任務以網卡穩定操作 所要求的程度 串行化起來。沒有更新為使用穩定多處理器操作的鎖的驅動 程序在輕的網絡負載 下可能看起來會正常工作,但在兩個(或更多)處理 器試圖同時進行多個任務時 就會造成死機,或至少表現出奇怪的行為,這 就是問題。 更新后的意識到多處理器的以太網驅動程序將要求一個驅動程序范圍的鎖, 使得 內核進入驅動程序的訪問入口被限制為一次一個。這樣,任務就被串 行化,而對 硬件的處理就如同在單處理器下一樣,也就一定應當穩定。使 用驅動程序范圍的 鎖的不利之處在于它類似于對整個內核加鎖(但規模較 小)對性能的影響──也 就是說,一次只可以有一個處理器處理網卡。 [技朮提示:如果增加的鎖 是irqsave類型的而且被持有較長時 間,對性能的影響還包括增加了中斷延遲 。] 這里可以進行的改進有兩處。可以嘗試減少獲得與釋放鎖之間所用的時間, 或者 在驅動程序內部實現更為細化的鎖(比如滿足網卡需求的前提下,把 整個驅動程 序的鎖替換為若干保護同時訪問若干敏感寄存器或設置的鎖)。 但是,對于老式的非智能網卡而言,在設計時根本就沒有考慮過多處理器 的應用 ,這樣的改進可能無法實現。更糟的是非智能網卡一般要求處理器 在網卡和內存 之間傳送數據,所以在最壞的情況下,每當在ISA總線傳送 1.5kB數據包時,鎖都 被一直保持著。 現代的智能網卡一般無需處理器的幫助就可以直接在網卡和內存之間傳遞 網絡數 據。這是個很大的改進,因為只需要在處理器通知網卡使用哪一塊 內存保存下一 個網絡數據包的那一小段時間持有鎖。現代的網卡在設計時 同樣也不要求對整個 驅動程序使用一個大鎖。 Alpha/AXP的PCI板上的Linux以太網卡 對于v2.0,只有3c509、depca、de4x5、pcnet32和所有8390驅動程序(wd、 smc-ultra、ne、3c503等等)是編寫成“結構無關”的,所以它們可以運 行在基 于DEC的Alpha CPU系統上。其它一些從Donald的WWW主頁上下載的更 新過的PCI驅 動程序也可以工作,因為它們也是按照結構無關的思想編寫的。 注意,使驅動程序與結構無關所需要進行的改動并不很復雜。只需要如下 進行: --把所有與jiffies有關的值都乘以HZ/100,得到Alpha使用的不同的 HZ值。( 即timeout=2;變成timeout=2*HZ/100;) --把所有I/O內存(從640k到1MB)的指針引用替換為相應的readb() writeb() readl() writel()調用,如下例所示。 _________________________________________________________________ - int *mem_base = (int *)dev->mem_start; - mem_base[0] = 0xba5eba5e; + unsigned long mem_base = dev->mem_start; + writel(0xba5eba5e, mem_base); _________________________________________________________________ --把所有使用I/O內存作為源或目的地址的memcpy()調用替換為相應的 memcpy_fromio()或者memcpy_toio()調用。 以結構無關的方式處理內存訪問的細節在近期的內核所附的文件 linux/Documentation/IO-mapping.txt中進行了說明。 SUN/Sparc硬件上的Linux以太網卡。 要得到最新的Sparc信息,可以訪問以下URL: [31]Linux Sparc 注意,有些Sparc的以太網硬件從主機獲得其MAC地址,因此可能會有多個 接口具 有相同的MAC地址。如果想在同一個網絡上使用多個接口,可以使用 ifconfig 的hw選項以分配唯一的MAC地址。 把PCI驅動程序移植到Sparc平台上與上面提到的AXP平台相似。可能的差異 出 在endian上,因為Sparc是big endian,而AXP和ix86是little endian。 其它硬件上的Linux以太網卡。 還有一些其它硬件平台可以運行Linux,比如Atari/Amiga(m68k)。就象 Sparc 一樣,最好是訪問每個Linux支持的平台主頁,以了解當前都支持哪 些硬件。( 歡迎提供這樣的站點連接──把它們發給我!) 不使用Hub連接10/100BaseT 可以不使用Hub連接基于10/100BaseT(RJ45)的系統嗎? 如果不使用額外的設備或機械裝置,可以很容易地連接兩台這樣的機器, 但不可 能再多。參閱 [32]雙絞線 ──解釋了如何做到這一點。而且你不可能簡單地交 叉几根線或其它什么 就弄出一個Hub,不復制Hub也無法正確完成沖突信號。 SIOCSIFxxx: No such device 在啟動時出現了一大堆“SIOCSIFxxx: No such device”信息,后面還有 一條 “SIOCADDRT: Network is unreachable”,怎么回事? 你的以太網設備在啟動/插入模塊時沒有被檢測到,當ifconfig和 route運行時, 它們沒有可用的設備。使用dmesg | more來 瀏覽啟動信息,看看有沒有檢測以太 網卡的信息。 SIOCSFFLAGS: Try again 在運行“ifconfig”時出現“SIOCSFFLAGS: Try again”──怎么回事? 某些其它的設備使用了以太網卡想用的IRQ,所以以太網卡無法使用該IRQ。 你不 必重新啟動來解決這個問題,因為某些設備只是在需要時才獲取IRQ, 在完成后 就釋放了。例如某些聲卡、串口、軟盤驅動器等。你可以鍵入 cat /proc/interrupts來看看哪些中斷正在 被使用。絕大 多數Linux以太網卡驅動程 序只有在用“ifconfig”打開時才獲取IRQ。如 果你能讓其它設備“放開”所需 的IRQ中斷線,那么你就可以用ifconfig來 “再試一下”了。 使用“ifconfig”得到的連接為UNSPEC,而硬件地址是00:00:00:00:00:00 在不帶參數運行ifconfig時,報告說連接為UNSPEC(而不是10Mbs以太網), 而 且硬件地址都是零。 這是因為運行的“ifconfig”程序版本比內核的版本高。在與老版本的內 核一起 運行時,新版本的ifconfig無法報告這些特性。你可以升級內核, 或者“降級 ”ifconfig,或者干脆不理會這個錯誤。內核知道硬件地址, 所以即 使ifconfig無法讀出它也沒有關系。 如果使用的ifconfig程序比使用的內核舊很多的話,也會出現一些奇 怪的信息。 大量的RX和TX錯誤 在不帶參數運行ifconfig時,報告大量的接收和發送數據包錯誤。但看起 來工作 正常──怎么回事? 再看一遍。報告是說RX packets big number 停頓 errors 0 停頓 dropped 0 停 頓 overrun 0。 所以你看到的那個大數字是機器接收和發送的數據包總數。如果 還覺得不 可思議,鍵入cat /proc/net/dev看看。 /dev/下的以太網卡入口 /dev/eth0象是個到/dev/xxx的連接。這樣對嗎? 與你聽過的正好相反,/dev/*下的文件沒被使用。你可以刪除掉任何 /dev/wd0 、/dev/ne0以及類似的入口。 Linux與“trailers” 在“ifconfig”網卡時,需要禁止trailers嗎? 不能禁止trailers,而且也沒必要。“trailers”是避免在網絡層復制數 據的工 具。其想法是使用一個大小為“H”的固定大小的頭,把可變大小的 頭信息放在 包的尾部,并把所有包定位在頁開始之前的“H”字節。這只是 個好想法,在實 際中工作得并不好。如果有人建議使用“-trailers”,那 不過是找個替罪羊罷 了。這對解決問題沒有任何意義,但如果問題真的自 行解決了,那么他就可以吹 噓自己的神奇本領了。 訪問原始以太網設備 在Linux下怎樣不通過TCP/IP之類的東西訪問原始的以太網設備? _________________________________________________________________ int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL)); _________________________________________________________________ 這樣就可以得到一個接收所有協議類型的socket。對它執行recvfrom() 調用,它 就會用sa_family里的設備類型和sa_data數組里的設備名來填充 sockaddr。我不 知道是誰最早在Linux里使用SOCK_PACKET,但它確實是個 非常好的東西。你也可 以通過sendto()調用發送原始數據包。當然, 在這樣做時你必須擁有root的權限 。 4. 性能小技巧 如果你的以太網吞吐量太小,或者想提高ftp傳輸的速度,可以使用這里的 一些 小技巧。 程序ttcp.c是測試原始吞吐量大小的好實驗。另一個普通的技巧是把 一個大 于1MB的large_file駐留在發送機器的緩沖內存里,然后執行 ftp> get large_file /dev/null。(至少要“get”兩次,因為 第一次是把文件駐留在發 送機器的緩沖內存中。)把文件駐留在緩沖內存 的原因是你對測量里混進從磁盤 存取文件的速度不感興趣。這也是把輸入 數據發送到/dev/null而不是磁盤上的 原因。 4.1 一般概念 即使一個8比特的網卡在接收背靠背的數據包時也沒有問題。但在計算機無 法迅 速地從網卡接收數據包為更多進來的數據包騰出空間時,困難就出現 了。如果計 算機不能迅速地清除已經接收到的數據包占據的網卡內存,網 卡就沒有空間存放 新的數據包了。 在這種情況下,網卡或者丟棄新的數據包,或者把它放在以前接收的數據 包位置 上。任何一個都會引起重新傳送而嚴重地中斷平滑的數據傳輸流, 并使性能被嚴 重降低,其降級因子甚至可以達到5! 擁有更多板上內存的網卡可以“緩沖”更多的數據包,因此可以無需丟棄 就處理 更大量的突發背靠背數據包。這也就意味著網卡不需要主機響應從 緩存讀取數據 包的延遲更小以避免丟棄數據包。 大多數8比特網卡有8kB緩存,而大多數16比特網卡有16kB緩存。大多數的 Linux 驅動程序要保留3kB的緩存(作為兩個Tx緩存),這樣就只給8比特網 卡剩下5kB 作為接收的空間。它只夠存放三個完全大小(1500字節)的以太 網數據包。 4.2 ISA網卡和ISA總線速度 在上面提到,如果從網卡移走數據包的速度足夠快,即使Rx數據包緩沖內 存的數 量小,丟棄/覆蓋的情況也不會出現。設置數據包從網卡移到計算機 內存的速率 的因子是連接這二者的數據通道的速度──即ISA總線的速度。 (如果CPU是很慢 的386sx-16,它也會起一定的作用。) 推荐的ISA總線時鐘為8MHz,但很多主板和周邊設備可以運行在更高的頻率 上。 一般通過在CMOS設置里選擇主板/CPU時鐘頻率因子,可以設置ISA總線 的時鐘頻 率。有些ISA和PCI/ISA主板可能沒有這一選項,那么就只能使用 制造商的缺省值 了。 例如,下面是在一台40MHz的486上,不同ISA總線速度下,8比特WD8003EP 網卡 用TTCP程序測量得到的一些接收速度。 _________________________________________________________________ ISA Bus Speed (MHz) Rx TTCP (kB/s) ------------------- -------------- 6.7 740 13.4 970 20.0 1030 26.7 1075 _________________________________________________________________ 使用TCP/IP,對任何10Mb/s以太網卡都難以得到高于1075kB/s的結果。 但是,不 要期望每一個系統都可以工作在快的ISA總線速度下。大多數系統 在高于13MHz的 速度上無法正常工作。(同樣,某些PCI系統的ISA總線速度 固定在8MHz,所以用 戶沒有機會提高它。) 另外,對于快的傳輸速度,可以從較短的內存和I/O周期減少CPU占用量中 獲益。 (注意,設置在ISA總線上的硬盤和視頻卡也會從提高的ISA總線速 度中感受到性 能的提高。) 在實驗超過8MHz的ISA總線速度之前,一定要備份你的數據,并在提高速度 后徹 底測試所有的ISA周邊設備是否工作正常。 4.3 設置TCP的Rx窗口 再說一遍,網卡的板上RAM小以及網卡與計算機內存間的數據通道相對較慢 會引 起麻煩。TCP缺省的Rx窗口設置為32kB,也就是說與你在同一子網的一 台較快的 計算機會一下子發給你32kB的數據,而不會停下來看看你是否正 常地接收到了它 們。 最近版本的route命令能夠在運行過程中設置這個窗口的大小。一般 它只用在需 要減小該窗口的局域網,因為在若干路由器或網關后面的計算 機會得到足夠的“ 緩沖”而不造成問題。下例為一個可能的用法: _________________________________________________________________ route add ... window _________________________________________________________________ 其中的win_size是你希望使用的窗口大小(以字節計算)。一個運行 在8MHz或更 低速度下的ISA總線上的8比特3c503網卡,可以在4kB大小的窗 口下很好地工作。 太大的窗口會導致覆蓋和丟棄數據包,并嚴重降低以太 網的吞吐量。你可以 用cat /proc/net/dev檢查操作狀態,它會 顯示出現的丟棄或覆蓋狀況。 4.4 增強NFS性能 有些人發現在使用8kB(Sun的原始值)的NFS數據包大小時,在NFS客戶端 使用8 比特網卡得到的性能比預期的要差。 可能的原因在于8比特網卡與16比特網卡的板上緩存大小不同。最大的以太 網數 據包大小為1500字節。這樣8kB的NFS數據包就成為大約6個背靠背的最 大大小的 以太網數據包。8比特網卡和16比特網卡在接收背靠背數據包時都 沒有問題。在 機器無法及時從網卡緩存移走數據包時就有問題了,緩存會 溢出。8比特網卡每 次傳送時要多占用一個ISA總線周期的事實也幫不上忙。 如果用的是8比特網卡, 你能做的是把NFS傳送大小設置為2kB(甚至 1kB),或者試著提高ISA總線速度以 加快清空網卡上的緩存。我發現8MHz 下(沒有其它系統負載),一個舊 的WD8003E網卡可以跟得上2kB大小的NFS 接收,但在4kB時,性能降低的因子為3 。 另一方面,如果缺省的安裝選項為1kB大小,而你的網卡至少為16比特的 ISA網卡 ,把其大小提高到4kB(甚至8kB)會使性能顯著提高。 5. 有關銷售商/制造廠家/型號的信息 下面按照銷售商名稱和產品標識的字母順序列出了許多網卡。在每個產品 ID旁都 標明了“支持”、“半支持”或“不支持”。 支持意味著該網卡的驅動程序存在,而且許多人在愉快地使用著此驅動程 序,它 看起來相當可靠。 半支持意味著該網卡的驅動程序存在,但至少下面的描述中有一個是真實的: (1) 驅動程序或硬件有Bug,會導致性能差、連接失敗甚至死機。 (2) 驅動程序 是新的或網卡不夠普及,因此驅動程序得到的使用/測試機會 很少,驅動程序的 作者收到很少的反饋信息。很明顯(2)比(1)要好一些, 在網卡/驅動程序的獨立 描述中會指明它屬于哪種情況。對這兩種情況,在 運行make config回答 “Prompt for development and/or incomplete code/drivers?”時都應該回答 “Y”。 不支持意味著該網卡目前還沒有可使用的驅動程序。這可能是由于對很少 見的硬 件缺乏興趣,也可能是銷售商還沒有發布編寫驅動程序所需的硬件 資料。 注意,“支持”和“半支持”之間的區別是相當主觀的,是基于新聞組和 郵件列 表信息上得到的用戶反饋進行區分的。(無論如何,一個人來測試 每個版本內核 上所有網卡的所有驅動程序是不可能的!!!)所以你可能 會發現一個被標為半 支持的網卡工作得很好(這樣很不錯),或者一個被 標為支持的網卡給你帶來無 窮的麻煩(這樣就不夠好)。 在這些狀態后面,列出了Linux內核中給出的驅動程序名稱。這也是 /etc/conf.modules模塊配置文件里 alias eth0 driver_name一行所使用的驅動 程序模塊的名稱。 5.1 3Com 如果你確定不了你的網卡是什么,但認為它是3Com網卡,你可以通過集成 塊編號 來識別它。3Com有一本資料“通過集成塊編號識別適配器”(ref 24500002), 它應該能讓你弄明白。參見 [33]3Com的技朮信息 以了解如何從3Com索取該資料 。 注意,3Com還有一個FTP站點:ftp.3Com.com,你也許想去看看。 對使用WWW瀏覽器閱讀本文檔的讀者而言,也可以試試3Com的WWW站點。 3c501 狀態:半支持,驅動程序名稱:3c501 這種過時的石器時代的8比特網卡用起來會很頭疼的。象瘟疫一樣躲開它吧。 不 要買這種網卡,哪怕是開玩笑也不要買。它的性能很差勁,而且很容易 壞掉。 對那些還不肯相信的人來說,3c501一次只能干一件事──在從其單包緩存 移出 一個數據包時,它不能接收另一個包,在載入一個發送包時也不能接 收一個包。 對于兩台處理一個包并回答會花掉10毫秒的基于8088的計算機 之間的網絡而言, 這就不錯了,但現代網絡几乎每次事務都會發送背靠背 數據包。 AutoIRQ可以工作,沒使用DMA,自動檢測只能查看0x280和0x300, 診斷級別通過 第三個啟動參數設置。 再說一遍,強烈反對使用3c501!更差的是在IP廣播內核中,在偵聽 所有廣播包 時你會進入暫停狀態。閱讀源碼頭部的注釋以得到更多的 細節。 EtherLink II, 3c503, 3c503/16 狀態:支持,驅動程序名稱:3c503 (+8390) 3c503沒有“EEPROM setup”,所以在Linux下運行該網卡無需使用診斷/設 置程 序。3c503的共享內存地址是用跳線設置的,與啟動PROM地址共享。熟 悉其 它ISA網卡的人可能會被弄糊涂,因為其它ISA網卡除非有啟動PROM, 都是讓跳線 設為“禁止”的。 因為WD80x3的總線寬度一樣,這些網卡的速度也應該一樣,但實際上更慢 一些。 這些共享內存的的以太網卡還有一種不使用8390工具的可編程I/O模 式(它們的 工程師發現了太多的Bug!)。Linux的3c503驅動程序也可以工 作在3c503的可編 程I/O模式,但不如共享內存模式可靠,而且更慢。同樣, 在更新驅動程序時可 編程I/O模式沒有很好地測試。不要使用可編程I/O模 式,除非要與MS-DOS兼容。 3c503的IRQ中斷線用軟件設置,在EEPROM中沒有其痕跡。與MS-DOS驅動程 序不同 ,Linux的驅動程序有autoIRQ的能力:它使用{5,2/9,3,4}中第一條 可用IRQ中斷 線,在每次運行ifconfig時進行選擇。(老式的驅動程序版本 在啟動時選擇IRQ 。)如果沒有IRQ中斷線可用,“ifconfig”里的ioctl() 調用將返回EAGAIN。 某些使用503會遇到的常見問題在 [34]3Com網卡的問題中進行了討論。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [35]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 注意,一些舊的無盤386工作站有一個板上的3c503(3Com制造,但用其它 名稱銷 售,如“Bull”),但銷售商ID不是3Com的ID,所以檢測不出來。 更多的資料可 以在Etherboot軟件包里找到,要啟動這些無盤工作站你一定 得有這些東西。 Etherlink Plus 3c505 狀態:半支持,驅動程序名稱:3c505 這個驅動程序是Craig Southeren geoffw@extro.ucc.su.oz.au編寫 的。這些網 卡使用i82586芯片。沒有太多的有關這些網卡的資料。標准內 核包含該驅動程序 ,但它被歸為alpha版本的驅動程序。參見 [36]Alpha驅動程序以了解在Linux下 使用alpha/測試 版本以太網驅動程序的重要信息。 如果你要使用這樣的網卡,還應該讀一下 /usr/src/linux/drivers/net/README.3c505文件。它包含了你 可以使用/禁止的 各種選項。 Etherlink-16 3c507 狀態:半支持,驅動程序名稱:3c507 該網卡使用了一塊Intel芯片,其驅動程序的開發與Intel的Ether Express 驅動 程序開發關系很密切。在標准的內核發行版本中包含了其驅動程序, 但是是作為 一個alpha版本的驅動程序。參見 [37]Alpha驅動程序以了解在Linux下使 用alpha/測試 版本以太網驅動程序的重要信息。 Etherlink III, 3c509 / 3c509B 狀態:支持,驅動程序名稱:3c509 這種網卡相當便宜,而且對ISA的無總線控制的設計而言性能相當好。其缺 點在 于原始的3c509要求很低的中斷延遲。3c509B有一個較大的緩存,應該 沒有這個 問題。(見下文。)這些網卡使用PIO傳輸,與ne2000網卡相似, 相對而言 ,wd8013一類使用共享內存的網卡效率更高一些。 原始的3c509有一個小的包緩存(總共4kB,2kB Rx,2kB Tx),如果中斷 屏蔽的 時間過長,驅動程序就會丟棄數據包。要減輕這個問題,可以嘗試 在IDE磁盤傳 輸過程中不屏蔽中斷(參見man hdparm),或者提高ISA 總線速度使IDE傳輸結束 得早一些。 新型號的3c509B板上緩存為8kB,并且可以把Rx/Tx划分成4/4、5/3或6/2。 這一 設置要用DOS配置工具來改變,并保存在EEPROM上。這會減輕上面提到 原 始3c509的問題。 3c509B的用戶可以使用提供的DOS工具來禁止即插即用支持,并 把輸出媒介設置 為要求的東西。目前的Linux驅動程序還不支持自動 檢測媒介設置,所以必須選 擇10Base-T、10Base-2或AUI。注意,要 完全禁止PnP,需要使用3C5X9CFG /PNP:DISABLE并重新冷啟動以 確保設置生效。 有些人詢問DOS配置工具中出現的“Server or Workstation”和“Highest Modem Speed”設置。Donald寫道:“這些只不過是給驅動程序的提示,而 Linux驅動程序不使用這些參數:它總是優化為高吞吐量,而非低延遲 ( ‘Server’)。低延遲對于老式的無窗口IPX吞吐量非常關鍵。為了減少 延遲 ,3c509的MS-DOS驅動程序對某些操作禁止中斷,阻塞串口中斷。因此 需要 ‘modem speed’設置。Linux驅動程序只對整個包進行操作,例如在 數據包完全 傳到網卡后才開始發送該數據包,從而避免了長時間禁止中斷 的需要。” 注意,ISA網卡檢測使用的方法與大多數網卡不同。基本上是通過發送數據 到ID_PORT(從端口0x100到0x1ff,間隔為0x10)要求網 卡響應。這一檢測方法 意味著在多ISA的3c509配置中,某個特定網卡總 是首先被檢測,而硬件以太網地 址最低的網卡總是作為eth0。 這其實沒什么問題,但有些人想為特定的接口分配 一個6字節的硬件地址。 如果有多塊3c509網卡,最好不指定I/O端口(即使 用I/O=zero)使用 ether=0,0,ethN命令,讓自動檢測來排列哪一塊網卡作為第一 塊網卡。 使用非零的I/O值會使該命令無法檢測所有的網卡,所以不要這樣做。 如果這使你感到困擾,看一下Donald的最新驅動程序,你可以在未使用的 內存地 址域中使用一個0x3c509值,使檢測的順序符合你的要求。 3c515 狀態:支持,驅動程序名稱:3c515 這是3Com的ISA 100Mbps產品,編碼名為“CorkScrew”。v2.2內核里包含 了 從Donald那兒得到的這些網卡的相對較新的驅動程序。要獲得更新的資 料,可以 訪問Vortex的主頁: [38]Vortex 3c523 狀態:半支持,驅動程序名稱:3c523 這個MCA總線的網卡使用i82586,Chris Beauregard修改了ni52驅動程序用 于這 些網卡。在v2.2內核源碼樹里可以找到它的驅動程序。 更多的細節可以在MCA-Linux主頁上找到 MCA-Linux page at http://glycerine.cetmm.uni.edu/mca/ 3c527 狀態:不支持。 對,這是另一個MCA網卡,對它沒興趣。如果你堅持用MCA,最好用3c529。 3c529 狀態:支持,驅動程序名稱:3c509 這個網卡實際上使用與3c509相同的芯片組。實際上早在內核里加進對MCA 的支持 之前,Donald就已經在3c509的驅動程序里放了些鉤子函數,在探測 完EISA網卡 后,開始探測ISA網卡之前,檢查MCA網卡。所需的MCA探測代碼 被包含在與v2.2 內核一起提供的驅動程序里。更多的細節可以在MCA-Linux 主頁上找到: http://glycerine.cetmm.uni.edu/mca/ 3c562 狀態:支持,驅動程序名稱:3c589(獨立發行) 這個PCMCIA網卡是3c589B網卡與modem的組合。對于終端用戶,modem與一 個標准 的modem一樣。唯一的麻煩是要使兩個獨立的Linux驅動程序共用一 個中斷。該卡 上有一些新的寄存器和一些支持共享中斷的硬件。需要使用 支持共享中斷 的v2.0以上的內核版本。 再次感謝Cameron提供給David Hinds的樣品和資料。請在David發行的 PCMCIA軟 件包里尋找支持。 參見 [39]PCMCIA支持以了解更多的有關PCMCIA芯片 組、socket啟用軟件等信息 。 3c575 狀態:未知。 這個PCMCIA網卡的驅動程序正在開發中,但愿以后會包含在David的PCMCIA 軟件 包里。最好檢查一下PCMCIA軟件包以了解目前的狀態。 3c579 狀態:支持,驅動程序名稱:3c509 EISA版本的509。目前的EISA版本還使用同樣的16比特寬的芯片,而不是32 比特 的接口,所以性能上的改善并不令人驚奇。確定網卡被配置為EISA尋 址模式。閱 讀上面的3c509一節以了解驅動程序的信息。 3c589 / 3c589B 狀態:半支持,驅動程序名稱:3c589 現在這種PCMCIA網卡已經被很多人使用了相當長時間。注意對它的支持 (目前) 還不包括在缺省的內核源碼樹內。名稱中“B”的含義與3c509的 情況相同。 在Donald的ftp站點和David Hinds的PCMCIA軟件包里都有可用的驅動程序。 你還 需要一套支持PCMCIA控制器的芯片組。參見 [40]PCMCIA支持以了解更多的有 關PCMCIA芯片組、 socket啟用軟件等信息。 3c590 / 3c595 狀態:支持,驅動程序名稱:3c59x 這些“Vortex”網卡是用在PCI總線機器上的,'590是10Mbps的產品,'595 是3Com的100Mbs產品。注意'595也可以象'590一樣運行(即使用10Mbps模 式)。 驅動程序包含在v2.0內核源碼中,但還在不斷升級。如果在使用 v2.0內核里的驅 動程序時遇到問題,可以從下面的URL獲取一個更新的驅動 程序: [41]Vortex 注意,現在有兩種不同的3c590網卡,較早的型號有32kB的板上內存,后來 的型 號只有8kB的板上內存。可能你買一個新的3c59x還沒有多久,它就正 在被3c90x 所取代。如果你是買別人的二手貨,想法弄到一個32kB的型號。 3c595網卡 有64kB板上內存,因為無法只用8kB的RAM就能達到100Mbps! 感謝Cameron Spitzer和3Com的Terry Murphy給Donald提供網卡和資料,使 Donald能寫出驅動程序來。 Donald為Vortex的驅動程序支持建立了一個郵件列表。要加入該列表,只 需如下 操作: echo subscribe | /bin/mail linux-vortex-request@cesdis.gsfc.nasa.gov 3c592 / 3c597 狀態:支持,驅動程序名稱:3c59x 這些是EISA版本的3c59x系列網卡。3c592/3c597(又名為Demon)可以使用 上面 討論的vortex驅動程序。 3c900 / 3c905 / 3c905B 狀態:支持,驅動程序名稱:3c59x 這些網卡(又名為“Boomerang”,或EtherLink III XL)是用來取代 3c590/3c595網卡的。 對Cyclone的“B”版本的支持最近才加進來。要在v2.0之前的內核使用該 網卡, 必須從如下的Donald站點獲取更新后的3c59x.c驅動程序: [42]Vortex-Page 如果有問題,去上述的WWW主頁查一下。Donald為Vortex驅動程序的支持文 檔等 建立了一個郵件列表。要加入該列表,只需如下操作: echo subscribe | /bin/mail linux-vortex-request@cesdis.gsfc.nasa.gov 3c985 狀態:支持,驅動程序名稱:acenic Jes Sorensen提供的驅動程序在v2.2內核里能找到。除了3Com的型號,它 還支持 几種其它的吉比特網卡。 5.2 Accton Accton MPX 狀態:支持,驅動程序名稱:ne (+8390) 不要被它的名字騙了。它還是NE2000兼容網卡,可以使用ne2000驅動程序。 Accton EN1203, EN1207, EtherDuo-PCI 狀態:支持,驅動程序名稱:de4x5, tulip 這是DEC的21040 PCI芯片的另一種實現。EN1207網卡上有21140,還有一個 10Base-2連接器,這在選擇媒介時會把人弄糊涂。雖然該網卡使用10Base-T 和100Base-T也可以工作,但在購買時要確定如果出問題可以退回。 參見 [43]DEC 21040 以了解這些網卡的更多信息和目前的驅動程序狀況。 Accton EN2209 Parallel Port Adaptor (EtherPocket) 狀態:半支持,驅動程序名稱:? 現在有這些并口適配器的驅動程序,但還不包括在2.0或2.1版本內核源碼 中。可 以從如下主頁獲取驅動程序: http://www.unix-ag.uni-siegen.de/~nils/accton_linux.html Accton EN2212 PCMCIA Card 狀態:半支持,驅動程序名稱:? David Hinds在編寫該網卡的驅動程序,最好檢查一下他的PCMCIA軟件包以 了解 目前的狀態。 5.3 Allied Telesyn/Telesis AT1500 狀態:支持,驅動程序名稱:lance 這些是使用79C960版本的AMD LANCE的系列低成本以太網卡。它們是可以控 制總 線的網卡,因此是一種可用的較快的ISA總線以太網卡。 DMA選擇和芯片號碼信息可以在 [44]AMD LANCE找到。 更多有關基于AMD LANCE的以太網卡的技朮信息可以在 [45]Notes on AMD...找到 。 AT1700 狀態:支持,驅動程序名稱:at1700 注意,要在make config時訪問該驅動程序依然需要先在回答“Prompt for development and/or incomplete code/drivers?”時回答“Y”。這 只是因為這 種網卡很少見,導致驅動程序穩定性的反饋太少。如果與內核 一起提供的驅動程 序出現問題,也許你會對以下的替代驅動程序感興趣: http://www.cc.hit-u.ac.jp/nagoya/at1700/ Allied Telesis的AT1700系列網卡是基于Fujitsu的MB86965芯片的。該芯 片使用 可編程I/O接口和一對固定大小的傳輸緩存。這樣在發送背靠背的一 小組數據包 時,切換緩存帶來的停頓較小。 該網卡的一個獨特之處在于除了能夠驅動10baseT的100歐姆UTP(非屏蔽雙 絞線 )之外,還能夠驅動一般安裝在令牌環上的150歐姆STP(屏蔽雙絞線)。 該網卡 還有一個光纖版本(AT1700FT)。 用在AT1700上的Fujitsu芯片有一個設計上的缺陷:它需要機器斷電來完全 重起 。使用reset按鈕無法重起總線接口。這也不是太壞,只不過在重起后 才能可靠 地被檢測到。解決方法是在內核檢測AT1700有問題時關機器重起。 AT2450 狀態:支持,驅動程序名稱:pcnet32 這是PCI版本的AT1500,而且沒有Boca的79c970 PCI網卡那樣的問題。 DMA選擇和 芯片號碼信息可以在 [46]AMD LANCE找到。 更多有關基于AMD LANCE的以太網卡的技朮信息可以在 [47]Notes on AMD...找到 。 AT2500 狀態:半支持,驅動程序名稱:rtl8139 該網卡使用RealTek的8139芯片──參見 [48]RealTek 8139一節。 AT2540FX 狀態:半支持,驅動程序名稱:eepro100 該網卡使用i82557芯片,因此可以用eepro100的驅動程序。如果你試用過, 請發 給我一份報告以更新本信息。 5.4 AMD / Advanced Micro Devices AMD的Carl Ching友好地提供了非常詳盡的所有有關AMD以太網產品的資料, 對澄 清本節內容很有幫助。 AMD LANCE (7990, 79C960/961/961A, PCnet-ISA) 狀態:支持,驅動程序名稱:lance 這實際上不是AMD的以太網卡。你會閱讀本小節的原因是,你在網卡上只能 找 到AMD標記和上述數字。7990是原始的“LANCE”芯片,但大多數資料 (包括本文 檔)都按照“LANCE”芯片對待所有這些相似的芯片。(...... 我可以加一句: 這樣是不對的。) 上面這些數字指明了作為許多以太網卡的核心的AMD芯片。例如,Allied Telesis的AT1500(參見 [49]AT1500)和 NE1500/2100(參見 [50]NE1500)就使 用了這些芯片。 7990/79c90早已被新版本所取代。79C960(a.k.a. PCnet-ISA)主要包含 79c90核 心以及所有其它必須的硬件支持,可作為單片以太網卡的解決方案。 79c961(PCnet-ISA+)是'960的無跳線即插即用版本。ISA系列的最后一個芯 片 是79c961A(PCnet-ISA II),增加了全雙工的功能。除了那些使用共享內 存配置 的原始7990的非常古老的網卡,所有使用這些芯片的網卡都可以使 用lance.c驅 動程序。可以通過DMA通道沒有跳線來辨認出這些老網卡。 一個常見的問題是遇到“busmaster arbitration failure”消息。在固定 的時 間之內(50us)LANCE驅動程序無法訪問總線時就會出現這一消息。這 通常預示 主板上的總線控制DMA被破壞,或者某些其它設備霸占了總線,或 者DMA通道出現 沖突。如果你的BIOS設置中有“GAT option”(保証訪問時 間),那么試著改變 一下其設置看看有沒有效。 同樣要注意,對一個合法網卡,驅動程序只查看以下地址: 0x300, 0x320, 0x340, 0x360,用啟動參數ether=提供的地址 被靜悄悄地略過(對此將進行修改 ),所以現在要確定你的網卡配置為上 述的一個I/O地址。 即使安裝了超過16MB的內存,該驅動程序依然工作得很好,因為必要時它 會使用 低端內存“bounce-buffers”(即在發送數據到網卡進行傳輸之前, 16MB以上內 存的數據會先拷貝到16MB以下的一個緩存里。) DMA通道可以用除此之外不被使用的dev->mem_start值的低位進行設置(又 名 為PARAM_1)。(參見 [51]PARAM_1)如果沒有設 置,那么按次序啟用每個空閑 的DMA通道并檢查是否初始化成功來進行探測。 HP-J2405A板是個例外:在該板上很容易讀出EEPROM設置的IRQ和DMA的值。 參見 [52]Notes on AMD... 以了解更多有關這些芯片的信息。 AMD 79C965 (PCnet-32) 狀態:支持,驅動程序名稱:pcnet32 這是PCnet-32──用于VL總線和局部總線系統的原始LANCE芯片的32比特總 線控 制版本。盡管這些芯片可以用標准的lance.c驅動程序操作,還 是有一個不受任 何ISA總線有關的16MB限制的32比特版本的驅動程序 (pcnet32.c)。 AMD 79C970/970A (PCnet-PCI) 狀態:支持,驅動程序名稱:pcnet32 這是PCnet-PCI──與PCnet-32相似,不過是為基于PCI總線系統設計的。 請參閱 上面的PCnet-32信息。這意味著需要構建一個啟用PCI BIOS支持的 內核。'970A 在原始的'970設計上增加了全雙工支持及其它一些特性。 注意,Boca制造的79C970無法用在較快的奔騰機器上。這是個硬件錯誤, 它也會 影響DOS用戶。參考Boca一節以了解更多的細節。 AMD 79C971 (PCnet-FAST) 狀態:支持,驅動程序名稱:pcnet32 這是用于PCI系統的AMD的100Mbit芯片,也支持全雙工操作。1996年6月出產。 AMD 79C972 (PCnet-FAST+) 狀態:未知,驅動程序名稱:pcnet32 該網卡應該與'971一樣,但尚未被証實。 AMD 79C974 (PCnet-SCSI) 狀態:支持,驅動程序名稱:pcnet32 這是PCnet-SCSI──從以太網的觀點來看基本上按'970處理。參看上文。 不要問 是否支持芯片的SCSI部分──本文是以太網-HowTo,不是 SCSI-HowTo。 5.5 Ansel Communications AC3200 EISA 狀態:半支持,驅動程序名稱:ac3200 注意,要在make config時訪問該驅動程序依然需要先在回答“Prompt for development and/or incomplete code/drivers?”時回答“Y”。這 只是因為這 種網卡很少見,導致驅動程序穩定性的反饋太少。 其驅動程序作為alpha測試驅動程序被包含在目前的內核里。該網卡是基于 ne2000和wd80x3網卡上使用的普通的NS8390芯片。請參見 [53]Alpha驅動程序以 了解在Linux下使用alpha/測試 版本以太網驅動程序的重要信息。 如果你在使用該網卡,請讓我知道它的工作情況,雖然在v1.1.25內核里就 包含 了其驅動程序,但反饋信息很少。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [54]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 5.6 Apricot Apricot Xen-II On Board Ethernet 狀態:半支持,驅動程序名稱:apricot 這是使用i82596總線控制芯片的板上以太網卡。它的I/O地址只能是 0x300。從驅 動程序的源碼上得知,其IRQ也被硬件固定為10。 早期版本的驅動程序傾向于認為0x300處的一定是apricot NIC。后來 才對硬件地 址進行檢查以避免錯誤的檢測。 5.7 Arcnet 狀態:支持,驅動程序名稱:arcnet (arc-rimi, com90xx, com20020) 由于該網卡的價格非常低廉而且以太網性能很好,可能人們會有很多機會 捐獻出 他們的Arcnet硬件,使得很多家用系統都使用Arcnet。 Arcnet的一個優點在于所有的網卡接口都一樣,所以只需要一個驅動程序。 它還 內建了錯誤處理機制,據信不會丟失數據包。(對UDP來說這可太棒了!) 從1.1.80起,Avery Pennarun的arcnet驅動程序就被包含在缺省的內核源 碼里了 。arcnet驅動程序使用“arc0”作為自己的名字,而不是通常的以 太網設備名 “eth0”。Bug報告和成功的故事可以寄到: apenwarr@foxnet.net 在標准內核里有一些設置跳線和一般提示的信息文件。 據信100Mbs的ARCnet網卡也可以同樣使用該驅動程序! 5.8 AT&T 注意,AT&T的StarLAN是一種孤島技朮,跟SynOptics的LattisNet一樣, 不能在 標准的10Base-T環境里使用,沒有能進行“相互交流”的Hub。 AT&T T7231 (LanPACER+) 狀態:不支持。 這些StarLAN網卡使用的接口類似于i82586芯片。Matthijs Melchior (matthijs.n.melchior@att.com)曾經試著用過3c507的驅動程序, 好象差不多 可以工作了。但從那之后就再沒聽過多少消息了。 5.9 Boca Research 不錯,他們不光是制造多口串行卡。:-) Boca BEN (ISA, VLB, PCI) 狀態:支持,驅動程序名稱:lance, pcnet32 這些網卡都是基于AMD的PCnet芯片。需要警告一下潛在的買家,許多用戶 在使用 這些VLB/PCI網卡時遇到了沒完沒了的麻煩。快的奔騰系統用戶受到 了特別的打 擊。注意這并不是驅動程序的問題,因為DOS/Win/NT用戶也一 樣遇到麻煩 。Boca的技朮支持電話號碼是(407) 241-8088,也可以通過 75300.2672@compuserve.com找到他們。老式的ISA網卡看來沒遇到這 種問題。 Donald做了一個Boca的PCI網卡與相似的Allied Telsyn的PCnet/PCI網卡的 比較 測試,結果顯示問題出在Boca的PCnet/PCI芯片。測試結果可以在Don 的WWW服務 器上找到。 [55]Linux at CESDIS Boca對受影響的使用者提供“包修”服務,需要增加一個缺少的電容,雖 然可以 解決一些問題,但對大多數人來說并非百分之百奏效。 如果您仍然想買這種網卡,至少試著得到一個7天無條件退貨的條款, 這樣一旦 出問題你就可以退貨。 有關AMD芯片更一般的信息可以在 [56]AMD LANCE找到。 基于AMD LANCE的以太網卡的更多技朮信息可以在 [57]Notes on AMD...找到。 5.10 Cabletron Donald寫道: “是的,又一個不肯提供編程資料的公司。他們要等待几個月來最 終確定 所有他們的資料都是私有的,蓄意浪費我的時間。如果可以的話,象躲避 瘟疫一樣避免使用他們的網卡。還要注意,有人曾打電話給Cabletron,結 果聽 到什么‘有個D. Becker在編寫Linux下的驅動程序’之類的話──好 象我是為他 們工作的。完全不是這么回事。” 看起來自從几年前Donald寫了上述注釋后,Cabletron改變他們對于編程資 料的 政策(象Xircom一樣)──如果你想証實這一點或索取編程信息的話, 發 個e-mail給support@ctron.com。但是,現在几乎沒有人對老式的 E20xx和E21xx 網卡提出修改/更新驅動程序的要求了。 E10**, E10**-x, E20**, E20**-x 狀態:半支持,驅動程序名稱:ne (+8390) 這些差不多算是NEx000兼容網卡,據報告可以使用標准的NEx000驅動程序, 這要 感謝探測時的ctron特性檢查。如果有問題,几乎不可能修復,因為沒 有編程資 料。 E2100 狀態:半支持,驅動程序名稱:e2100 (+8390) 又來了,在編程資料私有的情況下什么都做不了。E2100的設計很差勁。每 次傳 送數據包映射它的共享內存時,它都要映射到整個128K的區域! 這就意味著你無 法在此區域安全地使用另一個中斷驅動的共享內存設 備,包括另一個E2100。絕 大多數時間它都正常工作,但時不時地會咬你一 口。(對,這個問題可以通過傳 送數據包時關中斷來避免,但那樣几乎肯 定會丟失時鐘ticks。)同樣,如果錯 誤地對板進行了編程,或者在錯誤的 時刻暫停機器,即使reset按鈕都無法生效 。你必須關機并保持 30秒之后再開機。 媒介選擇是自動進行的,但可以用dev->mem_end參數的低位來覆蓋。參 見 [58]PARAM_2。模塊用戶可以在 /etc/conf.modules文件里指定xcvr=N值作 為option。 同樣,不要把E2100當成NE2100的兼容網卡。E2100是采用NatSemi的DP8390 的共 享內存設計,大致與傷腦筋的WD8013相似,而NE2100(和NE1500)是 用總線控制 的AMD的LANCE設計的。 在標准內核里包含了E2100的驅動程序。但是,無法看到其編程資料,不要 指望 有Bug修復。除非你已經買了該網卡,不要用它。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [59]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 E22** 狀態:半支持,驅動程序名稱:lance According to information in a Cabletron Tech Bulletin, these cards use the standard AMD PC-Net chipset (see [60]AMD PC-Net) and should work with the generic lance driver. 按照Cabletron技朮公告牌上的資料,這些網 卡使用標准AMD的PC-Net芯片 組(參見 [61]AMD PC-Net)而且可以使用普通的 lance驅動程序。 5.11 Cogent 下面是進行聯系的地址和方法: Cogent Data Technologies, Inc. 175 West Street, P.O. Box 926 Friday Harbour, WA 98250, USA. Cogent Sales 15375 S.E. 30th Place, Suite 310 Bellevue, WA 98007, USA. Technical Support: Phone (360) 378-2929 between 8am and 5pm PST Fax (360) 378-2882 Compuserve GO COGENT Bulletin Board Service (360) 378-5405 Internet: support@cogentdata.com EM100-ISA/EISA 狀態:半支持,驅動程序名稱:smc9194 這些網卡使用SMC的91c100芯片,可以使用SMC的91c92驅動程序,但還沒得 到証 實。 Cogent eMASTER+, EM100-PCI, EM400, EM960, EM964 狀態:支持,驅動程序名稱:de4x5, tulip 這些是但愿可以使用標准21040驅動程序很好地工作的另一種DEC的21040網 卡。 EM400和EM964是使用DEC的21050橋接器和4片21040芯片的4端口網卡。 參見 [62]DEC 21040 以了解這些網卡的更多信息和當前驅動程序的狀況。 5.12 Compaq Compaq并不真正從事制造以太網卡,但他們的很多系統都在主板上嵌入了 以太網 控制器。 Compaq Deskpro / Compaq XL (嵌入AMD芯片) 狀態:支持,驅動程序名稱:pcnet32 諸如XL系列的機器在主板上有一片AMD的79c97x PCI芯片,可以使用標准的 LANCE驅動程序。但在使用前,必須使用一些技巧把PCI BIOS放到可以被 Linux發 現的地方。Frank Maas友好地提供了其中的細節: “Compaq機器的這個問題在于其PCI目錄被載入高端內存,Linux內核無法 達到那 一點。結果:網卡檢測不到,也無法使用(另外鼠標也不工作)。 其解決方法( 在http://www-c724.uibk.ac.at/XL/里有詳盡的描述)是載 入MS-DOS,使 用Compaq編寫的一個小驅動程序,然后用LOADLIN載入Linux 內核。好吧,你也許 想說“呸、呸”,但到目前為止,這是所我知道的唯 一辦法。那個小驅動程序的 作用只不過是把PCI目錄放到其正常的存儲位置 (這樣Linux就可以找到它了)” 更多有關AMD芯片的一般資料可以在 [63]AMD LANCE找到。 Compaq Nettelligent/NetFlex (嵌入ThunderLAN芯片) 狀態:支持,驅動程序名稱:tlan 這些系統使用Texas Instruments的ThunderLAN芯片。有關ThunderLAN驅動 程序 的資料可在 [64]ThunderLAN找到。 5.13 Danpex Danpex EN9400 狀態:支持,驅動程序名稱:de4x5, tulip 又一個基于DEC的21040芯片的網卡,據報告性能挺好,價格比較便宜。 參見 [65]DEC 21040 以了解這些網卡的更多信息和當前驅動程序的狀況。 5.14 D-Link DE-100, DE-200, DE-220-T, DE-250 狀態:支持,驅動程序名稱:ne (+8390) 一些早期的D-Link網卡沒有PROM的標識0x57,但ne2000驅動程序能識 別它們。對 于軟件配置的網卡,可以從www.dlink.com得到配置程序。 DE2**網卡曾經廣為報 道在早期版本的Linux下會產生傳輸地址不匹配的虛 假錯誤。注意,有一 些Digital (DEC)的網卡也叫做DE100和DE200,只是名 稱相同而已。 DE-520 狀態:支持,驅動程序名稱:pcnet32 這是使用PCI版本AMD的LANCE芯片的PCI網卡。DMA選擇和芯片號碼信息可以 在 [66]AMD LANCE找到。 更多有關基于AMD LANCE的以太網卡的技朮信息可以在 [67]Notes on AMD...找到 。 DE-528 狀態:支持,驅動程序名稱:ne, ne2k-pci (+8390) 很明顯D-Link已經開始制造PCI NE2000兼容網卡了。 DE-530 狀態:支持,驅動程序名稱:de4x5, tulip 這是一款使用DEC的21040 PCI芯片的通用網卡,據報告可以使用普通的 21040 tulip驅動程序。 參見 [68]DEC 21040 以了解這些網卡的更多信息和當前驅動程序的狀況。 DE-600 狀態:支持,驅動程序名稱:de600 筆記本電腦以及想讓電腦快捷地聯上以太網的用戶可能用該網卡比較好。 在缺省 的內核源碼樹里有它的驅動程序,是Bjorn Ekwall bj0rn@blox.se編寫的。通過 并口可以從該網卡獲得180kb/s的傳送速 度。請閱讀內核源碼樹里 的README.DLINK文件。 注意,現在傳遞給ifconfig的設備名為eth0,而不是以前 用的dl0。 如果你的并口不是在標准的0x378,那么需要重新進行編譯。 Bjorn寫道:“由 于DE-620的驅動程序試圖抓緊循環中的最后一個毫秒,我 就把中斷和端口地址寫 成了常量而不是變量。這樣可以達到所需的速度, 也就意味著無法用lilo改變這 些設置﹔必須重新編譯......”同樣還要注 意,某些筆記本電腦主板上的并口位 于0x3bc,某些一體化板卡的并 口也是這樣。 DE-620 狀態:支持,驅動程序名稱:de620 與DE-600一樣,只是有兩種輸出格式。Bjorn為1.1以上版本內核里的這種 型號網 卡編寫了驅動程序。參見上面有關DE-600的信息。 DE-650 狀態:半支持,驅動程序名稱:de650 (?) 這種PCMCIA網卡已經被有些人在他們的筆記本電腦上使用一段時間了。它 是個基 本的8390設計,與NE2000很相象。LinkSys的PCMCIA網卡和IC-Card 的Ethernet都 被認為是DE-650兼容網卡。注意,目前其驅動程序還不 是標准內核的一部分,所 以需要做一些打補丁的工作。 參見本文檔的 [69]PCMCIA支持,如果可以的話,訪 問一下: [70]Don's PCMCIA Stuff 5.15 DFI DFINET-300 and DFINET-400 狀態:支持,驅動程序名稱:ne (+8390) 感謝Eberhard Moenkeberg emoenke@gwdg.de指出這些網卡是在PROM 的前三個字 節使用“DFI”,而不是象所有NE1000和NE2000網卡那樣在第14 和15字節使 用0x57,因此現在才能夠檢測到這些網卡。(300是8比特 的偽NE1000兼容卡 ,400是偽NE2000兼容卡。) 5.16 Digital / DEC DEPCA, DE100/1, DE200/1/2, DE210, DE422 狀態:支持,驅動程序名稱:depca 源文件“depca.c”里的說明包含了在一台機器里如何使用多塊此類網卡。 注意 ,DE422是EISA網卡。這些網卡都是基于AMD的LANCE芯片。參見 [71]AMD LANCE以 了解更多信息。同時最多只能使用 兩塊ISA網卡,因為它們的I/O基址只能設置 在0x300和0x200。 如果想這么做的話,請閱讀標准內核源碼樹中的驅動程序源文 件 depca.c里的注釋。 其驅動程序也可以用在基于Alpha CPU的機器上,用戶還可以使用其中的各 種ioctl()函數。 Digital EtherWorks 3 (DE203, DE204, DE205) 狀態:支持,驅動程序名稱:ewrk3 這些網卡使用DEC的私有芯片,而不是象早期的DE200網卡那樣使用LANCE芯 片。 它們支持共享內存和可編程I/O兩種工作方式,但在使用PIO模式時其 性能會下 降50%。共享內存的大小可以設置為2kB、32kB或64kB,但驅動程 序只進行了2kB 和32kB下的測試。在驅動程序文件ewrk3.c的開頭有更 多的信息(包括如何把它 作為可載入模塊使用),在README.ewrk3里 也有此類信息。在發行的標准內核里 包含了這兩個文件。與depca.c一樣, 該驅動程序也支持Alpha CPU。 標准的驅動程序里有一些有趣的ioctl()調用,可以用來獲取或清除數據包 統計 信息、讀/寫EEPROM、改變硬件地址等。黑客可以閱讀源代碼以了解更 多此類信 息。 除了其它工具軟件,David還為這些網卡編寫了一個配置工具(依照DOS程 序NICSETUP.EXE)。這些都可以在大多數Linux的FTP站點的目錄 /pub/Linux/system/Network/management下找到──查找文件 ewrk3tools-X.XX.tar.gz。 DE425 EISA, DE434, DE435, DE500 狀態:支持,驅動程序名稱:de4x5, tulip 這些網卡是基于下面會提到的21040芯片。DE500使用21140芯片提供 10/100Mbs以 太網的連接。閱讀下面的21040一節以了解其它信息。在非DEC 網卡使用此驅動程 序時還有一些編譯時的選項。細節可見README.de4x5。 所有Digital網卡都自動探測媒介(除了DE500暫時因為專利的原因還不支 持這一 點)。 驅動程序也支持Alpha CPU,可以被作為模塊載入。用戶可以通過ioctl() 調用訪 問驅動程序的內部──參考“ewrk3”工具和de4x5.c源碼以了解如 何使用。 DEC 21040, 21041, 2114x, Tulip 狀態:支持,驅動程序名稱:de4x5, tulip DEC 21040是Digital的總線控制單片以太網卡產品,類似與AMD的PCnet芯 片 。21040是為PCI總線結構特別設計的。SMC的新EtherPower PCI網卡也使 用這一 芯片。 對基于此芯片的網卡可以在兩個驅動程序之間進行選擇。上面討論了 DE425驅動 程序,還有一個通用的21040“tulip”驅動程序。 警告:即使你的網卡是基于該芯片的,驅動程序也可能出問題。 Davies寫道: “無法保証‘tulip.c’或‘de4x5.c’可以驅動任一基于DC2114x的網卡, 除非 說明支持該網卡。為什么??因為一個寄存器,通用寄存器(CSR12), (1)DC21140A中的CSR12是可編程的,而各個銷售商的實現各不相同﹔ (2)DC21142/3中的CSR12現在是個SIA控制寄存器(按照DC21041的方式)。 唯一 的希望是SROM可以編碼來幫助構建驅動程序。但這并非可以確保的解 決方案,因 為有些銷售商(如SMC的9332網卡)并未遵從Digital Semiconductor推荐的SROM 編程格式。” 從非技朮的角度上說,這就意味著你無法確定一個未知的采用DC2114x芯片 的網 卡可以使用Linux驅動程序,所以在購買網卡之前,最好確定一 下可以退貨。 在很多近期的SMC EtherPower網卡中已經使用更新過的21041芯片來代替 21040 。21140可以支持100Base-?,并使用21040芯片的Linux驅動程序。如 果要對 非DEC的網卡使用David的de4x5驅動程序,讀一下 README.de4x5里的細節。 Donald是使用SMC的EtherPower-10/100網卡開發出“tulip”驅動程序。注 意, 標准內核樹中的驅動程序不是最新的版本。如果有問題的話,請從 Donald 的ftp/WWW站點獲取最新的驅動程序版本。 [72]Tulip Driver 上面的URL包含了一個各種使用21040芯片的網卡/銷售商的(非完全)列表。 還要注意,目前tulip驅動程序依然被視為一個alpha驅動程序(參見 [73]Alpha 驅動程序),也應如此處理。要使用它的 話,需要編輯arch/i386/config.in, 并取消 CONFIG_DEC_ELCP支持那一行的注釋。 Donald還為tulip驅動程序的支持聲明等建立了一個郵件列表。要加入,只 需鍵 入: echo subscribe | /bin/mail linux-tulip-request@cesdis.gsfc.nasa.gov 5.17 Farallon Farallon銷售EtherWave適配器和收發器。其設備可以把多個10baseT設備 構成菊 花鏈。 Farallon Etherwave 狀態:支持,驅動程序名稱:3c509 據說這是一個包含EtherWave收發器的3c509兼容網卡。可以成功地使用目 前 的3c509驅動程序。對于一般的應用,該網卡過于昂貴了,但在某些特殊 情況下 可以使用它。小Hub的價格在$125以上,Etherwave還要在板 卡的價格之上增 加$75-$100──如果你拉的線太少就物有 所值,如果是缺少兩個網絡就不值得這 么做了。 5.18 Fujitsu 與許多網絡芯片制造商不同,Fujitsu還制造和銷售一些基于自己芯片的網 卡。 Fujitsu FMV-181/182/183/184 狀態:支持,驅動程序名稱:fmv18x 從驅動程序來看,這些網卡就是Fujitsu的MB86965網卡的簡單改進,這使 它們 與Allied Telesis的AT1700網卡很相似。 5.19 Hewlett Packard 272**網卡使用可編程I/O,與NE*000板卡類似,但是數據傳輸端口可以在 不訪問 的時候“關閉”,以避免自動探測驅動程序時的麻煩。 感謝Glenn Talbott幫助澄清了本節有關HP硬件版本號的疑惑。 27245A 狀態:支持,驅動程序名稱:hp (+8390) 這是基于8比特8390的10BaseT網卡,由于所有8比特的緣故不推荐使用。几 年前 該網卡被重新設計為高度集成的,引起了一些只影響測試程序的初始 化時的變化 ,對LAN驅動程序沒有影響。(新的網卡在切換進入/出環回模 式后不處于“准備 好”狀態。) 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [74]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 HP EtherTwist, PC Lan+ (27247, 27252A) 狀態:支持,驅動程序名稱:hp+ (+8390) HP的PC Lan+與標准的HP PC Lan網卡不同。從v1.1.x開發時其驅動程序就 被加入 到標准內核的驅動程序列表中。它可以象ne2000一樣工作在PIO模式, 也可以 象wd8013一樣工作在共享內存模式。 47B是基于16比特8390的10BaseT w/AUI,而52A是基于16比特8390的ThinLAN w/AUI。這些網卡用于收發數據包緩沖的板上RAM為32K,而不是一般的16KB, 而 且都提供自動識別LAN連接器的功能。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [75]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 HP-J2405A 狀態:支持,驅動程序名稱:lance 這些網卡比27247/27252A便宜而且稍微快一點兒,但少了一些特性,如AUI、 ThinLAN連接與啟動PROM插座。這是一個相當通用的LANCE設計,但設計時 的一個 不起眼的決定使它與通用的“NE2100”驅動程序不兼容。感謝HP的 Glenn Talbott提供的資料,使驅動程序能夠特別地支持它(包括從板上讀 取DMA通道) 。 更多有關基于LANCE的網卡信息可以在 [76]Notes on AMD...中找到。 HP-Vectra On Board Ethernet 狀態:支持,驅動程序名稱:lance HP-Vectra在主板上有一個AMD的PCnet芯片。 DMA選擇和芯片號碼信息可以在 [77]AMD LANCE找到。 更多有關基于AMD LANCE的以太網卡的技朮信息可以在 [78]Notes on AMD...找到 。 HP 10/100 VG Any Lan Cards (27248B, J2573, J2577, J2585, J970, J973) 狀態:支持,驅動程序名稱:hp100 該驅動程序還支持某些Compex VG產品。由于驅動程序支持ISA、EISA和PCI 網卡 ,所以在對內核源碼運行make config時可以在ISA網卡下找到它。 HP NetServer 10/100TX PCI (D5013A) 狀態:支持,驅動程序名稱:eepro100 顯然這只是重新標記過的Intel EtherExpress Pro 10/100B網卡。參見 Intel一 節以了解更多信息。 5.20 IBM / International Business Machines IBM Thinkpad 300 狀態:支持,驅動程序名稱:znet 它與基于Intel的Zenith Z-note兼容。參見 [79]Z-note以了解更多信息。 據信下面這個站點有一個新版本Thinkpad的全面的有用資料數據庫。我還 沒有親 自去查看過。 [80]Thinkpad-info 對不便于使用WWW瀏覽器的讀者,可以試試 peipa.essex.ac.uk:/pub/tp750/ IBM Credit Card Adaptor for Ethernet 狀態:半支持,驅動程序名稱:?(獨立發行) 該PCMCIA網卡也可以在Linux下使用。同樣需要指出的是,筆記本電腦需要 有支 持PCMCIA的芯片組,而且要把支持PCMCIA的補丁加進標准內核。 參見本文檔中的 [81]PCMCIA支持,如果可能的話, 請訪問: [82]Don's PCMCIA Stuff IBM Token Ring 狀態:半支持,驅動程序名稱:ibmtr 要支持令牌環不僅僅是寫一個設備驅動程序,還要為令牌環編寫源路由例 程。源 路由是編寫時花費時間最多的地方。 近來Peter De Schrijver在令牌環上花了些時間,處理IBM的ISA和MCA令牌 環網 卡。 目前的令牌環代碼首先被包含進1.3.x系列內核中。 Peter說該驅動程序在MCA 16/4 Megabit令牌環板上進行過測試,但在其它 基 于Tropic的板上也可以工作。 5.21 ICL Ethernet Cards ICL EtherTeam 16i/32 狀態:支持,驅動程序名稱:eth16i Mika Kuoppala(miku@pupu.elt.icl.fi)編寫了驅動程序,早在1.3.4x內 核中 就包含了它。該網卡使用了at1700網卡中使用的Fujitsu的MB86965芯 片。 5.22 Intel Ethernet Cards 注意,各種Intel網卡的命名是亂七八糟的。如果有問題,檢查網卡上主要 芯片 的i8xxxx號碼,對PCI網卡使用/proc目錄下的PCI信息, 然后再與這里列出的數 字進行比較。 Ether Express 狀態:支持,驅動程序名稱:eexpress 該網卡使用intel的i82586芯片。驅動程序的早期版本(在v1.2內核里)是 alpha-測試驅動程序,大多數人在使用時會遇到麻煩。v2.0內核里的驅動 程序要 好得多,雖然其源碼還被列為實驗性的,而且在較快的機器上問題 更多。 在驅動程序源碼開頭的注釋里列出了一些與這些網卡有關的問題(并進行 了修正 !)。至少有一個用戶報告說有死鎖,使得把驅動程序里所有的 outb替換 為outb_p的工作放慢下來。 Ether Express PRO/10 狀態:支持,驅動程序名稱:eepro Bao Chau Ha編寫了這些網卡的驅動程序,早在1.3.x內核中就包含了它。 該驅動 程序也可以使用在一些基于i82595芯片的Compaq內建以太網系統上。 Ether Express PRO/10 PCI (EISA) 狀態:半支持,驅動程序名稱:?(獨立發行) John Stalba(stalba@ultranet.com)編寫了PCI版本的驅動程序。這些網 卡使 用PLX9036 PCI接口芯片和Intel的i82596 LAN控制器芯片。如果你的 網卡上 有i82557芯片,那么你的網卡就不是該類型網卡,而是下面要 討論的版本,需 要EEPro100驅動程序。 可以從如下站點獲得PRO/10 PCI網卡的alpha驅動程序及使用指導: [83]EEPro10 Driver 如果是EISA網卡,可能要改一下驅動程序在不同情況下(PCI與EISA)使用 的檢 測機制。 Ether Express PRO 10/100B 狀態:支持,驅動程序名稱:eepro100 注意,該驅動程序不支持老式的100A網卡。驅動程序里列出的芯片號 碼 是i82557/i82558。更新驅動程序或尋找支持,請訪問: [84]EEPro-100B Page 訂閱該驅動程序的郵件列表,請如下操作: echo subscribe | /bin/mail linux-eepro100-request@cesdis.gsfc.nasa.gov 目前Donald不得不簽署了一個不得公開的協議,這表明他實際上可以公開 驅動程 序的源碼!這件蠢事都是因為Intel嗎? 5.23 Kingston Kingston制造各種網卡,包括NE2000+、基于AMD PCnet的網卡和基于DEC tulip的 網卡。大多數網卡都可以使用相應的驅動程序。參見 [85]Kingston Web Page 基于KNE40 DEC 21041 tulip的網卡據說用普通的tulip驅動程序工作得很 好。 5.24 LinkSys LinkSys制造少量不同的NE2000兼容網卡、一些直接的ISA網卡、一些即插 即用 的ISA網卡以及一些基于支持ne2000-PCI芯片組的ne2000-PCI兼容網卡。 它們的 型號太多,這里就不一一列出了。 LinkSys對Linux是友好的,擁有一個專門的Linux支持WWW主頁,甚至在某 些產品 的包裝盒上印有Linux字樣。請訪問: http://www.linksys.com/support/solution/nos/linux.htm LinkSys Etherfast 10/100 Cards. 狀態:支持,驅動程序名稱:tulip 注意,這些網卡有几種“修訂版”(即使用不同的芯片組),都使用一樣 的網卡 名。第一種使用DEC芯片組。第二種使用Lite-On PNIC 82c168 PCI 網絡接口控制 器,對它的支持被合并在標准的tulip驅動程序里(從0.83版 開始)。更多的有 關PNIC信息可在下面找到: http://cesdis.gsfc.nasa.gov/linux/drivers/pnic.html 有關這些網卡各種版本的進一步資料可以在上面提到過的LinkSys的WWW站 點得到 。 LinkSys Pocket Ethernet Adapter Plus (PEAEPP) 狀態:支持,驅動程序名稱:de620 據說這是DE-620兼容網卡,據說可以使用其驅動程序。參見 [86]DE-620以了解更 多信息。 LinkSys PCMCIA Adaptor 狀態:支持,驅動程序名稱:de650 (?) 我認為這是重新標記過的DE-650。參見 [87]DE-650以了解更多信息。 5.25 Microdyne Microdyne Exos 205T 狀態:半支持,驅動程序名稱:? 另一款基于i82586的網卡。Dirk Niggemann dirk-n@dircon.co.uk編 寫了一個自 己認為屬于“pre-alpha”的驅動程序,希望有人進行測試。要 了解細節請寫信 給他。 5.26 Mylex 如果想詢問有關Mylex的問題,請通過如下號碼與他們聯系。 MYLEX CORPORATION, Fremont Sales: 800-77-MYLEX, (510) 796-6100 FAX: (510) 745-8016. 他們也有一個WEB站點: [88]Mylex WWW Site Mylex LNE390A, LNE390B 狀態:支持,驅動程序名稱:lne390 (+8390) 這些是使用與wd80x3相似的共享內存方式的相當老的EISA網卡。在目前的 2.1.x 系列內核里有它們的驅動程序。確定共享內存地址被設置在1MB以下, 或者在機 器所安裝物理RAM的最高地址之上。 Mylex LNP101 狀態:支持,驅動程序名稱:de4x5, tulip 這是基于DEC的21040芯片的PCI網卡。可以選擇10BaseT、10Base2和10Base5 輸出 。LNP101網卡被証實可以使用通用的21040驅動程序。 參見有關21040芯片一節( [89]DEC 21040)以 了解更多信息。 Mylex LNP104 狀態:半支持,驅動程序名稱:de4x5, tulip LNP104使用DEC的21050芯片來處理四個獨立的10BaseT端口。它應該 可以使用最 近的能處理共享中斷的21040驅動程序,但(我覺察到)這一嘗 試還沒有人報告 使用過。 5.27 Novell Ethernet, NExxxx及其相關兼容卡。 前綴“NE”來自Novell Ethernet。Novell按照最便宜的NatSemi數據手冊 設計并 把制造權賣(扔?)給了Eagle,就是為了向市場提供價格合理的以 太網卡。( 目前被廣泛使用的NE2000網卡。) NE1000, NE2000 狀態:支持,驅動程序名稱:ne (+8390) ne2000是圍繞NatSemi的8390芯片進行基本設計的通用名稱。它們使用可編 程I/O,而不是共享內存,使得安裝簡單,但性能有一點降低,而且帶來几 個問 題。有關NE2000網卡的一些普遍性問題列在 [90]Problems with...里。 有些NE2000兼容卡使用National Semiconductor的“AT/LANTic”83905芯 片,提 供與wd8013相似的共享內存模式和EEPROM軟件配置。共享內存模式 比可編程I/O 模式占用的CPU要少(也就是更有效)。 一般來說,把NE2000兼容卡的I/O地址放在0x300不是個好主意,因為 几乎每一個 設備驅動程序啟動時都探測這個地址。某些差勁的NE2000 兼容卡在被探測到錯誤 區域時處理不當會導致機器死鎖。同樣,0x320 也不好,因為SCSI驅動程序會探 測0x330。 Donald為所有ne2000網卡編寫了一個NE2000診斷程序(ne2k.c)。參見 [91]診斷 程序以了解更多信息。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [92]把以太網驅動程序 作為模塊使用 以了解有關模塊的信息。 NE2000-PCI (RealTek/Winbond/Compex) 狀態:支持,驅動程序名稱:ne, ne2k-pci (+8390) 是的,無論相信與否,人們制造的PCI網卡是基于十多年前設計的ne2000接 口。 目前几乎所有這些網卡都是基于RealTek的8029芯片或Winbond的89c940 芯片 。Compex、KTI、VIA和Netvin的網卡也明顯是使用這些芯片的,但它 們使用不同 的PCI ID。 最新的v2.0內核支持對所有這些網卡的自動檢測與使用。(如果你使用 v2.0.34 之前的內核版本,把它升級以確保網卡被檢測到。)目前有兩個可 選的驅動程序 ,一個是原始的ISA/PCI驅動程序ne.c,另一個是相對 較新的只支持PCI的驅動程 序ne2k-pci.c。 要使用原始的ISA/PCI驅動程序,在運行make config時必須對“Other ISA cards”選項回答“Y”,與ISA網卡使用同一個NE2000驅動程序。(這 會讓你意 識到這些網卡并不像PCNet-PCI或DEC 21040網卡一樣智能......) 較新的只支持PCI的驅動程序與ISA/PCI驅動程序的區別在于去掉了對所有 老式8 比特網卡的支持,而且在移動網卡上的數據時使用更大的數據塊,不 再有老 式ISA-NE2000網卡可靠操作所必需的中間暫停。這樣驅動程序變得 小了一些,效 率也高了一些,但在普通應用中這一區別并沒明顯到令人激 動的地步。(如果希 望得到最高效的CPU占用率,那么PCI-NE2000不過是個 差勁的選擇。)驅動程序 更新及更多信息可以在下面找到: http://cesdis.gsfc.nasa.gov/linux/drivers/ne2k-pci.html 如果你的NE2000 PCI網卡沒有被最新版本的驅動程序檢測到,請與 /usr/src/linux/MAINTAINERS里列出的NE2000驅動程序維護者聯 系,并附上cat /proc/pci和dmesg的輸出,以便把對 該網卡的支持加到驅動程序里。 還要注意,有些網卡的制造商在明知道他們的網卡完全不同時(如PCNet-PCI 或RealTek的8139),依然在產品包裝上寫著“NE2000 Compatible”。如 果有疑 問的話,按照本文檔查看一下主要芯片的編號。 NE-10/100 狀態:不支持。 這些是基于National Semiconductor的DP83800和DP83840芯片的ISA 100Mbps 網 卡。目前沒有驅動程序支持它,也沒聽說有誰在編寫這樣的驅動程序。 除了一個 簡單的PDF文件,目前還沒有足以編寫驅動程序的有關該芯片的資 料。 NE1500, NE2100 狀態:支持,驅動程序名稱:lance 這些網卡使用AMD的原始7990 LANCE芯片,可以使用Linux的lance驅動程序。 較 新的NE2100兼容卡使用AMD的更新后的PCnet/ISA芯片。 某些老版本的lance驅動程序在使用autoIRQ從原始Novell/Eagle 7990網卡 獲取 中斷線時會遇到麻煩。據信現在已經被修正了。如果問題沒解決,用 LILO指 定IRQ,還有問題的話,請告訴我們。 DMA選擇和芯片號碼信息可以在 [93]AMD LANCE找到。 更多有關基于AMD LANCE的以太網卡的技朮信息可以在 [94]Notes on AMD...找到 。 NE/2 MCA 狀態:半支持,驅動程序名稱:ne2 若干公司生產了几種NE2000微通道網卡。v2.2內核里提供的這一驅動程序 可以檢 測如下MCA網卡:Novell Ethernet Adapter NE/2、Compex ENET-16 MC/P和Arco Ethernet Adapter AE/2。 NE3200 狀態:不支持。 這種老式的EISA網卡把一片8MHz的80186與一片i82586混合使用。沒人為它 編寫 驅動程序,因為沒有該網卡的資料,而且也沒有對其驅動程序的真正 需求。 NE3210 狀態:支持,驅動程序名稱:ne3210 (+8390) 這一EISA網卡與NE3200完全不同,它使用Nat Semi的8390芯片。其驅動程 序可以 在v2.2內核源碼樹中找到。確定共享內存地址被設置在1MB以下,或 者在機器所 安裝物理RAM的最高地址之上。 NE5500 狀態:支持,驅動程序名稱:pcnet32 這些不過是AMD PCnet-PCI網卡('970A)芯片。更多有關基于LANCE/PCnet 的網 卡信息可以在 [95]AMD LANCE找到。 5.28 Proteon Proteon P1370-EA 狀態:支持,驅動程序名稱:ne (+8390) 很明顯這是一款NE2000兼容卡,在Linux下工作得挺好。 Proteon P1670-EA 狀態:支持,驅動程序名稱:de4x5, tulip 這是另一款基于DEC的Tulip芯片的PCI網卡。據說在Linux下工作得挺好。 參見有關21040芯片一節( [96]DEC 21040)以 了解更多信息。 5.29 Pure Data PDUC8028, PDI8023 狀態:支持,驅動程序名稱:wd (+8390) PureData的PDUC8028和PDI8023系列網卡據說可以正常工作,感謝Mike Jagdis jaggy@purplet.demon.co.uk提供特別的探測代碼。對這些網卡的支 持已經被集 成在WD驅動程序里了。 5.30 Racal-Interlan 可以通過WWW站點www.interlan.com聯系Racal Interlan。我認為在 過去他們曾 被稱為MiCom-Interlan。 ES3210 狀態:半支持,驅動程序名稱:es3210 這是一款基于EISA 8390的共享內存網卡。有一個實驗性的驅動程序與v2.2 內核 一起發行,據說工作得挺好,但對早期版本網卡的EISA IRQ和共享內 存地址的檢 測有點問題。(這個問題并不僅限于Linux......)這樣就需要 給驅動程序提供 中斷和地址。例如,網卡為IRQ 5,共享內存在0xd0000, 使用模塊化驅動程序, 則在/etc/conf.modules里添上 options es3210 irq=5 mem=0xd0000。或者使用 編譯進內核的驅動程 序,在啟動時提供ether=5,0,0xd0000,eth0。I/O基址是自 動檢測的, 所以在此使用一個零值。 NI5010 狀態:半支持,驅動程序名稱:ni5010 以前需要另外尋找這些老式8比特MiCom-Interlan網卡的驅動程序,現在它 被作 為一個實驗性的驅動程序與v2.2內核一起發行了。 NI5210 狀態:半支持,驅動程序名稱:ni52 該網卡也是使用Intel的芯片。Michael Hipp編寫了一個驅動程序,作為 “alpha”驅動程序被包含在標准內核里。Michael希望得到該網卡用戶的 反饋。 參見 [97]Alpha驅動程序以了解在Linux下使用 alpha/測試版本以太網驅動程序 的重要信息。 NI6510(不是EB) 狀態:半支持,驅動程序名稱:ni65 也有一個基于LANCE的NI6510網卡的驅動程序,而且也是Michael Hipp編寫 的。 它同樣也是“alpha”驅動程序。出于某些原因,該網卡與通用的LANCE 驅動程序 不兼容。參見 [98]Alpha驅動程序以了解在Linux下使用alpha/測試 版本以太網 驅動程序的重要信息。 EtherBlaster(又名為NI6510EB) 狀態:支持,驅動程序名稱:lance 從1.3.23內核開始,通用的lance驅動程序里增加了對NI6510EB專有標識 0x52, 0x44進行的檢查。但有人報告說所有NI6510EB網卡對于這一標 識并不一樣,這會 導致lance驅動程序檢測不出你的網卡。如果出現了這一 問題,可以把探測(大 約在lance.c的第322行)改為printk(),把你的網 卡上的值打印出來,然后用它 們來代替缺省的0x52, 0x44。 在使用lance驅動程序時,網卡可能運行在“高性能”模式下,而不是NI6510 兼 容模式。 5.31 RealTek RealTek RTL8002/8012 (AT-Lan-Tec) Pocket adaptor 狀態:支持,驅動程序名稱:atp 這是一款AT-Lan-Tec與(可能的)其它一些供應商出售的通用低成本的OEM 袖珍 適配器。在標准內核里包含其驅動程序。注意,驅動程序源文件 “atp.c”里包 含了一些實質性的信息。 注意,對于早期版本的驅動程序,傳遞給ifconfig的設備名不 是eth0,而 是atp0。 RealTek 8009 狀態:支持,驅動程序名稱:ne (+8390) 這是一款ISA NE2000兼容網卡,據說使用Linux的NE2000驅動程序工作得挺 好。 程序rset8009.exe可以從RealTek的WWW站點 http://www.realtek.com.tw獲取─ ─或者用FTP從該站點下載。 RealTek 8019 狀態:支持,驅動程序名稱:ne (+8390) 這是上述網卡的即插即用版本。使用DOS軟件禁止PnP功能,啟用無跳線配 置,把 網卡的I/O地址和中斷設為可用值,然后就行了。(如果要把驅動程 序用作模塊 的話,不要忘記在/etc/conf.modules里添加一個 io=0xNNN選項。)程 序rset8019.exe可以從RealTek的WWW站點 http://www.realtek.com.tw獲取── 或者用FTP從該站點下載。 RealTek 8029 狀態:支持,驅動程序名稱:ne, ne2k-pci (+8390) 這是一款NE2000兼容的PCI單芯片產品。現在各個銷售商都在銷售使用該芯 片的 網卡。參見 [99]NE2000-PCI以了解使用該網卡的有關信息。 注意,這依然是附 在PCI總線上的十多年前的老式設計。其性能并不比相應 的ISA型號好多少。 RealTek 8129/8139 狀態:半支持,驅動程序名稱:rtl8139 另一款RealTek的PCI單芯片以太網產品。基于該芯片的網卡的驅動程序被 包括 在Linux的v2.0.34發行版本中。目前在回答是否要使用v2.2內核里的 實驗性驅動 程序時,依然要回答“Y”以獲得使用其驅動程序的權利。要了 解更多信息,請 閱讀: http://cesdis.gsfc.nasa.gov/linux/drivers/rtl8139.html 5.32 Sager Sager NP943 狀態:半支持,驅動程序名稱:3c501 這只不過是一款S.A. PROM前綴不同的3c501兼容網卡。我認為它跟原始的 3c501 一樣傷腦筋。其驅動程序檢查NP943 I.D.之后把它當成3c501來處理。 參見 [100]3Com 3c501以了解為什么實際上不需要使 用這些網卡。 5.33 Schneider & Koch SK G16 狀態:支持,驅動程序名稱:sk_g16 其驅動程序被包含在v1.1內核中,是PJD Weichmann和SWS Bern編寫的。似 乎SK G16與NI6510相似,都是基于LANCE芯片的第一版(7990)。再重復一 次,似乎該 網卡無法使用通用的LANCE驅動程序。 5.34 SEEQ SEEQ 8005 狀態:支持,驅動程序名稱:seeq8005 其驅動程序早就被包含在1.3.x內核中了,是Hamish Coleman編寫的。驅動 程序 里只包含了很少的網卡信息,所以這里也沒有多少相關信息。如果有 問題的話, 最好發e-mail給hamish@zot.apana.org.au。 5.35 SMC (Standard Microsystems Corp.) 在許多年前wd8003和wd8013還是主流產品時,Western Digital的以太網部 門就 被SMC收購了。在那之后,SMC繼續制造基于8390的ISA網卡(Elite16、 Ultra 、EtherEZ),并增加了几種PCI產品。 與SMC的聯系方法: SMC / Standard Microsystems Corp., 80 Arkay Drive, Hauppage, New York, 11788, USA. 電話技朮支持:800-992-4762 (USA) or 800-433-5345 (Canada) or 516-435-6250 (Other Countries). 索取資料:800-SMC-4-YOU (USA) or 800-833-4-SMC (Canada) or 516-435-6255 (Other Countries). E-mail技朮支 持: techsupt@ccmail.west.smc.com. FTP Site: ftp.smc.com. WWW Site: [101]SMC. WD8003, SMC Elite 狀態:支持,驅動程序名稱:wd (+8390) 這些是網卡的8比特版本。8比特的8003比較便宜,但只在流量小的用途上 是划算 的。注意,某些沒有EEPROM的網卡(使用跳線的兼容卡,或非常 非常古老 的wd8003網卡)無法報告它們使用的中斷線。此時,如果使 用auto-irq失敗,驅 動程序就會靜悄悄地分配IRQ 5。你可以從SMC的FTP站 點獲取設置/驅動程序磁盤 。注意,某些較新的SMC的“SuperDisk”程序檢 測不到那些確實古老的沒 有EEPROM的網卡。文件SMCDSK46.EXE看來是 個相當全面的方法。前面提到的檔案 中的一個ASCII文本文件里給出了所有 這些網卡的跳線設置。最新(最好?)的 版本可以從ftp.smc.com得到。 這些基本上與它們的16比特對應網卡(WD8013 / SMC Elite16)是一樣, 所以可 以從下一節了解更多的信息。 WD8013, SMC Elite16 狀態:支持,驅動程序名稱:wd (+8390) 若干年后,SMC在設計中添加了更多的寄存器和一個EEPROM。(第一塊wd8003 網 卡已經面世十年了!)兼容卡一般使用的名稱為“wd8003”,采用沒有 EEPROM( 用跳線)的設計。近期型號的SMC網卡使用SMC的83c690芯片,代 替了早期網卡上 的原始Nat Semi的DP8390。共享內存設計使網卡的速度比 PIO網卡快了一點,尤 其是對較大的數據包。更重要的是,從驅動程序的角 度來看,避免了8390可編 程I/O模式的几個Bug,而且在熱啟動探測時不會 因為可編程I/O數據寄存器導致 死機。 沒有EEPROM的網卡在無法讀取選定的中斷時會嘗試auto-irq,如果失敗的 話,它 會靜悄悄地分配IRQ 10。(8比特版本分配IRQ 5。) 板上內存大小不標准的網卡可以在啟動時指定內存大小(如果使用模塊的 話,把 它作為/etc/conf.modules中的一個選項)。8比特網卡的 標准內存大小為8kB ,16比特網卡為16kB。例如,老式的WD8003EBT網卡可 以用跳線設置為32kB內存 。要完全使用這些RAM,需要如下操作(對 I/O=0x280和IRQ 9): _________________________________________________________________ LILO: linux ether=9,0x280,0xd0000,0xd8000,eth0 _________________________________________________________________ 參見 [102]8013問題以了解某些常見問題。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [103]把以太網驅動程 序作為模塊使用 以了解有關模塊的信息。 SMC Elite Ultra 狀態:支持,驅動程序名稱:smc-ultra (+8390) 該以太網卡是基于SMC的83c790芯片,比83c690多几個新特性。雖然有一種 與老 式SMC以太網卡相似的模式,它無法與老的WD80*3驅動程序完全兼容。 但在這種 模式下,它可以與其它8390驅動程序共享大部分代碼,操作比 WD8013兼容網卡稍 微快一點。 由于Ultra部分看起來象8013,所以Ultra探測應當在wd8013探測錯誤 地識別一 個Ultra網卡之前找到它。 Donald提到可以為Ultra的“Altego”模式編寫一個獨立的驅動程序,該模 式允 許把發送鏈接起來進行,但接收緩存的利用效率會下降,但是可能不 會有這樣的 驅動程序。 總線控制SCSI主機適配器的用戶需要注意:在與Interactive UNIX一起發 行的手 冊里提到,SMC Ultra里的一個Bug會導致aha-154X主機適配器運行 的SCSI磁盤數 據損壞。這可能影響aha-154X兼容卡,如BusLogic板和 AMI-FastDisk SCSI主機 適配器。 SMC承認在Interactive和老式Windows NT驅動程序上會出現這個問題。它 是早期 版本的網卡存在的硬件沖突,可以通過驅動程序的設計解決。目前 的Ultra驅動 程序通過只在與網卡傳遞數據時才啟用共享內存避免了這個問 題。確定你的內核 版本至少是1.1.84以上,或者啟動時報告的驅動程序版 本至少 為smc-ultra.c:v1.12,否則就會出問題。 如果你想把該驅動程序作為一個可載入的模塊,應該閱讀 [104]把以太網驅動程 序作為模塊使用 以了解有關模塊的信息。 SMC Elite Ultra32 EISA 狀態:支持,驅動程序名稱:smc-ultra32 (+8390) 這個EISA網卡與其相應的ISA網卡有很多共同點。在v2.0和v2.2內核里都包 含了 一個可以使用(而且穩定)的驅動程序。感謝Leonard Zubkoff購買了 這些網卡 ,使Linux里得以增加對它們的支持。 SMC EtherEZ (8416) 狀態:支持,驅動程序名稱:smc-ultra (+8390) 該網卡使用SMC的83c795芯片并支持即插即用特性。它也有SMC Ultra 兼容模式, 可以使用Linux的Ultra驅動程序。要得到最佳效果,請使用SMC 提供的程序(通 過他們的FTP/WWW站點)禁用PnP,并把它配置為共享內存 模式。參見上面有 關Ultra驅動程序的說明。 對于v1.2內核,該網卡必須被配置為共享內存模式。但v2.0內核可以在共 享內存 或可編程I/O模式下使用該網卡。共享內存模式稍微快一點,而且對 CPU資源的占 用少一些。 SMC EtherPower PCI (8432) 狀態:支持,驅動程序名稱:de4x5, tulip 先聲明一點:EtherPower II是一款完全不同的網卡。往下看!這些網卡是 基本 的DEC 21040產品,即一個大芯片和若干收發器。Donald在開發通用 21040驅動程 序(又名為tulip.c時使用了一塊這樣的網卡。再一次感 謝Duke Kamstra提供了 這塊開發時所用的網卡。 某些近期版本的這種網卡使用較新的DEC 21041芯片,在使用早期版本的 tulip驅 動程序時可能會有問題。如果遇到麻煩,請確定使用的是最新發布 的驅動程序, 它可能還沒有被包含在目前的內核源碼樹里。 參見 [105]DEC 21040 以了解這些網卡的更多信息和當前驅動程序的狀況。 很明顯,EtherPower-II網卡的最新版本使用9432芯片。目前還不清楚它是 否可 以使用現在的驅動程序。同樣,如果無法確信的話,在購買網卡 之前,先確定如 果不能使用Linux驅動程序就可以退貨。 SMC EtherPower II PCI (9432) 狀態:半支持,驅動程序名稱:epic100 這些網卡是基于SMC 83c170芯片,與基于Tulip的網卡完全不同。在v2.0和 v2.2 內核里包含支持它的新驅動程序。更多的細節請訪問: http://cesdis.gsfc.nasa.gov/linux/drivers/epic100.html SMC 3008 狀態:不支持。 這些8比特網卡是基于Fujitsu MB86950的,它是Linux at1700驅動程序所 用MB86965的古老版本。Russ說可以通過閱讀at1700.c代碼和他自己的Tiara 網 卡DOS驅動程序包(tiara.asm)來編寫它的驅動程序。這些網卡不是很 常見。 SMC 3016 狀態:不支持。 這些是16比特的I/O映射8390網卡,與通用NE2000網卡很相似。如果你能從 SMC得 到說明資料,那么移植NE2000驅動程序將相當簡單。這些網卡不是很 常見。 SMC-9000 / SMC 91c92/4 狀態:支持,驅動程序名稱:smc9194 SMC9000是基于91c92芯片的VLB網卡。91c92也出現在若干其它品牌網卡上, 但相 當少見。Erik Stahlman (erik@vt.edu)編寫了v2.0內核里的驅動程序, 但在較 早的v1.2內核里沒有該驅動程序。把驅動程序放入v1.2內核源碼樹 沒有多大困難 。 SMC 91c100 狀態:半支持,驅動程序名稱:smc9194 據說SMC 91c92驅動程序支持該款基于100Base-T芯片的網卡,但目前還未 得到証 實。 5.36 Texas Instruments ThunderLAN 狀態:支持,驅動程序名稱:tlan 該驅動程序覆蓋了許多Compaq的內建以太網設備,包括NetFlex和Netelligent 系 列。它還支持Olicom的2183、2185、2325和2326產品。 5.37 Thomas Conrad Thomas Conrad TC-5048 這是基于DEC的21040芯片的另一款PCI網卡。 參見有關21040芯片一節( [106]DEC 21040)以 了解更多信息。 5.38 VIA 你可能沒見過VIA網卡,但VIA制造的几種網絡芯片被用在其它廠家的以太 網卡上 。他們有一個WWW站點: http://www.via.com.tw/ VIA 86C926 Amazon 狀態:支持,驅動程序名稱:ne, ne2k-pci (+8390) 該控制器芯片是VIA提供的PCI-NE2000。你可以選擇ISA/PCI驅動程序 ne.c或者只 支持PCI的驅動程序 ne2k-pci.c。參見 PCI-NE2000一節以了解更多信息。 VIA 86C100A Rhine II (and 3043 Rhine I) Status 支持,驅動程序名稱:via-rhine 這一相當新的驅動程序可以在目前的2.0和2.1內核里找到。它是在86C926 NE2000芯片上的改進,支持總線控制權傳遞,但嚴格的緩存32比特字節對 齊的要 求限制了從中得到的好處。要了解更多細節和驅動程序更新,參見: http://cesdis.gsfc.nasa.gov/linux/drivers/via-rhine.html 5.39 Western Digital 請參見 [107]SMC以了解有關SMC網卡的信息。(SMC在多 年前就收購了Western Digital的網卡部門。) 5.40 Winbond Winbond實際上并不制造和向大眾銷售完全的網卡──他們生產單片以太網 芯片 ,其它公司購買并在PCI板上印上自己的名字,然后通過零售店銷售。 Winbond 89c840 狀態:半支持,驅動程序名稱:winbond-840 該驅動程序還沒有與內核一起發行,因為它還處于測試階段。可以從下面 獲取: http://cesdis.gsfc.nasa.gov/linux/drivers/test/winbond-840.c Winbond 89c940 狀態:支持,驅動程序名稱:ne, ne2k-pci (+8390) 該芯片是很多制造商出售的低價PCI ne2000網卡上最常見的兩個芯片之一。 注意 ,這依然是附在PCI總線上的十多年前的老式設計。其性能并不比相應 的ISA型號 好多少。 5.41 Xircom 在很長一段時間里,除非你簽署文件放棄你的生命,Xircom不愿意發布編 寫驅動 程序所需的編程信息。顯然有足夠多的Linux用戶不斷糾纏他們,要 得到驅動程 序支持(Xircom聲稱支持所有通用網絡操作系統......),所 以他們改變了政策 ,無需再簽署不公開協議,允許公開有關資料。有些人 說他們將要公開SCO驅動 程序的源碼,另一些被告知他們不再提供象早期PE 型號那樣“被廢棄”的產品資 料。如果你感興趣并想自己了解一下,可以 聯系Xircom:1-800-874-7875, 1-800-438-4526 或 +1-818-878-7600。 Xircom PE1, PE2, PE3-10B* 狀態:不支持。 不要抱太大希望,但如果你有一個這樣的并口適配器,可以在DOS仿真器下 使 用Xircom提供的DOS驅動程序使用它。你需要允許DOSEMU訪問并口,可能 還要 和SIG(DOSEMU的傻瓜中斷生成器)一起使用。 Xircom PCMCIA Cards 狀態:半支持,驅動程序名稱:???? 在David Hinds的PCMCIA軟件包里有一些Xircom的PCMCIA網卡驅動程序。查 看一 下以了解最新信息。 5.42 Zenith Z-Note 狀態:支持,驅動程序名稱:znet 內建的Z-Note網絡適配器是基于使用兩個DMA通道的Intel i82593。 在目前的內 核版本里有一個(alpha?)驅動程序。與所有筆記本電腦和袖 珍適配器一樣,在 運行make config時它被放在“Pocket and portable adaptors”部分。同時還要 注意,IBM ThinkPad 300與Z-Note兼容。 5.43 Znyx Znyx ZX342 (DEC 21040 based) 狀態:支持,驅動程序名稱:de4x5, tulip 在使用基于該芯片的網卡時可以在兩個驅動程序中進行選擇。David 編寫 了DE425驅動程序,Donald編寫了通用的21040驅動程序。 注意,在1.1.91,David增加了一個編譯選項,允許非DEC網卡(如Znyx網 卡)使 用其驅動程序。請閱讀README.de4x5以了解其中細節。 參見 [108]DEC 21040 以了解這些網卡的更多信息和當前驅動程序的狀況。 5.44 識別未知網卡 好吧,你叔叔的侄子的鄰居的朋友有一個兄弟,在他給兒子的寵物大老鼠 做窩 的AT箱子里找到了一塊老式ISA以太網卡。最后這塊網卡落在你的手里, 想 在Linux下使用,但沒人知道這塊網卡是什么,也沒有任何資料。 首先,尋找可以作為線索的任何明顯的型號編碼。如果型號里包含2000, 那么很 有可能是塊NE2000兼容網卡。上面有8003和8013的網卡可能是 Western/Digital 的WD80x3網卡,或者是SMC Elite網卡,或者它們的兼容 網卡。 識別網絡接口控制器 尋找網卡上最大的芯片。那就是網絡控制器(NIC),大多數都可以從部分 編號 上識別出來。如果你知道網卡上是哪一種NIC,下文就能幫你弄清是哪 一種網卡 。 可能最常見的NIC還是National Semiconductor的DP8390,又名NS32490, 又 名DP83901,又名DP83902,又名DP83905,又名DP83907。這些不過是National 生 產的一部分芯片!其它一些公司,如Winbond和UMC,生產DP8390和DP83905 兼容 部分,如Winbond的89c904(與DP83905兼容)和UMC的9090。如果網卡 由8390構 成,那么它可能就是一個ne1000或ne2000兼容網卡。其次常用的 基于8390的網卡 是wd80x3網卡及其兼容卡。使用DP83905的網卡可以被認為 是ne2000或wd8013。 新版本的通用wd80x3和SMC Elite網卡在原來DP8390 的位置上用的是83c690 。SMC Ultra網卡采用83c790,使用與wd80x3網卡稍 有區別的驅動程序。SMC EtherEZ網卡采用83c795,使用的驅動程序與SMC Ultra網卡一樣。所有基于某 種8390或8390兼容芯片的BNC網卡都有一片緊 靠BNC連接器的16針DIP芯片8392( 或83c692,又或???392)。 另一個在老式網卡上找到的常見NIC是Intel的i82586。使用該NIC的網卡包 括3c505、3c507、3c523、Intel的EtherExpress-ISA、Microdyne的Exos-205T 和Racal-Interlan的NI5210。 原始AMD LANCE NIC的編號為AM7990,較新的版本包括79c960、79c961、 79c965 、79c970和79c974。上面的大多數網卡都可以使用Linux的LANCE驅 動程序,有個 例外是使用自己的驅動程序的老式Racal-Interlan的NI6510 網卡。 使用DEC的21040、21041、21140或類似的編號NIC的較新的PCI網卡可以使 用Linux的tulip或de4x5驅動程序。 其它有一個印著RTL8029、89C940或86C926的大芯片的PCI網卡是ne2000兼 容網卡 ,v2.0以上版本Linux里的ne驅動程序在啟動時可以自動檢測這些網 卡。 識別以太網地址 每一個以太網卡都有一個唯一的6字節網卡地址。同一個制造商生產的每一 塊網 卡的該地址的前三個字節都是一樣的。例如,所有的SMC網卡都以 00:00:c0開始 。制造商分配的后三個字節對于自己生產的每一塊網卡 都是唯一的。 如果你的網卡上有個標簽給出了網卡地址的全部六個字節,就可以通過前 三個字 節查到它的銷售商。但一般PROM插座上貼的標簽上只打印了后三個 字節,沒什么 用。 You can determine which vendors have which assigned addresses from RFC-1340. Apparently there is a more up to date listing available in various places as well. Try a WWW or FTP search for EtherNet-codes or Ethernet-codes and you will find something. 你可以從RFC-1340上找到分配 給銷售商的地址。顯然有很多地方可以找到 最新的地址列表。通過WWW或FTP查 找EtherNet-codes或 Ethernet-codes就可以找到它們。 使用未知網卡的技巧 如果還無法確定是哪一種網卡,但至少縮小了可能的范圍,那么你可以構 建一個 包括全部可能驅動程序的內核,然后看看其中的哪一個可以在啟動 時自動檢測到 網卡。 如果內核沒有檢測到網卡,那么就是網卡沒有被配置到一個驅動程序尋找 網卡時 探測的地址上。此時,需要從當地的Linux的FTP站點下載 scanport.tar.gz,看 看它能否定位出你的網卡跳線所設的地址。它 掃描從0x100到0x3ff的ISA I/O地 址以尋找 /proc/ioports里沒有注冊的設備。如果它在某個特定地址發現 了一個 未知設備,那么就可以用一個啟動參數ether=把它明確設定為 以太網卡探測的地 址。 如果你設法檢測到了網卡,那么一般可以依次改變未知跳線來了解跳線的 作用, 并查看被檢測到的網卡所用I/O基址和中斷。中斷設置一般可以通過 查看跳線在 網卡背面所焊接的位置來得到。從網卡有金屬插座的一端數背 面的“金手指”, 相應于金手指4、21、22、23、24、25、34、35、36、37、 38分別是中斷9、7 、6、5、4、3、10、11、12、15、14。8比特網卡只用到 金手指31。 看起來沒什么用的跳線一般是用來選擇可選啟動ROM的內存地址。靠近BNC 或RJ-45或AUI的其它跳線一般是用來選擇輸出媒介的。一般它們也在印著 YCL 、Valor或Fil-Mag的“黑盒子”變壓器附近。 如下URL收集了很多各種網卡的跳線設置: [109]Ethercard Settings 5.45 非以太網設備的驅動程序 在Linux源碼里有若干在網絡程序看來是象以太網設備的其它驅動程 序,但實際 上不是以太網設備。為了本文檔的完整性,把它們簡要地列在 這里。 dummy.c -- 該驅動程序的目的是提供一個設備來指出路由,但并不 實際傳輸數 據。 eql.c -- 負荷均衡,控制多個設備(一般是modem)并在其中平衡發 送負載,對 網絡程序表現為單個設備。 ibmtr.c -- IBM的令牌環,并非真正的以太網。令牌環要求源路由以 及其它一些 麻煩事。 loopback.c -- 環回設備,你的機器發出的所有數據包的目的地還是 你自己的機 器。從本質上說只是把數據包從發送隊列移到接收隊列。 pi2.c -- Ottawa業余無線電愛好者俱樂部PI和PI2的接口。 plip.c -- 并行線Internet協議,允許兩台計算機通過并口的端到端 方式連接互 相發送數據包。 ppp.c -- 端到端協議(PPP,RFC1331),在端到端的連接(一般為 modem)上傳 輸多協議數據幀。 slip.c -- 串行線Internet協議,允許兩台計算機通過串口(一般通 過modem) 的端到端方式連接互相發送數據包。 tunnel.c -- 提供一個IP通道,可以使網絡數據流透明地穿過子網。 wavelan.c -- 由Intel的82586協處理器控制的類以太網無線電收發 器。82586也 被用在諸如Intel EtherExpress的其它以太網卡上。 6. 電纜、同軸電纜、雙絞線 如果你是從頭開始建網絡,那么就必須決定是使用細纜以太網(使用BNC連 接器 的RG58同軸電纜)或10baseT(使用8線“電話”連接器RJ-45的電話線 樣式的雙 絞線電纜)。使用N連接器的RG-5電纜的老式粗纜以太網已經被廢 棄,現在很少 見到了。 參見 [110]網卡應當支持的線纜類型以大致了 解一下線纜類型。還要注意 ,comp.dcom.lans.ethernet里的FAQ包括 了大量有關電纜方面的有用信息。FTP 到rtfm.mit.edu下的 /pub/usenet-by-hierarchy/以查看該新聞組的FAQ。 6.1 細纜以太網(thinnet) 細纜以太網相當便宜。如果自己制作電纜,實心的RG58A是$0.27/m, 分股 的RG58AU是$0.45/m。彎頭的BNC連接器每個< $2, 其它各種器件也都挺便宜。重 要的是在每段電纜的末端需要裝一個50歐姆 的終結器,所以每條電纜的預算大約 是$2。還有一個關鍵問題是電 纜中不能有“殘樁”──“T”連接器必須直接連 到以太網卡上。 使用細纜以太網有兩個主要缺點。首先它限制為10Mb/sec──100Mb/sec要 求使 用雙絞線。其次,如果你是用一個大環路把機器連接起來,而某些笨 蛋把電纜從 自己的T形接頭上拿開破壞了環路,整個網絡就無法使用了,因 為出現了一個無 限大的阻抗(電路開路)而不是要求的50歐姆終結。注意, 只要不把電纜從T形 接頭上移開,而是把T形接頭從網卡上取下來,整個子 網就不會被破壞。當然, 從機器上拔出T形接頭會干擾機器的工作。8-) 如 果只是兩台機器的小網絡,還 是需要T形接頭和50歐姆終結器── 不能用直接用電纜把它們連起來! 有一些有趣的電纜系統看起來象用一根導線連到網卡上,但實際上是 有兩根并排 的導線包在外面的套子里,其截面為橢圓形。在環路的轉折點, 用拼接的BNC連 接器連到網卡上。所以它等同于用兩根電纜和一個BNC的T形 接頭,但在這種情況 下,用戶不可能從T形接頭的一邊移走電纜來干擾網絡。 6.2 雙絞線 雙絞線網絡需要主動態的Hub,每個Hub起碼要$50,未加工的電纜 費用實際上比 細纜要高。你可以不理會那些聲稱可以使用已有電話線的說 法,因為這種安裝情 況是很少見的。 另一方面,所有100Mb/sec以太網提議都使用雙絞線,而且絕大多數新的商 業安 裝使用的也是雙絞線。此外,Russ Nelson進一步提出“新的布線應該 使用5類線 。使用其它的電纜都是在浪費安裝者的時間,因為任一種100Base 都將要求使 用5類線。” 如果只是連接兩台機器,可以通過交換接收與發送線(1-2和3-6)來避免 使 用Hub。 如果你拿著RJ-45連接頭沖著自己(就象你要把它插到自己嘴里),鎖扣朝 上, 那么從左到右各插腳的編號依次是1到8。各插腳的用途如下: 插腳編號 任務 ---------- ---------- 1 輸出數據 (+) 2 輸出數據 (-) 3 輸入數據 (+) 4 保留為電話使用 5 保留為電話使用 6 輸入數據 (-) 7 保留為電話使用 8 保留為電話使用 如果你想自己制作一條電纜,請認真閱讀下文。一對差分信號必須使用同 一條雙 絞線,以滿足UTP電纜所要求的最小阻抗/損耗。如果看一下上面的 表格,就知 道1+2和3+6是兩對差分信號。不是1+3和2+6!!!!在10MHz, 長度較短的情況 下,出這樣的錯還可以工作,但僅限于線路長度較短的情 況下。在100MHz時想都 不要想出錯會怎么樣。 對于末端為“A”和“B”的普通接插線,你要做一個插腳到插腳的映射, 輸入和 輸出分別使用一對雙絞線(出于阻抗的原因)。這就意味著1A連到 1B,2A連 到2B,3A連到3B,6A連到6B。連接1A-1B和2A-2B的必須是一條雙 絞線。同樣,連 接3A-3B和6A-6B的必須是另一條雙絞線。 如果目前沒有Hub,想做一條“空電纜”,那么要做的就是把“B”的輸出 作為 “A”的輸入,把“A”的輸出作為“B”的輸入,同時不改變它們的極 性。也就 是說,把1A連到3B(A的輸出+到B的輸入+),把2A連到6B(A的輸 出-到B的輸 入-)。這兩根線必須是一條雙絞線。它們把網卡/插腳“A”作 為輸出傳送,把 網卡/插腳“B”作為輸入傳送。然后把3A連到1B(A的輸入+ 到B的輸出+), 把6A連到2B(A的輸入-到B的輸出-)。這兩根線也必須是 一條雙絞線。它們把網 卡/插腳“A”作為輸入傳送,把網卡/插腳“B”作 為輸出傳送。 因此,如果想使用普通接插線,需要砍掉它的一端,交換接收和發送雙絞 線的位 置后插入新的插頭,把它壓緊,就得到一條“空”電纜了。一點也 不復雜。只不 過是把一塊網卡的發送信號送到第二塊網卡的接收端,如法 炮制就可以了。 注意,在10BaseT被批准為標准之前,就存在其它使用RJ-45連接頭的網絡 格式和 上述的連線安排。例如SynOptics的LattisNet和AT&T的StarLAN。 在某些情況下 ,(如使用早期的3C503網卡)可以設置網卡上的跳線使網卡 能夠與不同類型 的Hub連接,但絕大多數情況下,為這些老式類型網絡設計 的網卡無法工作在標 准10BaseT網絡/Hub下。(注意,如果網卡還有一個AUI 端口,那么肯定可以 把AUI和10BaseT收發器混合在一起使用。) 6.3 粗纜以太網 粗纜以太網几乎全部被廢棄了,一般只用在與一個已存在網絡保持兼容。 可以放 松規定并使用被動的$3的N-to-BNC連接器把大量粗纜以太網和細纜 連接起來,這 通常是擴展已有粗纜以太網的最佳解決方案。對這種情況一 個正確(但代價昂貴 )的方案是使用轉發器。 7. 軟件設置與網卡診斷 大多數情況下,如果用軟件進行配置并把配置保存在EEPROM里,一般需要 重新啟 動DOS,使用銷售商提供的DOS程序來設置網卡的中斷IRQ、I/O、內 存地址和其它 東西。此外,希望這是只要設置一次的東西。如果沒有網卡 的DOS軟件,試著在 網卡制造商的WWW站點上找找。如果不知道站點名稱, 可以猜一下,如 “www.my_vendor.com”,其中“my_vendor”是網卡制造 商的名稱。這種方法 對SMC、3Com和許多許多其它制造商都有效。 有些網卡有Linux版本的配置工具,并在本文中列出。Donald編寫了几個運 行 在Linux下的小的網卡診斷程序,其中大部分都是他在編寫驅動程序時使 用的診 錯工具。不要指望有花哨的菜單驅動界面。在使用絕大部分工具時, 你需要閱讀 源碼。即使你所用的網卡沒有相應的診斷工具,你還是可以通 過cat /proc/net/dev獲得一些信息──假設至少在啟動時你的 網卡被檢測到了。 隨便哪種情況下,都得在啟動時運行這些程序(允許對端口進行I/O操作), 而 且可能在這么做之前要先用ifconfig eth0 down關閉以太網卡。 7.1 以太網卡的配置程序 WD80x3網卡 對于使用wd80x3網卡的人,在Linux的FTP站點上可以找到的 wdsetup-0.6a.tar.gz里有一個程序wdsetup。它的維護不是很 好,有一段時間沒 有更新了。如果能用,那么很好﹔如果不行,那么只好 使用應當和網卡一起拿到 的DOS版本程序。如果沒有這樣的DOS版本程序, 還是可以很高興地告訴你, 從SMC的FTP站點上可以獲取設置/驅動程序磁盤。 當然,你必須有一個帶EEPROM 的網卡才能使用該工具。很老很老 的wd8003網卡和一些wd8013兼容網卡使用跳線 來設置網卡。 Digital/DEC網卡 Digital的EtherWorks 3網卡可以用類似于DOS程序NICSETUP.EXE的方 式進行配置 。David C. Davies編寫了這一工具以及和驅動程序在一起的其 它EtherWorks 3 工具。查看一下你本地的Linux FTP站點下的目錄 /pub/linux/system/Network/management,尋找名為 ewrk3tools-X.XX.tar.gz的 文件。 NE2000+或AT/LANTIC網卡 有些Nat Semi的DP83905產品(如AT/LANTIC和NE2000+)是可以用軟件配置 的。 (注意,這些網卡也可以仿真wd8013網卡!)你可以從Donald的FTP服 務 器cesdis.gsfc.nasa.gov下載文件 /pub/linux/setup/atlantic.c來配置此網卡 。另外,Kingston 的DP83905網卡配置程序看起來可以用在所有網卡上,因為在 允許使用網卡 前,它們并不檢查銷售商指定的地址。按照如下URL: [111]Kingston Software下載20XX12.EXE和INFOSET.EXE。 在配置NE2000+網卡時要格外小心,因為設定的值有錯誤會帶來麻煩。一個 典型 的錯誤是啟用EEPROM里的啟動ROM(即使沒有安裝ROM)會與VGA卡發生 沖突。其 結果就是開機后屏幕沒有顯示,計算機只是發出一些叫聲。 一般如下操作就可以解決問題:拔出機器里的卡,然后啟動進入CMOS設置。 把 “Display Adapter”改為“Not Installed”并把缺省的啟動驅動器改 為“A:” (軟盤驅動器)。同時把“Wait for F1 if any Error”改為 “Disabled”。這 樣,計算機就無需用戶干預可以啟動了。現在創建一個 可啟動的DOS軟盤( “format a: /s /u”),把上述檔案文件 20XX12.EXE里的程序default.exe拷貝 到軟盤上。再鍵入 echo default > a:autoexec.bat,這樣在用這張軟盤啟動時 , 該程序會自動運行,把網卡設置為正常的缺省值。關閉機器,重新安裝 ne2000+網卡,插入新的啟動軟盤,再開機。可能機器還會發出叫聲,但最 后你 會看到機器從軟盤啟動時軟驅的燈亮了。等一兩分鐘,軟驅會停下來, 表 示default.exe程序運行結束,再關閉機器電源。再次啟動時,可 能你的顯式器 就又工作正常了,這時就可以把CMOS設置改回去,并把網卡 EEPROM設置改回到希 望的值。 注意,如果手頭沒有DOS,你可以用一張自動運行Donald的atlantic 程序(使用 正確的命令行開關)的Linux啟動軟盤來完成上面的工作,代替 自動運 行default.exe程序的DOS啟動軟盤。 3Com網卡 3Com的Etherlink III系列網卡(如3c5x9)可以用Donald的另一個配置工 具進行 配置。你可以從Donald的FTP服務器cesdis.gsfc.nasa.gov上 獲取文 件/pub/linux/setup/3c5x9setup.c來配置這些網卡。 (注意,DOS下的3c5x9B配 置工具可能有一些屬于Etherlink III的“B”系 列的額外選項。) 7.2 以太網卡的診斷程序 Donald編寫的診斷程序都可以從以下URL獲取。 [112]Ethercard Diagnostics Allied Telesis AT1700 -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/at1700.c。 Cabletron E21XX -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/e21.c。 HP PCLAN+ -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/hp+.c。 Intel EtherExpress -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/eexpress.c。 NE2000 cards -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/ne2k.c。對于現在常用的NE2000-PCI兼容網卡 還有一個PCI版 本的程序。 RealTek (ATP)袖珍適配器 -- 在cesdis.gsfc.nasa.gov下尋找文件 /pub/linux/diag/atp-diag.c。 所有其它網卡 -- 試著用cat /proc/net/dev和dmesg來看 看內核里有關想了解網 卡的有用信息。 8. 技朮信息 對于那些想了解更多有關網卡如何工作、或如何使用現有驅動程序,以及 試圖為 目前不支持的網卡編寫自己的驅動程序的人來說,這些信息應該會 有用。如果你 沒有這種想法,那么最好跳過這一節。 8.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,等等。) 8.2 編寫驅動程序 在Linux下使用以太網卡所必需的只不過是相應的驅動程序。因此,關鍵是 制造 商要向公眾公開編程的技朮資料,而無需你(或其他什么人)簽署什 么協議。關 于獲取資料的可能性(也許你不編寫代碼,那么就是其他人編 寫你確實需要的驅 動程序的可能性),一個較好的指南是Crynwr (昵稱 Clarkson)的包驅動程序的 可用性。Russ Nelson在干這些事,對開發Linux 驅動程序很有幫助。網上沖浪者 可以試著看一下Russ的軟件。 [113]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: [114]KHG 8.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通道,并完全關閉以節約能源(象收發器 一樣)。 雜項函數 如同一個重新設置函數,如果事情變得很糟,驅動程序可以試圖重新設置 網卡作 為最后防線。一般在發送超時或類似情況下如此進行。也是一個讀 取網卡統計寄 存器的函數,如果是這樣配備的話。 8.4 3Com的技朮信息 如果對3Com網卡驅動程序的工作感興趣,可以從3Com公司獲取技朮資料。 Cameron友好地告訴了我們該如何去做: 在我們的“技朮參考文獻”(TRs)里給出了3Com的以太網適配器驅動程序 程序 員需要了解的資料。這些手冊描述了板上的程序員接口,但沒有提及 診斷、安裝 程序等終端用戶所看到的東西。 網絡適配器分部的市場部有技朮參考資料分發。為了使這個計划更有效, 我們把 它集中到一個稱作“CardFacts”的自動電話系統里。你可以打電話 來,然后它 把資料傳真給你。要索取技朮參考資料,打電話到408-727-7021。 索取開發人員 的訂單,資料號是9070。在打電話前准備好你的傳真號碼。 填完訂單后把它傳真 到408-764-5004。手冊會由聯邦速遞的次日服務送到。 有人認為我們的手冊不該免費,他們也在尋找此系統過于昂貴或占用的時 間和努 力太多的証據。到目前為止,3Com的顧客確實不錯,向我們提出的 要求也很合理 。我們需要你們的繼續合作并把這樣的服務維持下去。 8.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產品采用不同的“重起”方法。 有 些恢復到上次離開網絡環路的地方,另一些則從環路的開頭開始,就象 剛被初始 化一樣。 8.6 廣播與混雜模式 Donald所做的另一個工作是實現廣播與混雜模式的鉤子。所有發布的 (即不 是ALPHA的)ISA驅動程序現在都支持混雜模式。 Donald寫道:“我准備從討論混雜模式開始,它從概念上來說很容易實現。 對大 多數硬件,你只需要設置一個寄存器位,然后就可以接收到線路上的 每一個數據 包。對,差不多就這么簡單﹔對有些硬件,你必須先關閉板卡 (可能會丟失若干 數據包),重新配置它,然后重新啟用以太網卡。對吧, 就這么簡單,下面要討 論的就不是這么明顯了:廣播模式。它可以用兩種 方式實現: 1. 使用混雜模式和一個如Berkeley包過濾器(BPF)的數據包過濾器。 BPF是一 個模式匹配指令語言,可以編寫一個程序挑出感興趣的地址。它的 優點在于 它很普遍和可編程。其缺點是沒有一個一般性的方法可以讓內核 避免打開混 雜模式和通過每一個注冊的包過濾器運行每一個線路上的數據 包。參見 [115]Berkeley包過濾器以了解更多信息。 2. 使用絕大多數以太網芯片內建的廣播包過濾器。 我想應該列出几個以太網卡/芯片提供的廣播包過濾器: 芯片/網卡 混雜模式 廣播包過濾器 ---------------------------------------- Seeq8001/3c501 Yes Binary filter (1) 3Com/3c509 Yes Binary filter (1) 8390 Yes Autodin II six bit hash (2) (3) LANCE Yes Autodin II six bit hash (2) (3) i82586 Yes Hidden Autodin II six bit hash (2) (4) 1. 這些網卡聲稱有一個過濾器,但只是簡單地對“accept all multicast packets”或“accept no multicast packets”回答yes/no。 2. AUTODIN II是標准的以太網CRC校驗多項式。在這種方式下,廣播地址 被哈 希運算后在哈希表里進行查找。如果啟用了相應的比特位,則數據包 被接收 。以太網數據包的設計使得硬件在如此處理時的開銷很小──(一 般)只要 在前6個八進制數(目標地址)之后鎖定CRC電路(用來進行錯誤 檢查)的6 個比特位,把它們作為哈希表的索引(6比特──一個64比特的 表)。 3. 這些芯片使用6比特哈希,必須由主機計算并載入哈希表。這也就是說 內核 必須包含CRC代碼。 4. 82586內部使用6比特哈希,但是由自己從接受的廣播地址列表計算出 哈希表 。 注意,這些芯片的過濾效果都不好,還需要一個中間層次的模塊完成最后 的過濾 。同時還要注意,在每種情況下都必須保持一個完整的接受廣播地 址列表,在出 現變化時以重新計算哈希表。 8.7 Berkeley包過濾器(BPF) 開發者普遍認為BPF的功能不該由內核提供,而是放在一個(但愿很少使用 的) 兼容庫里。 對不了解的人來說:BPF(Berkeley包過濾器)是一種向內核網絡層說明對 哪些 數據包感興趣的機制。它是用一種建立在底層網絡代碼中的特殊指令 語言解釋器 實現的。應用程序把一個用這種語言編寫的程序傳遞給內核, 然后內核對每一個 接收到的數據包執行該程序。如果內核有多個BPF應用程 序,對每個數據包都要 運行這几個程序。 問題在于很難從數據包過濾器程序推斷出應用程序實際上對哪一種數據包 感興趣 ,所以一般的解決方法就是始終運行過濾器。假設一個應用程序注 冊的BPF程序 是獲取發往某個廣播地址的低速數據流。絕大多數以太網卡有 一個64個入口的哈 希表的硬件實現的廣播地址過濾器,用來忽略大多數不 想要的廣播數據包,所以 有可能以極低的開銷完成這一操作。但是由于有 了BPF,內核必須把接口設置為 混雜模式,接收所有數據包,并對它們運行 過濾器。不管怎樣,這樣確實可以工 作,但考慮到對所要求的數據包進行 的處理,就已經變得過于麻煩了。 9. 便攜式/筆記本電腦聯網 有几種方法把筆記本電腦聯上網。可以使用SLIP代碼(并以串行線速率運 行)﹔ 可以使用一個有內建支持PCMCIA插槽的筆記本電腦﹔可以使用一個 有插座并插入 了一塊ISA網卡的筆記本電腦﹔或者使用并口以太網適配器。 9.1 使用SLIP 這是最便宜的解決方案,但最麻煩。另外,無法獲得很高的傳輸速率。因 為SLIP實際上與以太網卡無關,這里就不多說了。參見NET-2 Howto。 9.2 PCMCIA支持 設法完全確定硬件的情況(即網卡制造商、PCMCIA芯片控制器的制造商), 然后 在筆記本電腦討論組里詢問。不管怎樣,不要把事情想得這么簡單。 預料會花費 一些時間、給內核打補丁等。可能有一天只需要鍵入 “make config”。8-) 目前所支持的兩個PCMCIA芯片組是Databook的TCIC/2和Intel的i82365。 在tsx-11.mit.edu的/pub/linux/packages/laptops/下有一些程序可能會 有用。 它們包括從PCMCIA以太網卡驅動程序到與PCMCIA控制器芯片進行通 信的程序。注 意,這些程序一般與某個特定的PCMCIA芯片(即intel 82365 或TCIC/2)相關。 對于NE2000兼容卡,有人通過在DOS下配置網卡,然后在DOS命令提示符下 執 行loadlin啟動Linux,成功地實現了對PCMCIA的支持。 目前一直在獲得實質性的進展,對于希望PCMCIA支持的Linux用戶,情況正 在好 轉。這一努力的先驅是David Hinds。他的最新PCMCIA支持軟件包可以 從下面得 到: [116]PCMCIA Package 尋找一個類似pcmcia-cs-X.Y.Z.tgz的文件,其中X.Y.Z是最近的版本 號。很有可 能它也被上載到了FTP站點tsx-11.mit.edu。 注意,Donald的PCMCIA啟用程序是一個用戶級的程序,而David Hinds的程 序是 運行在內核級。最好使用David的軟件包,因為它的使用很廣泛,并在 繼續開發 過程中。 9.3 插座內的ISA以太網卡。 筆記本電腦的插座一般要花$250,提供兩個全尺寸的ISA插槽、兩個串口和 一個 并口。大多數插座使用筆記本電腦的電池供電,如果使用短的ISA卡, 有若干插 座可以使用插座里附加的額外電池供電。你可以加一個便宜的以 太網卡,并享受 全速的以太網性能。 9.4 袖珍/并口適配器。 “袖珍”以太網適配器也可以滿足需要。注意,由于并口的接口限制,傳 輸速率 不夠好(可能最高是200kB/s?)。 還有一個約束是牆磚一樣的電源。你可以購買/制作一個從筆記本電腦的鍵 盤端 口引出電源的電纜,擺脫與適配器一起的牆磚。(參見 [117]鍵盤電源) 參見 [118]DE-600 / DE-620和 [119]RealTek以了解支持的兩款袖珍適配器。 10. 雜項 所有不適合放在別處的相關信息都堆在這里。可能不相干,也可能大家不 感興趣 ,但還是放在這兒了。 10.1 向內核傳遞以太網參數 有兩個通用的內核命令可以在啟動時向內核傳遞以太網參數(ether 和reserve) 。可以用LILO、loadlin或其它接受可選參數的啟動工具 完成該操作。 例如,如果命令為“blah”,希望接收3個參數(假定為123、456和789), 那么 在使用LILO時就應該如下: LILO: linux blah=123,456,789 要了解啟動時參數的更多信息(和完全的列表),請參見 [120]BootPrompt-HOWTO ether命令 ether=參數與直接構建在內核的驅動程序一起使用。ether=參 數對一個模塊化的 驅動程序完全不起作用。它的最通用形式如下: ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME 所有的參數都是可選的。第一個非數字的參數被用做NAME。 IRQ: 很明顯。為“0”的IRQ值(一般為缺省值)意味著autoIRQ。首先設置IRQ 而不是base_addr是一個歷史性的巧合──無論在改變別的什么時都可以順 便改 正這一點。 BASE_ADDR: 也很明顯。值為“0”(一般為缺省值)意味著探測以太網卡的網卡 類型特 定的地址列表。 PARAM_1: 這開始是用來覆蓋WD80*3這樣的共享內存網卡的起始內存的值。有些驅 動 程序使用該值的低4位來設置診斷信息級別。0 -- 缺省值,1-7 -- 級別1..7 , (7是最完全的信息)8 -- 級別0(沒有信息)。另外,LANCE驅動程序使 用 該值的低4位來選擇DMA通道。否則就使用auto-DMA。 PARAM_2: 3c503驅動程序使用它來選擇內部還是外部收發器。0 -- 缺省/內部 ,1 -- 外部AUI。Cabletron的E21XX網卡還使用PARAM_2的低4位來選擇輸出媒介 。 否則就自動檢測。 NAME: 選擇該值所指的網絡設備。標准內核對附屬于總線的以太網卡使用名稱 “eth0”、“eth1”、“eth2”和“eth3”,對并口“袖珍”以太網適配 器使用 “atp0”。arcnet驅動程序使用名稱“arc0”。可以使用這些LILO 參數明確設置 基址來啟用多塊網卡。1.0內核把基于LANCE的以太網卡作為 特殊情況進行處理 :LILO參數被忽略,LANCE網卡總是被分配為從“eth0” 開始的名稱“eth” 。附加的非LANCE網卡必須被明確指定為 “eth”,并用諸如 “ether=0,-1,eth0”的方式禁止通常的 “eth0”探測。(對,這是個Bug。) reserve命令 這個緊接著的LILO命令用法與上面的“ether=”一樣,即附加在lilo.conf 里指 定的啟動選擇名稱后面。 reserve=IO-base,extent{,IO-base,extent...} 在某些機器上,可能需要防止設備驅動程序在某個特定區域里檢查設備 (自動探 測)。其原因可能是由于設計低劣的硬件使啟動凍結(如某 些以太網卡)、被錯 誤識別的硬件、在較早的探測中狀態被改變的硬件、 或者僅僅是不想讓內核初始 化硬件。 啟動時的參數reserve通過指定無需探測的I/O端口區域來解決這個問 題。該區域 保留在內核的端口注冊表里,就象該區域里已經發現了一個設 備一樣。注意,這 一機制在大多數機器上是不必要的。只有在有問題或特 定的情況下才有必要使用 它。 指定區域里的I/O端口受到保護,不被設備探測影響。在某些驅動程序被 NE2000 挂起,或其它設備被錯誤地識別為NE2000時使用這一方法。正確的 設備驅動程序 不該探測一個保留區域,除非另一個啟動參數明確指定它這 么做。這隱含 了reserve經常與其它啟動參數一起使用。因此,如果 指定了一個reserve區域來 保護某個特定設備,通常就必須明確指定 對該設備的探測。大多數驅動程序在給 定了明確地址后就忽略了端口注冊 表。 例如,啟動行 LILO: linux reserve=0x300,32 ether=0,0x300,eth0 使以太網卡驅動程序以外的所有設備驅動程序都不探測0x300-0x31f。 一般啟動時的參數限制是11個,因此每個reserve關鍵詞只能指定5個 保留區域。 如果請求很復雜,可以使用多個reserve指令。 10.2 把以太網驅動程序作為模塊使用 現在大多數Linux發行版里的內核都只包含很少几個內建的驅動程序。驅動 程序 都采用獨立的動態可加載模塊的形式提供。這些模塊化驅動程序通常 由管理員使 用modprobe(8)命令載入,或者在某些情況下由內核通過 “kerneld”(在2.0版 )或“kmod”(在2.1版)自動載入,然后調用 modprobe。 你所用的發行版可能會提供良好的圖形配置工具來設置以太網模塊。如果 可能就 先使用它們。下面描述了在這些花俏的配置程序下的信息,以及這 些程序改變了 哪些東西。 控制使用哪些模塊和每個模塊提供哪些選項的信息一般保存在文件 /etc/conf.modules里。在這個文件里使用的兩個感興趣的主要 選項(對以太網 卡而言)是alias和options。modprobe命 令查閱該文件以了解模塊信息。 實際的模塊本身一般保存在名為/lib/modules/`uname -r`/net 的目錄下,其 中uname -r命令給出內核的版本(如2.0.34)。你可以 在這里看看哪一個模塊與 你的網卡匹配。 在你的conf.modules文件里首先需要的是告訴modprobe對于 eth0(和eth1以 及......)網絡接口使用什么驅動程序。為此 要使用 _________________________________________________________________ alias _________________________________________________________________ 命令。例如,有一塊使用smc-ultra.o驅 動程序模塊的ISA SMC EtherEZ網卡,需 要增加如下一行把該驅動程序 alias到eth0上: alias eth0 smc-ultra 其次,可能需要一個options行來指出與某個特定模塊(或模塊別名) 一起使用 哪些選項。還采用上面那個例子,如果只有一行alias而沒 有options行,內核會 警告(參見dmesg)說自動探測ISA網卡不 好。要消除這個警告,需要增加另一行 來告訴模塊網卡被配置在哪個I/O基 址上,比方說是16進制地址0x280。 options smc-ultra io=0x280 大多數ISA模塊在insmod命令行接受io=0x340和irq=12這 樣的參數。提供這些參 數以避免探測該網卡是必須的或至少是強 烈建議的。與PCI和EISA設備不同,對 大多數ISA設備而言沒有真正安全的 自動探測方法,所以在把驅動程序作為模塊 使用時應當避免自動探測。 每個模塊所接受的所有選項列表可以在以下文件中找到: /usr/src/linux/Documentation/networking/net-modules.txt 推荐閱讀該文件以了解對你的特定網卡可以使用哪些選項。注意,對于單 個模塊 能夠處理多個設備的模塊,有些支持用逗號分開的值列表,如所有 基于8390的驅 動程序和PLIP驅動程序。例如: _________________________________________________________________ options 3c503 io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1 _________________________________________________________________ 上面就是一個模塊控制四塊3c503網卡,其中網卡2和4使用外部收發器。不 要在 “=”或逗號周圍使用空格。 還要注意,一個忙的模塊不能被刪除。這也就是說在刪除模塊前需要 使 用ifconfig eth0 down(關閉以太網卡)。 命令lsmod可以顯示哪些模塊被載入、它們是否正在被使用,而 rmmod可以刪除這 些模塊。 10.3 相關文檔 本文檔的很多信息來自comp.os.linux新聞組保存的帖子,這表明該新聞組 是一 個有價值的信息源。其它的有用信息來自Donald自己的一大堆小文件。 當然,如 果你正在設置一塊以太網卡,你還要讀一下NET-2 Howto才能真正 配置好你要用 的軟件。另外,如果你想做個黑客,你總能從驅動程序的源 碼里找到些有用的信 息。在實際代碼開始之前,總有一到兩段描述關鍵點 的文字。 對于那些尋找不是Linux特有信息(如什么是10BaseT、什么是AUI、Hub是 干什么 的等等)的人,我強烈推荐使用新聞組comp.dcom.lans.ethernet 或comp.sys.ibm.pc.hardware.networking。那些在dejanews.com 上的新聞組檔 案也是很有價值的信息源。你可以從以下URL的RTFM(保存所 有新聞組的FAQ)獲 取新聞組的FAQ: [121]Usenet FAQs 你還可以在以下URL看一下可以說是“Ethernet-HomePage”的主頁: [122]Ethernet-HomePage 10.4 聲明與版權 本文檔不是絕對真理。它可能是你所找到的最新的資料。除了你自己, 沒人會對 你的硬件出現的問題負責。如果你的以太網卡或其它的硬件冒煙 的話(几乎不可 能!),我們也不承擔任何責任。也就是說,本文作者不 對任何使用本文信息采 取行動造成的損失負責。 Copyright (c) 1993-1997 本文的版權所有人為Paul Gortmaker。在保留 版權信 息和本許可內容的條件下,本文檔允許任意復制和傳播。 在保留原始版權信息的條件下,允許復制和傳播本文檔修改后的版本﹔在 本許可 內容不變的條件下,允許傳播所有依據本文檔推導出的結果。 在上述針對修改版本的條件下,允許復制和傳播本文檔的其它語言翻譯版 本。 對翻譯者的提示。首先,翻譯SGML源文件(可以用FTP從HowTo主站點獲得), 這 樣可以生成其它的輸出格式。請注意保留一份翻譯的原始英文SGML源文 件!在發 布更新后的HowTo時,獲取該版本的新SGML源文件,簡單地使用 diff -u old.sgml new.sgml就可以知道何處有變動,并把這些變動 放入你的翻譯版本, 無需重新閱讀或重新翻譯全部內容。 如果你想在公開出版物中使用本文檔,請聯系本文作者(通過e-mail), 這樣可 以獲得最新的資料。以前有些Linux HowTo的過時版本被公開出版, 使得開發者 為一些在更新版本中已經回答過的問題飽受折磨。 10.5 結束語 如果你在本文檔中發現有錯別字或過時信息,請給我發e-mail。本文檔比 較大, 所以很容易出現疏漏。如果你曾發e-mail要求改正,而在新版本中 依然沒改過來 ,請把改正要求再發一遍,可能你的上一封e-mail被我平時 收到的大量垃圾信件 掩蓋了。 謝謝! Paul Gortmaker, p_gortmaker@yahoo.com (戈紹男,isaac_ge@yahoo.com) References 1. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#copyright 2. http://metalab.unc.edu/mdw/HOWTO/Ethernet-HOWTO.html 3. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 4. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#help 5. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#faq 6. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#what-card 7. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#card-intro 8. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#tech-intro 9. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#mystery 10. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#card-intro 11. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 12. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#faq 13. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#data-xfer 14. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#pcnet-32 15. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 16. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#vortex 17. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#eepro100 18. http://cesdis.gsfc.nasa.gov/linux/misc/100mbs.html 19. http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html 20. http://alumni.caltech.edu/~dank/fe/ 21. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#cable 22. http://www.dejanews.com/ 23. http://cesdis.gsfc.nasa.gov/linux/ 24. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lilo 25. http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html 26. http://www.roestock.demon.co.uk/isapnptools/ 27. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lilo 28. http://www.efficient.com/ 29. http://www.zeitnet.com/ 30. http://lrcwww.epfl.ch/linux-atm/ 31. http://www.geog.ubc.ca/sparc 32. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#utp 33. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#3com-tech 34. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#3com-probs 35. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 36. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 37. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 38. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 39. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#pcmcia 40. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#pcmcia 41. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 42. http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html 43. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 44. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 45. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 46. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 47. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 48. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#rtl8139 49. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#at-1500 50. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#ne1500 51. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#ether 52. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 53. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 54. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 55. http://cesdis.gsfc.nasa.gov/linux/ 56. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 57. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 58. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#ether 59. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 60. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 61. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 62. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 63. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 64. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#tlan 65. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 66. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 67. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 68. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 69. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#pcmcia 70. http://cesdis.gsfc.nasa.gov/linux/pcmcia.html 71. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 72. http://cesdis.gsfc.nasa.gov/linux/drivers/tulip.html 73. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 74. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 75. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 76. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 77. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 78. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 79. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#z-note 80. http://peipa.essex.ac.uk/html/linux-thinkpad.html 81. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#pcmcia 82. http://cesdis.gsfc.nasa.gov/linux/pcmcia.html 83. http://www.ultranet.com/~stalba/eep10pci.html 84. http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html 85. http://www.kingston.com/ 86. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#de-620 87. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#de-650 88. http://www.mylex.com/ 89. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 90. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#ne2k-probs 91. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#diag 92. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 93. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 94. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#amd-notes 95. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#lance 96. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 97. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 98. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#alfa 99. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#ne2k-pci 100. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#3c501 101. http://www.smc.com/ 102. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#8013-probs 103. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 104. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#modules 105. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 106. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 107. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#smc 108. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#dec-21040 109. http://www.slug.org.au/NIC/ 110. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#cable-intro 111. http://www.kingston.com/download/etherx/etherx.htm 112. ftp://cesdis.gsfc.nasa.gov/pub/linux/diag/index.html 113. http://www.crynwr.com/crynwr/home.html 114. http://www.redhat.com:8080/HyperNews/get/khg.html 115. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#bpf 116. ftp://cb-iris.stanford.edu/pub/pcmcia 117. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#aep-100 118. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#de-600 119. file://localhost/tmp/zh-sgmltools.5132/Ethernet-HOWTO.txt.html#aep-100 120. http://metalab.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html 121. ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/ 122. http://wwwhost.ots.utexas.edu/ethernet/ethernet-home.html