發信站: BBS 水木清華站 yuhj
在第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 dri
er).
VIA Rhine (VT86C100A and 3043) driver (now released).
Winbond w89c840 driver (beta test). Note: this driver was written without offici
l 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 detec
s 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
很快就找到了有關文章.