網卡設置指南

火星人 @ 2014-03-12 , reply:0


  本文的寫作目的是給新手在設置網卡時提供一些幫助。我曾在設置我的 DE220
網卡時遇到了一些問題,查詢資料時發現很多書籍對此沒有涉及;各大 BBS 及新聞
組問的很多,答的雖然大多正確,但辦法五花八門,令人一頭霧水。其實資料最全的
是在各種 HOWTO 中,可惜中文的卻很少,所以寫這篇文章,希望能節省大家的時間。

本文只包含初步的信息,如希望詳細了解這方面的內容,請參考各種 HOWTO:
BootpromptHOWTO 包含啟動時如何向內核傳遞參數信息
ConfigHOWTO 包含 LILO 及 Loadin 如何使用的信息
EthernetHOWTO 包含乙太網卡是否被系統支持(買網卡時可以參考),及如何設置
的信息,Linuxforum已推出中文版
KernelHOWTO 如何修補、編譯內核
NET2-NET3-HOWTO 包含 TCP/IP 設置的信息,最新已是NET3-4-HOWTO,中文版正在

翻譯
以上各種 HOWTO 英文版、中文版均可從中國Linux論壇
(http://www.linuxforum.net) 的「藏經閣」中獲得。
中文版也可從中文 LDP 處獲得
http://www.linux.org.tw/CLDP/

因為現在大多數實際應用的網卡都是乙太網卡,如不是特別指明,本文中網卡即
指乙太網卡。

在 Linux 中,第一塊網卡設備名為 eth0,以後依次為 eth1,eth2…… 但網卡
並不作為裸設備出現於 /dev 下,而是內核在引導時在內存中建立的。這就是說,應
該在系統引導時自動設置網卡。現在大多數發行版都是採用 module 的方式在系統引
導時設定網卡的,當然如果你清楚的知道你的網卡類型,也可以把相應的網卡驅動編
譯進內核。

Linux 的引導通常有以下幾種方式,
A. 通過硬碟以 LILO 引導。優點是啟動快而簡捷;缺點是需要寫硬碟主引導扇區,
在多系統共存時可能與 DOS/WIN 下某些防病毒軟體衝突,而且很多人希望 LILO 默
認引導到 DOS/WIN 下,這就需要掌握 LILO 的配置方法,這對新手是有一點障礙的。
B. 通過軟盤引導。雖然慢,但這是對原系統影響最小的辦法。只要在安裝時不安裝
LILO,而做一張引導軟盤就行了。這樣想啟動 Linux 時,只要插入軟盤就可以了。
C. 通過 Loadin.exe 引導。Loadin.exe 是 DOS 下的程序,可以裝入 Linux 的內
核,啟動到 Linux 下。這樣可以從 WIN9X 的純 DOS 環境下直接啟動 Linux 。當
然,需要學會如何配置,--很簡單的哦。


不管採用哪種方式引導,載入網卡的方式有兩種:
1. 把網卡驅動編譯進內核,引導時就載入。
2. 採用 modules 自動載入。

採用方式1,則不可能支持所有的網卡,哪樣內核會變成個龐然大物。因此很多
發行版為了靈活支持多種網卡,採用 modules 的方式。然而對於每一台特定的電腦,
通常只需要支持有限的一種或幾種網卡,因此可以採用方式1,不過需重新編譯內核。
編譯內核的方法詳見 KernelHOWTO,編譯時需要注意的是以下幾項:
Networking support (CONFIG_NET) [Y/n/?] Y
TCP/IP networking (CONFIG_INET) [Y/n/?] Y
Network device support (CONFIG_NETDEVICES) [Y/n/?] Y
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?] Y
PCI Ethernet adapters (CONFIG_NET_PCI) [N/y/?] Y /* 如果是PCI網卡的話*/
方式2為大多數發行版所採用,而且可以在安裝時設置網卡,選用相應的網卡即
可。值得指出的是,安裝時很多網卡沒有列出,但並不代表 Linux 本身不支持,詳
見 EthernetHOWTO。這時您可以查閱網卡及手冊,會發現其使用何種晶元,可以用安
裝時網卡列表中同種晶元的網卡試試。通常,網卡手冊中會說明該網卡兼容或類似某
種通用網卡。很多10M網卡兼容 NE2000,比如我的 D-LINK DE220,這時可以選
NE2000 試試。
然而,很多 PNP 的網卡並不能被檢測到,例子還是我的 DE220。據說在 Linux
環境下可以通過 isapnp 設置,我沒試過,詳情請 man isapnp 吧。為免麻煩,我使
用了另一種方法:在 DOS 下使用 DE220 的驅動程序(可以在其網站下載到),屏蔽掉
PNP 功能,並設定「IO=0240h-025fh」,「IRQ=11」。然後再進行安裝。
糟糕的是,有部分網卡並非完全兼容 NE2000,例子又是我的 DE220,這類網卡
在 EthernetHOWTO 中被稱為 bad NE2000 clone,他們採用了非標準的標識方法以
致 Linux 的 NE2000 驅動不能自動檢測到它。我的 RedHat 6.1 就是這樣,導致安
裝后找不到網卡,必需手動進行配置了。
解決這個問題需要向內核傳遞 IRQ 號及 IO 埠,這兩項的具體數據可以從
WIN9X 的設備管理中查到,最笨卻最穩妥的是如前哪樣用網卡 DOS 下的驅動程序設
定好,記下來。Linux 下輸入的數據格式類似 C 語言,IO採用十六進位,即 0xNNN,
其中 NNN 是 IO 中 0XXXh-0XXXh 的前一個數的「XXX」部分。IRQ 可直接用十進位。
針對我的 DE220,就是「0x240」和「11」了。配置方法如下:

