Linux對網卡的支持需要通過內核,早期,許多人使用編譯時直接加入網卡支持的辦法 ,不過隨著網卡種類的增加,已經很少有人使用這種吃力不討好的辦法了。現在,大部 分人都采用加入網卡模塊的方法來驅動網卡。 為了加入網卡,首先必須知道網卡的類型,Linux對那些破破爛爛的“NE 2000兼容” 的網卡的支持倒確實是不錯的,但是對於百兆的網卡就不太好說了,反正你總可以通過 實驗選出合適的產品。 首先得一條是了解網卡的芯片型號,由於硬件廠商通常不會提供網卡的Linux驅動程序 ,你必須自己為網卡選擇正確的驅動程序。許多人喜歡說“啊,就是D-Link的”,這種 說法大概是在Linux中你能聽到的最令人憤怒的說法了,跟那個著名的“在空中”的回答 差不多,絕對正確而絕對毫無意義。 你可以首先看看你的網卡屬於哪一個類型,如果是3COM 3C系列的“骨灰級”產品,你 根本不需要進一步了解型號,Linux中肯定會有對應的驅動程序。到/lib/modules/x.x. xx/net 下(x.x.xx是裡Linux內核的版本號)看一看,確定一下到底應該使用那一個驅動 程序。例如,3C509的驅動程序就是3c509.o 如果是ne2000 兼容型,那麼一般來說只要使用ne2000的驅動程序就可以了,這個驅動 程序的名字是ne.o,另外還有許多10兆的PCI網卡屬於"NE2000-PCI"兼容類型,對應的驅 動程序名字是ne2k-pci.o。 如果都不是,那麼你就需要猜測一種合適的網卡型號了,網卡的主控芯片(通常是最 大的一塊)上面會標出芯片的型號,然後到/lib/modules/2.2.14/net(我使用2.2.14的 內核,你的內核版本可能會不一樣)下看一看,找到合適的驅動程序名字。 下一步是對網卡進行測試,例如,我的網卡驅動程序是rtl8139.o,是一塊PCI的100M 網卡,因此執行 /sbin/modprobe rtl8139 路徑名/lib/modules/2.2.14/net和擴展名.o可以省略。 在我們這個情況下,這個命令直接返回,不產生任何輸出,表示這個模塊已經正確地 裝入內核存儲區。如果你想確定一下,你可以用dmesg命令看一下內核輸出,會有這樣的 內容: rtl8139.c:v1.07 5/6/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/dri vers/r tl8139.Html eth0: RealTek RTL8139 Fast Ethernet at 0xd800, IRQ 19, 00:50:ba:d0:8d:ec. 這表示網卡已經被激活了。 有些ISA網卡(特別是ne2000兼容網卡)需要顯式給出一些配置參數,例如,要激活n e2000兼容網卡,需要給出I/O地址,可以使用這樣的形式: /sbin/modprobe ne io=0x300 這裡假定ne2000兼容網卡位於I/O地址0x300處。IRQ不需要指定,Linux會給出正確的 值。 對於特定的網卡,具體的參數格式可以參考驅動程序的源代碼。 假如網卡驅動程序不對或者參數有問題,就會顯示出錯信息: [openlab]# /sbin/modprobe 3c509 /lib/modules/2.2.14/net/3c509.o: init_module: Device or resource busy 在某些系統中,使用/etc/conf.modules文件來設置網卡的缺省參數,例如: $cat conf.modules alias eth0 ne options ne io=0x300 options 命令為模塊提供缺省參數。以後只要執行/sbin/modprobe ne或者/sbin/mod probe eth0就可以自動使用參數了。 假設你通過上面的過程已經確定了網卡驅動程序,測試也正確,那麼你就應該把它放 到系統啟動腳本中去。前面我們已經提到過,對於RedHat或者Slackware,用戶自選的模 塊文件通常可以放在/etc/rc.d/rc.modules中,內容就是簡單的寫上上面用來加載模塊 的命令,例如,我的系統中有兩片網卡,分別使用rtl8139和ne2000驅動程序,ne2000兼 容網卡的I/O地址是0x300,那麼,rc.modules的內容就是 [openlab]# cat /etc/rc.d/rc.modules /sbin/modprobe rtl8139 /sbin/modprobe ne io=0x300 不要忘了設置這個腳本的可執行屬性。當系統重新啟動時,它會自動執行這個腳本, 你可以在系統啟動之後用dmesg看看執行是否正確。如果你的Linux啟動腳本並不使用rc .modules,你總可以把它放到rc.sysinit或者rcS裡面去。