驅動硬件是操作系統最基本的功能,操作系統通過各種驅動程序來駕馭硬件設備,和Windows系統不同Linux內核目前采用可加載的模塊化設計(LKMs Loadable Kernel Modules),就是將最基本的核心代碼編譯在內核中,網卡驅動程序是作為內核模塊動態加載的??梢允褂妹?ldquo;lsmod”查看加載情況:
## lsmod
Module Size Used by
dm_mod 54741 0
button 6481 0
battery 8901 0
ac 4805 0
md5 4033 1
joydev 10241 0
uhci_hcd 31065 0
ehci_hcd 30917 0
snd_via82xx 26437 0
snd_ac97_codec 63889 1 snd_via82xx
snd_pcm_oss 49017 0
soundcore 9889 1 snd
tulip 45025 1
via_rhine 23113 2
mii 4673 1 via_rhine
ext3 116809 2
jbd 71257 1 ext3
對每行而言,第一列是模塊名稱;第二列是模塊大??;第三列是調用數。調用數后面的信息對每個模塊而言都有所不同。如果 (unused) 被列在某模塊的那行中,該模塊當前就沒在使用。如果 (autoclean) 被列在某模塊的那行中,該模塊可以被 rmmod -a 命令自動清洗。當這個命令被執行后,所有自從上次被自動清洗后未被使用的被標記了“autoclean”的模塊都會被卸載。叢以上紅色粗體字符可以看到筆者Linux計算機中兩塊網卡模塊:tulip和via_rhine 已經加載。對應的網卡商業型號分別是:
tulip:Lite-On Communications Inc LNE100TX [Linksys EtherFast 10/100]
via_rhine:Via VT6102[Rhine-II] 常見主板集成網卡。
如果沒有檢測到硬件,用硬件檢測程序kuduz檢測網卡,它和Windows中添加新硬件差不多。kudzu程序是通過查看 /usr/share/hwdata/目錄下的文件識別各種硬件設備的。如果核心支持該硬件,并且有該驅動程序就可自動裝載。首先說明的是Linux下對網卡的支持往往是只對芯片的,所以對某些不是很著名的網卡,往往需要知道它的芯片型號以配置Linux.比如我的Top link網卡,就不存在Linux的驅動,但是因為它是NE2000兼容,所以把它當NE2000就可以在Linux下用了.所以當你有一塊網卡不能用, 在找Linux的驅動程序之前一定搞清楚這個網卡用的什么芯片,跟誰兼容,比如3c509,ne2000等。這樣的型號一般都在網卡上最大的一快芯片上印著,抄下來就是了。對于ISA接口的NE2000卡,先要作的一件事情,是將網卡設定為Jumpless模式.很多現在的網卡缺省都是PnP模式,這在Windows下的確能減少很多麻煩,但是Linux不支持,所以Linux下必須是Jumpless模式.一般所有網卡都有帶的驅動盤和DOS下可執行的一個設定程序,用該程序將網卡設為 Jumpless。對于PCI網卡,可以使用命令來查看:lspci。在顯示的列表中找到“Ethe.net Controller”,記下廠商和型號。然后使用modprobe嘗試加載正確的模塊,比如modprobe 3c509。如果出現錯誤,說明該模塊不存在。這時候你應該找到正確的模塊并且重新編譯。問題一般即可解決。
如果很不幸的,您使用的是比較罕見的一些網卡,或者是 Linux 核心支持不夠的網卡,以致于在安裝 Linux 時,并無法檢測到網卡,那也不用擔心,我們可以使用較為簡單的核心模塊編譯來支持這張網卡。下面以筆者的3Com的3CR990-TX-97 網卡為例(一款具有安全特性網卡)看看如何進行模塊編譯。首先在其網站http: //www.3com.com/infodeli/tools/nic/linuxdownload.htm 下載合適你使用內核版本的相關驅動程序,這里以2.4內核為例。
#wegt http://www.3com.com/infodeli/tools/nic/3c990-1.0.0a.tar.gz
另外在開始編譯核心模塊之前,因為驅動程序需要配合核心來編譯,所以會使用到 kernel source 或者是 kernel header 的數據,此外,也需要編譯器 ( compiler ) 的幫助,因此,先確定您的 Linux 系統當中已經下列軟件的存在:kernel-source 、kernel 、gcc 、make。
#tar zxvf 3c990-1.0.0a.tar.gz
#make
此時會產生3c990.o 驅動模塊。然后使用命令拷貝到相應地方然后查看加載是否正常。
#modprobe 3c990
#cp 3c990.o /lib/modules/2.4.20-8/kernel/drivers/net
# depmod -a
然后使用lsmod 命令檢查加載情況,如果一切正常的話??梢宰屜到y啟動時自動加載該模塊:
#echo “alias eth0 3c990”>;>; /etc/modules.conf
原文轉自:http://www.anti-gravitydesign.com