本文主要面對新新手,不對任何高難度問題進行討論,包括雙網卡,正常編譯了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模式.一般所有程序將網卡設為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).