如果採用方式1,必須直接將 IRQ 號及 IO 埠傳遞給內核——在系統啟動出現
Boot: 的時候,輸入「linux ether=IRQ,IO,eth0」。具體針對我的 DE220 就是這樣:

Boot: linux ether=11,0x240,eth0

通常傳遞了 IO 地址系統就可以檢測到網卡了,因此也可以輸入:

Boot: linux ether=0,0x240,eth0

IRQ 或 IO 處可以輸零(如上),是告訴內核自動檢測該項。如果這樣可以了,可以
通過 LILO 每次啟動時自動把以上參數傳遞給內核,具體方法是:

編輯 /etc/lilo.conf,加入:
append="ether=0,0x240,eth0"
然後:
# lilo /* 重新載入 lilo */

append 是告訴 LILO 把引號中的字元串傳遞給內核。使用 Loadlin.exe 的道理與此
類同,不過我沒試過,請查閱 Loadlin 的手冊(一般隨程序提供)。

如果採用方式2,就需要手工加上相應的 modules :
a.) 查看目錄「/lib/modules/內核版本號/net/」,其中內核版本號部分可能每台機器
都不同,看你自己的決定吧。該目錄下文件格式如 *.o ,分別代表不同網卡的
modules ,記下你自己網卡相應的文件名,如 DE220 兼容 NE2000 ,就是 NE2000
的 ne.o 了。
b.) 編輯文件 /etc/conf.modules ,如沒有就建一個。加入以下兩行:
alias eth0 「網卡相應 module 的文件名」
options 網卡類型 io=0xNNN
針對我的 DE220 ,這兩行就應該是這樣:
alias eth0 ne.o
options ne io=0x240
c.) 重啟動后,我的 DE220 就可以找到了。

啟動后,查看 /proc 下的 ioports 和 interrupts 文件,如果網卡設置成功,
應該有相應描述,如我的 DE220 使用 NE2000 的驅動,可以看到:
# cat ioports
...
0240-025f: NE2000
...
# cat interrupts
...
11: ... XT-PIC NE2000
...
然後就可以開始設置 TCP/IP 的參數了(本文不涉及)。值得指出的是,採用
ping 127.0.0.1 的方式只能測試內核是否支持網路及 lo 設備,並不能測試到 eth0
是否工作,應該 ping 通實際的 IP 地址,才算 TCP/IP 配置成功。

因為要配置路由器,我在另一台機器上實驗了雙網卡。採用了 Topstar TE2000
系列,ISA 介面,使用8019晶元,兼容 NE2000。有的書上告戒不要使用兩塊相同的
NE2000 兼容網卡,我不知道原因,而我配置過程中也沒發現問題。
首先下載該網卡 DOS 下驅動/設置程序,用 DOS6.22 啟動,運行設置程序並設定
IRQ,IO 地址。關鍵是兩塊網卡不能設成一樣的以免衝突,同時注意不能同其它的設備
衝突。有在 DOS 下配置硬體經驗的朋友當然輕車熟路了 8-)。用紙記錄下來。編譯內
核使之支持 NE2000 系列后,用新內核重啟(RedHat 6.1),報告發現 eth0,沒有提到
eth1(第二網卡)。
接下來編輯 /etc/lilo.conf,加入:
append="ether=9,0x320,eth1" /* 我第二網卡設置為 IRQ=9,IO=0X320 */
然後:
# lilo /* 重新載入 lilo */
重啟動,發現 eth0,eth1,成功!

我在為一台機器配 D-LINK DFE530TX (10/100M)的網卡時,在其網站下找到了技
術支持文檔,說的很詳細(http://tsc.dlinktw.com.tw/nic/dfe530/RedHat6.pdf)。
配置該網卡的朋友可以參考。
由此也可以總結出在 linux 下配置網卡的終極大法:
A. 從買網卡開始,就應選擇 Linux 支持比較好的品牌,可以參考 EthernetHOWTO,
如果最新的 EthernetHOWTO 中對該品牌甚至晶元都是 unsupported,建議還是換
一塊吧。
B. 不要急於發問,先查查廠商的網站,廠商自己的解決方案可能是最好的,起碼可
以參考。
C. 建議屏蔽掉網卡的 pnp,客觀的說,雖然人們對 M$ 有 Plug And Pray 的嘲弄,
Linux 對 PNP 的支持還不如 M$。屏蔽掉網卡的 pnp,能省掉好多麻煩,起碼在
不成功時縮小了排錯的範圍。
D. 如果系統還不能找到網卡,可能需要去相應的 Linux 驅動下載點下載最新的驅動
程序。然後按其說明安裝。不過絕大多數比較新的發行版都帶了很多,而且工作
的相當好,比如 NE2000 兼容系列,完全可以使用 NE2000 的 ne.o。
E. 重新編譯內核,詳情請參考 KernelHOWTO,注意相關的網路選項一定要選定支持。
而對應的網卡一定要選 y(編譯進內核) 或 m(採用 module)。如果選 m,還需要
編譯 module。
F. 試驗新內核或 module。如果還不能找到網卡,就參照上文所說的方法向內核或
module 傳遞 IRQ 和 IO 等參數。
G. a.) 成功了!配置 LILO 或 /etc/conf.modules,使每次引導都可以自動載入網
卡。
恭喜!你的水平也上了一個台階。
b.) 還不行!你有三個選擇:
1.) 去各大 BBS,新聞組,求求各位大俠賜教,不過恐怕近期內不會有什麼
新招了。
2.) 痛罵網卡的製造商,然後做個順民,回去繼續受 M$ 的壓榨。
3.) 苦練編程本領,自己寫個驅動出來!為自由天地做個貢獻





[火星人 via ] 網卡設置指南已經有233次圍觀

http://www.coctec.com/docs/service/show-post-73885.html