class="21088">
1;Alpha驅動程序——獲取與使用;
2;一台機器使用多個以太網卡;
3;這個以太東東不干活。為什麼?;
4;NE1000;/;NE2000網卡(及其系列)的問題;
5;SMC;Ultra/EtherEZ和WD80*3網卡的問題;
6;3Com網卡的問題;
7;非特定網卡的FAQs;
這裡是一些有關使用Linux進行以太網連接的常見問題。某些特定問題按照制造商進行分類。可能你想問的問題別人已經問過(而且被回答了!),所以即使沒有在這裡找到你的答案,還可能在諸如Dejanews之類的新聞檔案中找到你所要的。;
1;Alpha驅動程序——獲取與使用;
我聽說我的網卡有一個更新的或初步的/alpha驅動程序。從哪兒得到它呢?;
最新的“新”驅動程序可以在Donald的FTP站點:cesdis.gsfc.nasa.gov裡面的/pub/linux/下找到。因為事情變化很頻繁,可能需要四處找一找。或者使用WWW浏覽器去:;
Don的Linux主頁;
查找你想要的驅動程序更簡單一些。(留神WWW浏覽器會悄悄地把源碼中的TABs替換為空格,等等;-;如果無法確定的話,使用FTP下載,至少也得用WWW浏覽器的FTP;URL。);
如果驅動程序確實是alpha版本,或pre-alpha版本,那麼請恰當地對待它。換句話說,不要抱怨,因為你無法弄清用它能做些什麼。同樣,如果它使你的機器宕機了,不要抱怨。相反,你應該發給我們一份材料組織很好的Bug報告,如果是一個布丁,那就更好!;
注意,某些“可用”的實驗性/alpha驅動程序已經包含在標准的內核源碼樹中。在運行make;config時你首先要回答的一個問題就是“Prompt;for;development;and/or;incomplete;code/drivers”。在此你要回答“Y”以包括任何alpha/實驗性驅動程序。;
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。請參看傳遞以太網參數......以了解全部的句法、網卡特定參數和LILO使用技巧。;
這些啟動參數可以固定,這樣就不用每次都必須重新敲一遍。參看LILO手冊中有關LILO;的配置選項“append”。;
第二種方法(不建議使用)是編輯文件Space.c並用零替換I/O地址中的0xffe0入口。0xffe0入口是用來告訴內核不要檢測該設備;--;把它替換為零就啟動了對該設備的自動檢測。;
注意,如果想用Linux作為兩個網絡間的路由,你需要啟動IP轉發並重新編譯內核。一般在一台老式的AT/286上運行“kbridge”一類的軟件就相當不錯了。;
如果你是一邊在網絡沖浪,一邊看本文檔,最好去閱讀Donald的WWW站點上的mini-howto。看一下多塊以太網卡.;
3;這個以太東東不干活。為什麼?;
如上所述,命令ether=只對編譯進了內核的驅動程序起作用。現在大多數的發行版本都用模塊的方式使用驅動程序,所以很少再使用ether=命令了。(某些早期文檔需要更新以反映這一變化。)如果你想使用模塊化的以太網驅動程序的選項,必須修改/etc/conf.modules文件。;
如果你是使用編譯的驅動程序,而且已經把ether=加進了LILO;配置文件,需要重新運行lilo使更新後的配置文件生效。;
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),使你的網卡可用。;
問題:沒檢測到ISA的即插即用NE2000網卡(如RealTek;8019)。;
原因:初始的NE2000特性不支持即插即用,因此Linux的NE2000驅動程序也不支持即插即用。;
解決方案:使用網卡所附的DOS配置盤取消PnP,並為該網卡設置一個指定的I/O地址和IRQ。在/etc/conf.modules裡增加這樣的一行options;ne;io=0xNNN,這裡0xNNN是你為網卡設置的16進制I/O地址。(假設你使用的是模塊化驅動程序;否則,在啟動時使用