本文主要面對(duì)新新手,不對(duì)任何高難度問(wèn)題進(jìn)行討論,包括雙網(wǎng)卡,正常編譯了driver也不能用的古怪網(wǎng)卡等.本文的主要目的是告訴新新手,Linux下網(wǎng)卡是怎樣被驅(qū)動(dòng)的.本文不討論安裝Linux的問(wèn)題,假設(shè)用戶已經(jīng)成功安Linux,就等驅(qū)動(dòng)網(wǎng)卡.
第一步--不要再問(wèn) Linux下能夠裝XXX卡么? 這樣的問(wèn)題,Linux是個(gè)開(kāi)放的系統(tǒng),借助于網(wǎng)絡(luò)上無(wú)數(shù)的高手,幾乎所有的硬件都能找到支持.
首先需要指出,Linux下對(duì)網(wǎng)卡的支持往往是只對(duì)芯片的,所以對(duì)某些不是很著名的網(wǎng)卡,往往需要知道它的芯片型號(hào)以配置Linux.比如我的Accton 網(wǎng)卡,就不存在Linux的driver,但是因?yàn)樗荖E2000兼容,所以把它當(dāng)NE2000就可以在Linux下用了.所以當(dāng)你有一塊網(wǎng)卡不能用,在找Linux的driver之前一定搞清楚這個(gè)網(wǎng)卡用的什么芯片,跟誰(shuí)兼容,比如3c509,ne2000,etherexpress等等.這樣的型號(hào)一般都在網(wǎng)卡上最大的一快芯片上印著,抄下來(lái)就是了.
最普遍使用也許是最好配的網(wǎng)卡也許就是Ne2000兼容卡了,我用它來(lái)作例子.注意實(shí)際上很多廉價(jià)卡都是NE2000兼容的.
對(duì)于NE2000卡,先要作的一件事情,是將網(wǎng)卡設(shè)定為Jumpless模式.很多現(xiàn)在的網(wǎng)卡缺省都是PnP模式,這在95下的確能減少很多麻煩,但是Linux不支持,所以Linux下必須是Jumpless模式.一般所有程序?qū)⒕W(wǎng)卡設(shè)為Jumpless.當(dāng)然如果是老卡,本來(lái)就不是PnP,不用管這個(gè).注意,這里主要是ISA的NE2000,關(guān)于PCI的NE2000,需要另外設(shè)置.
下來(lái)就是得弄清楚網(wǎng)卡的IO地址和IRQ.這是兩個(gè)非常重要的網(wǎng)卡驅(qū)動(dòng)參數(shù).這個(gè)最簡(jiǎn)單就是還用那個(gè)網(wǎng)卡的設(shè)定程序,設(shè)定完Jumpless之后肯定有地方可以軟設(shè)定IO和IRQ.老一些的卡得跳線,道理一樣.另外一個(gè)方法是如果網(wǎng)卡能在95或NT下工作,去95下的control panel里看這個(gè)卡的properities,查IO和IRQ.
OK,到現(xiàn)在,你知道了你的卡是NE2000兼容,知道了它是在Jumpless模式下,知道了IO地址和IRQ,就可以安裝了.
Linux系統(tǒng)與95這些系統(tǒng)不同的一點(diǎn)是它是運(yùn)行在 內(nèi)核 上的,所謂內(nèi)核,就是把系統(tǒng)最核心的部分孤立出來(lái)編程,將各種驅(qū)動(dòng)程序,內(nèi)存控制等部分編在一起.于95不同,Linux得內(nèi)核是公開(kāi)的,經(jīng)常更新的,這樣不需要更新整個(gè)系統(tǒng),用戶只需要把最新的內(nèi)核原程序download下來(lái)編譯,就可以得到一個(gè)支持更多硬件,更多文件系統(tǒng),更安全的系統(tǒng)了.所以需要指出,Linux的Driver很少有象95下那樣是 安裝 的.Linux下的driver大多數(shù)都是以C程序形式發(fā)布,或者在內(nèi)核里,或者需要用戶自己修改內(nèi)核代碼.總之要讓Driver運(yùn)行,得重新配置編譯內(nèi)核.如何操作Linux內(nèi)核是學(xué)習(xí)Linux中非常重要的一節(jié).Linux的新手最好在這里多下點(diǎn)功夫搞清楚.有關(guān)核心的問(wèn)題建議看Linux How To文檔中的kernel How to.
Anyway, Linux已經(jīng)裝好了,那么用的是什么內(nèi)核呢?一般缺省的Linux內(nèi)核是從安裝盤上來(lái)的.那個(gè)內(nèi)核一般包括大多數(shù)硬件的驅(qū)動(dòng)程序,比如Ne2000卡.所以未一定要重新編譯內(nèi)核,也許現(xiàn)有的內(nèi)核就可以驅(qū)動(dòng).所以下一步就是把網(wǎng)卡插入計(jì)算機(jī),看看Linux能否發(fā)現(xiàn)它.這可以從Linux的啟動(dòng)畫(huà)面中看出來(lái),如果你發(fā)現(xiàn)如下的一行:
eth0:NE2000 card found at 0x300 using IRQ 05
那就說(shuō)明Linux發(fā)現(xiàn)了NE2000卡,在IO 300, IRQ 05的地方.
如果Linux沒(méi)有發(fā)現(xiàn)你的網(wǎng)卡,但是你確認(rèn)你網(wǎng)卡得型號(hào)和參數(shù),比如我的網(wǎng)卡是NE2000兼容,IO 0x300, IRQ 05.那么可以修改Linux啟動(dòng)文件專門搜索這個(gè)設(shè)備.這個(gè)文件在/etc/rc.d/rc.modules里對(duì)于NE2000,是這樣的:
#/sbin/modprobe ne io=0x300 # NE2000 at 0x300
將最前面的#號(hào)去掉,再啟動(dòng)機(jī)器試試.
另外該文件里還可以發(fā)現(xiàn)對(duì)其它系列網(wǎng)卡比如3C系列的autoprobe.
OK,到現(xiàn)在啟動(dòng)屏幕上也沒(méi)有出現(xiàn)
eth0:NE2000 card found at 0x300 using IRQ 05
這樣的好消息,那么你就得編譯內(nèi)核了.
編譯內(nèi)核之前一定要搞清楚的是網(wǎng)卡的芯片號(hào).比如我有一塊SMC的網(wǎng)卡,但是我是無(wú)法在Linux的內(nèi)核配置菜單里找到SMC這樣的字樣的,Linux不是win95,有那么長(zhǎng)一串廠商牌號(hào)等.我在這個(gè)SMC的卡上找到了digital 21140-AE的字眼,于是我知道這個(gè)卡用的是DEC 21140-AE芯片,于是按照這個(gè)尋找,就找到了驅(qū)動(dòng).
知道了芯片類型,或者兼容類型(比如ne2000)就可以開(kāi)始編譯內(nèi)核了.具體的針對(duì)不同系統(tǒng)的內(nèi)核編譯推薦先看看有關(guān)內(nèi)核編譯的文章,這里不多作介紹.
進(jìn)入/usr/src/linux
運(yùn)行make menuconfig進(jìn)入菜單配置內(nèi)核.找到Network Device Support.選則EtherNet,再選則相應(yīng)的芯片號(hào).如果是ISA系線的NE2000,就選則other ISA cards,選則NE2000/NE1000 ISA support.如果是PCI的網(wǎng)卡,就選則PCI ethernet adapters.注意,PCI卡未必都能這樣驅(qū)動(dòng),很多都不行,得另外找driver.比如Intel PCI EtherExpress Pro 100等.
有關(guān)其它選項(xiàng)希望能多自己摸索.多看看help和how-to.
配置完內(nèi)核后,運(yùn)行make dep;make;make zlilo就可以了.如果內(nèi)核選項(xiàng)過(guò)多會(huì)出現(xiàn)過(guò)大的情況而無(wú)法安裝.那么需要把一些不必要的驅(qū)動(dòng)去掉.
一般這樣之后再啟動(dòng)就可以發(fā)現(xiàn)網(wǎng)卡了.驅(qū)動(dòng)了網(wǎng)卡,下一步就是設(shè)定TCP/IP這些東西.這就不是這里的內(nèi)容了.
我的經(jīng)驗(yàn),Linux下NE2000兼容卡都比較好設(shè).3c系列的卡也都有支持.至于其它卡比如我的DEC 21140就麻煩很多.
另外有些卡即使用某種芯片也未必就能用這個(gè)芯片的驅(qū)動(dòng),這種情況就是有驅(qū)動(dòng)程序也不能用,就需要上網(wǎng)查了.
有關(guān)Intel Etherexpress系列卡的配置.Linux內(nèi)核中有Etherexpress 16的支持,但沒(méi)有其它卡的driver.在http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html里有關(guān)于EtherExpress 100B pro的討論.在那里可以download到一個(gè)c源碼的驅(qū)動(dòng)程序,編譯進(jìn)內(nèi)核就可以了.
那么,如果以上都試過(guò)了,而你的網(wǎng)卡的確還是不能認(rèn),那么你需要上網(wǎng)查driver了.在網(wǎng)上查東西是一門看起來(lái)簡(jiǎn)單實(shí)際上極體現(xiàn)經(jīng)驗(yàn)的學(xué)問(wèn).建議尋找Linux網(wǎng)卡的driver從http://cesdis.gsfc.nasa.gov/linux/drivers/開(kāi)始.在那里可以發(fā)現(xiàn)的針對(duì)網(wǎng)卡得驅(qū)動(dòng)有:
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
同時(shí)還有一個(gè)Ecom EtherLink III family 的setup程序,沒(méi)有用過(guò),也許不錯(cuò).
如果這里你還是沒(méi)有找到相應(yīng)的網(wǎng)卡驅(qū)動(dòng),那么就去search了.我推薦的方法是上Internet Newsgroup查.因?yàn)槟憬^對(duì)不是第一個(gè)在Linux下用這個(gè)網(wǎng)卡的人,你的問(wèn)題絕對(duì)有人在網(wǎng)絡(luò)上問(wèn)過(guò).而且有人回答過(guò).那么問(wèn)題就是如何找到他. 最簡(jiǎn)單的方法是打開(kāi)netscape 到www.dejanews.com去.這里的關(guān)鍵是關(guān)鍵字的選則,比如我有個(gè)卡的芯片是DEC的21140,那么我考慮到21140已經(jīng)是個(gè)長(zhǎng)數(shù)字,于是輸入21140 linux來(lái)搜索,這里L(fēng)inux是必須的,否則看到上千篇關(guān)于21140 win95的驅(qū)動(dòng)問(wèn)題,是不是很煩?結(jié)果21140 linux很快就找到了有關(guān)文章.
如果這樣也找不到驅(qū)動(dòng)程序,或者有了驅(qū)動(dòng)程序不知道怎么用,用了出問(wèn)題,再來(lái)版上問(wèn).記得把具體的網(wǎng)卡型號(hào),芯片型號(hào),你作過(guò)什么努力,什么問(wèn)題等都寫(xiě)清楚,以便于他人幫助.