在第n次看到"如何在Linux下配置我的XXX網卡"這樣的問題之後我覺得有必要把一些最基本的Linux網卡安裝的知識總結一下,省省大家的時間.以後有空再寫聲卡的和顯卡的.
本文主要面對新新手,不對任何高難度問題進行討論,包括雙網卡,正常編譯了driver也不能用的古怪網卡等.本文的主要目的是告訴新新手,Linux下網卡是怎樣被驅動的.本文不討論安裝Linux的問題,假設用戶已經成功安裝了Linux,就等驅動網卡.
第一步--不要再問"Linux下能夠裝XXX卡麼?"這樣的問題,Linux是個開放的系統,借助於網絡上無數的高手,幾乎所有的硬件都能找到支持.
首先需要指出,Linux下對網卡的支持往往是只對芯片的,所以對某些不是很著名的網卡,往往需要知道它的芯片型號以配置Linux.比如我的Accton 網卡,就不存在Linux的driver,但是因為它是NE2000兼容,所以把它當NE2000就可以在Linux下用了.所以當你有一塊網卡不能用,在找Linux的driver之前一定搞清楚這個網卡用的什麼芯片,跟誰兼容,比如3c509,ne2000,etherexpress等等.這樣的型號一般都在網卡上最大的一快芯片上印著,抄下來就是了.
最普遍使用也許是最好配的網卡也許就是Ne2000兼容卡了,我用它來作例子.注意實際上很多廉價卡都是NE2000兼容的.
對於NE2000卡,先要作的一件事情,是將網卡設定為Jumpless模式.很多現在的網卡缺省都是PnP模式,這在95下的確能減少很多麻煩,但是Linux不支持,所以Linux下必須是Jumpless模式.一般所有網卡都有帶的驅動盤和DOS下可執行的一個設定程序,用該程序將網卡設為Jumpless.當然如果是老卡,本來就不是PnP,不用管這個.注意,這裡主要是ISA的NE2000,關於PCI的NE2000,需要另外設置.
下來就是得弄清楚網卡的IO地址和IRQ.這是兩個非常重要的網卡驅動參數.這個最簡單就是還用那個網卡的設定程序,設定完Jumpless之後肯定有地方可以軟設定IO和IRQ.老一些的卡得跳線,道理一樣.另外一個方法是如果網卡能在95或NT下工作,去95下的control panel裡看這個卡的properities,查IO和IRQ.
OK,到現在,你知道了你的卡是NE2000兼容,知道了它是在Jumpless
模式下,知道了IO地址和IRQ,就可以安裝了.
Linux系統與95這些系統不同的一點是它是運行在"內核"上的,所謂內核,就是把系統最核心的部分孤立出來編程,將各種驅動程序,內存控制等部分編在一起.於95不同,Linux得內核是公開的,經常更新的,這樣不需要更新整個系統,用戶只需要把最新的內核原程序download下來編譯,就可以得到一個支持更多硬件,更多文件系統,更安全的系統了.所以需要指出,Linux的Driver很少有象95下那樣是"安裝"的.Linux下的driver大多數都是以C程序形式發布,或者在內核裡,或者需要用戶自己修改內核代碼.總之要讓Driver運行,得重新配置編譯內核.如何操作Linux內核是學習Linux中非常重要的一節.Linux的新手最好在這裡多下點功夫搞清楚.有關核心的問題建議看Linux How To文檔中的kernel How to.
Anyway, Linux已經裝好了,那麼用的是什麼內核呢?一般缺省的Linux內核是從安裝盤上來的.那個內核一般包括大多數硬件的驅動程序,比如Ne2000卡.所以未一定要重新編譯內核,也許現有的內核就可以驅動.所以下一步就是把網卡插入計算機,看看Linux能否發現它.這可以從Linux的啟動畫面中看出來,如果你發現如下的一行:
eth0:NE2000 card found at 0x300 using IRQ 05
那就說明Linux發現了NE2000卡,在IO 300, IRQ 05的地方.
如果Linux沒有發現你的網卡,但是你確認你網卡得型號和參數,比如我的網卡是NE2000兼容,IO 0x300, IRQ 05.那麼可以修改Linux啟動文件專門搜索這個設備.這個文件在/etc/rc.d/rc.modules裡對於NE2000,是這樣的:
#/sbin/modprobe ne io=0x300 # NE2000 at 0x300
將最前面的#號去掉,再啟動機器試試.
另外該文件裡還可以發現對其它系列網卡比如3C系列的autoprobe.
OK,到現在啟動屏幕上也沒有出現eth0:NE2000 card found at 0x300 using IRQ 05 這樣的好消息,那麼你就得編譯內核了.
編譯內核之前一定要搞清楚的是網卡的芯片號.比如我有一塊SMC的網卡,但是我是無法在Linux的內核配置菜單裡找到SMC這樣的字樣的,Linux不是win95,有那麼長一串廠商牌號等.我在這個SMC的卡上找到了digital 21140-AE的字眼,於是我知道這個卡用的是DEC 21140-AE芯片,於是按照這個尋找,就找到了驅動.
知道了芯片類型,或者兼容類型(比如ne2000)就可以開始編譯內核了.具體的針對不同系統的內核編譯推薦先看看有關內核編譯的文章,這裡不多作介紹.
進入/usr/src/linux運行make menuconfig進入菜單配置內核.找到Network Device Support.選則EtherNet,再選則相應的芯片號.如果是ISA系線的NE2000,就選則other ISA cards,選則NE2000/NE1000 ISA support.如果是PCI的網卡,就選則PCI ethernet adapters.注意,PCI卡未必都能這樣驅動,很多都不行,得另外找driver.比如Intel PCI EtherExpress Pro 100等.
有關其它選項希望能多自己摸索.多看看help和how-to.
配置完內核後,運行make dep;make;make zlilo就可以了.如果內核選項過多會出現過大的情況而無法安裝.那麼需要把一些不必要的驅動去掉.
一般這樣之後再啟動就可以發現網卡了.驅動了網卡,下一步就是設定TCP/IP這些東西.這就不是這裡的內容了.
我的經驗,Linux下NE2000兼容卡都比較好設.3c系列的卡也都有支持.至於其它卡比如我的DEC 21140就麻煩很多.另外有些卡即使用某種芯片也未必就能用這個芯片的驅動,這種情況就是有驅動程序也不能用,就需要上網查了.
有關Intel Etherexpress系列卡的配置.Linux內核中有Etherexpress 16的支持,但沒有其它卡的driver.在http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html裡有關於EtherExpress 100B pro的討論.在那裡可以download到一個c源碼的驅動程序,編譯進內核就可以了.那麼,如果以上都試過了,而你的網卡的確還是不能認,那麼你需要上網查driver了.在網上查東西是一門看起來簡單實際上極體現經驗的學問.建議尋找Linux網卡的driver從http://cesdis.gsfc.nasa.gov/linux/drivers/開始.在那裡可以發現的針對網卡得驅動有:
DEC DC21*4* Tulip chip based cards
3Com PCI Etherlink PCI and EISA cards
Intel EtherExpress Pro100B, Pro100+ and Pro10+ PCI
3c515 ISA Fast Etherlink card
SMC EtherPower II (EPIC/100 83c170 chip) driver.
RealTek RTL8129/8139 driver.
Lite-On lc82c168 PNIC driver (now merged with the Tulip driver).
Macronix MX98713 and ASIX experimental drivers are now merged with the Tulip driver).
VIA Rhine (VT86C100A and 3043) driver (now released).
Winbond w89c840 driver (beta test). Note: this driver was written without official documentation.
TI ThunderLAN driver (external link -- Caldera/James Banks).
Hewlett Packard 100VG driver updates (external link -- Yaroslav).
Intel EtherExpress Pro/10 PCI driver (remote link).
3c509/3c529/3c579 ISA/MCA/EISA EtherLink III driver update. The driver now detects multiple cards when loaded as a module.
AMD LANCE/PCnet driver update. The driver is now usable as a loadable module.
Cirrus/Crystal/IBM CS8900 series driver (remote link).
PCI NE2000 driver (local page)
PCI NE2000 updates (remote link)
Intel Etherexpress Pro 100,
DEC 21X4* based board,
3Com EtherLink III PCI/EISA (3c590 3c592,3c595,3c597,3c900 3c905)
Intel EtherExpress Pro/10 PCI9 With i82596 Chip)
TI ThunderLan
PCI NE2000
Packet Engines "Yellowfin" G-NIC
SMC EtherPower II (EPIC/100 83c170 chip)
RealTek RTL8129/8139
同時還有一個Ecom EtherLink III family 的setup程序,沒有用過,也許不錯.
如果這裡你還是沒有找到相應的網卡驅動,那麼就去search了.
我推薦的方法是上Internet Newsgroup查.因為你絕對不是第一個在Linux下用這個網卡的人,你的問題絕對有人在網絡上問過.而且有人回答過.那麼問題就是如何找到他. 最簡單的方法是打開netscape 到www.dejanews.com去.這裡的關鍵是關鍵字的選則,比如我有個卡的芯片是DEC的21140,那麼我考慮到21140已經是個長數字,於是輸入21140 linux來搜索,這裡Linux是必須的,否則看到上千篇關於21140 win95的驅動問題,是不是很煩?結果21140 linux很快就找到了有關文章.
如果這樣也找不到驅動程序,或者有了驅動程序不知道怎麼用,用了出問題,再來版上問.記得把具體的網卡型號,芯片型號,你作過什麼努力,什麼問題等都寫清楚,以便於他人幫助.
Remember: God helps those who help themselves
——摘自:水木清華