索引關鍵詞:[Linux,網卡,D-LINK DE-220/NE2000,D-LINK DFE530TX,雙網卡] 最新修改日期:Oct. 9th, 2000 發布日期:19991119 版權協議:GPL 作者說明: 本文現由我本人維護(mailto:
[email protected]),但我的知識、精力、時間都 不足,因此希望與有興趣的朋友討論並歡迎合作修改、整理。 其實本文大多數信息可以在 EthernetHOWTO 中找到,初寫這篇文章時Ethernet HOWTO 中文版還沒有正式發布,現在您可以在中國 Linux 論壇的“藏經閣”中找到 EthernetHOWTO 中文版 8-)。 本文的寫作目的是給新手在設置網卡時提供一些幫助。我曾在設置我的 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.) 苦練編程本領,自己寫個驅動出來!為自由天地做個貢獻!