摘 要 隨著Linux操作系統日益被人們所接受,如何在Linux系統上展開網絡應用越來越成為人們關心的問題。本文詳細論述了作為基礎工作的網卡安裝配置的原理、方法與步驟,並且描述了一個實際工作中的例子。
關鍵詞 Linux 以太網卡 Linux核心 可裝載模塊
Linux操作系統以其獨有的開放性、穩定性、高效率等特點,受到越來越多有識之士的青睐。隨著99v產業巨頭紛紛宣布對Linux的支持,Linux正在迅速擴展其應用市場,特別是服務器市場。在標准上,Linux與POSIX1003.1兼容,但它具有比以住的UNIX系統更合理的內核結構。由於它的開放性,各種被人們廣泛應用的網絡協議都在該系統中得到了實現。目前人們所使用的Linux系統一般是指由Linux核心、外殼(SHELL)及外圍應用軟件構成的發行版本。Linux發行版本是不同的公司或組織將Linux核心、外殼、安裝工具、應用軟件有效捆綁起來的結果,所以種類繁多,各有各的優缺點。但就其總體而言,這些發行版本具有對盡可能多的網卡的支持。本文僅就RedHat5.1這個特定發行版本下的網卡的選擇、安裝、配置進行討論,希望對於其他發行版本的同樣問題有點借鑒作用。
就象UNIX,Linux支持的網卡主要是以太網卡。如3COM、ACCTON、AT&T、IBM、CRYSTAL、D-LINK等眾多品牌的以太網卡只要安裝配置正確,都可以得到你所期望的效果。
一、 Linux中網卡的工作原理
為了將這個問題說明的更清楚一些,不妨先簡要地剖析一下Linux是如何讓網卡工作的。一般來說,Linux核心已經實現了OSI參考模型的網絡層及更上層部分。網絡層的實現依賴於數據鏈路層的有效工作。網卡的驅動程序就是數據鏈路層與物理層的接口。通過調用驅動程序的發送例程向物理端口發送數據,調用驅動程序的接收例程從物理端口接收數據。
1.網卡驅動程序
簡單地說,要將你手中的網卡利用起來,你唯一要做的是得到這塊網卡的驅動程序。驅動程序提供了面向操作系統核心的接口和面向物理層的接口。
驅動程序的操作系統接口是一些用於發現網卡、檢測網卡參數以及發送接收數據的例程。當驅動程序開始運作時,操作系統首先調用檢測例程以發現系統中安裝的網卡。如果該網卡支持即插即用,那麼檢測例程應該可以自動發現網卡的各種參數;否則你就要在驅動程序運作前,設置好網卡的參數供驅動程序使用。當核心要發送數據時,它調用驅動程序的發送例程。發送例程將數據寫入正確的空間,然後激活物理發送過程。
驅動程序面向物理層的接口是中斷處理例程。當網卡接收到數據、發送過程結束,或者發現錯誤時,網卡產生一個中斷,然後核心調用該中斷的處理例程。中斷處理例程判斷中斷發生的原因,並進行響應的處理。比如當網卡接收到數據而發生中斷時,中斷處理例程調用接收例程進行接收。
2.驅動程序工作參數
驅動程序的工作參數因網卡性質的不同而不同,大致包括I/O端口號、中斷號、DMA通道、共享存儲區等。輸入輸出端口號又被稱為輸入輸出基地址,當網卡工作於端口輸入輸出模式時被使用。端口輸入輸出模式需要CPU的全程干預,但所需硬件及存儲空間要求較低。CPU通過端口號指定的空間與網卡交換數據。中斷號是網卡的中斷序號,只要不與其它設備沖突即可。當網卡使用DMA方式時,它要使用DMA通道批量傳輸數據而不需要CPU的干預。
對於一塊具體的網卡,如果網卡支持完全自動檢測,那麼一個參數也不用指定,驅動程序的檢測例程會自動設定所需參數。一般情況,你需要人工設定這些參數的一部分。如果你的網卡使用端口輸入輸出模式,你要設定端口號和中斷號。如果你的網卡使用DMA模式,你要設定DMA通道和中斷號。如果你的網卡使用共享存儲區的模式,那你就得設定共享存儲區的地址范圍。
3.驅動程序的使用方式
有了網卡的驅動程序後,你可以選擇是把驅動程序加入到Linux核心之中還是把驅動程序加工成獨立模塊。Linux系統一個引人入勝的長處就是可以定制系統的核心。把需要頻繁調用的功能加入系統核心,可以大大提高系統的效率。在這種情況下系統啟動時,系統核心自動加載網卡的驅動程序。驅動程序的參數可以通過LILO命令參數加以指定。系統啟動後驅動程序永久駐留核心,不能用常規的方法將其卸載。至於定制的系統核心,是通過重新編譯得到的;如何編譯核心將在後文敘及。
如果把驅動程序編譯成可裝載模塊,就可以用系統提供的命令在系統啟動後隨時加載。隨時加載的好處是減少內存開銷,易於管理,但同時也犧牲了一點網絡傳輸的效率。驅動程序的參數是在命令行中直接輸入或通過配置文件指定。二、 網卡安裝前的准備 在安裝網卡前,務必檢查是否具備下列條件:
1.硬件方面
●以太網卡
●網絡連接線及連接頭,如10base-T一般為8芯雙絞線配RJ-45接口
2.軟件方面
●Linux操作系統
●網卡驅動程序(目標碼或源代碼)
●*網卡配置程序
●*軟件開發工具,如GNU工具包(包括編譯器gcc、make等)
3.系統配置信息
●可用的端口地址
●可用的中斷號
以上不帶星號標記的是必要條件,帶星號的是視情況不同而要求的條件。具體情況在下面進一步說明。
三、 網卡的安裝及配置
第一步:配置以太網卡的工作參數
配置網卡就是配置網卡的工作參數,如端口地址、中斷號等。網卡的缺省參數一般存儲於網卡內部的EEPROM,這是網卡出廠前設置好的。缺省參數在大多數情況下是可行的,但如果這些參數與你的系統有沖突並且網卡又不支持軟件動態設置,那麼你就要使用網卡的設置程序。並不是所有的網卡都要經過這一步,因為有些網卡支持通過驅動軟件及其輸入參數來確定網卡的工作參數。可以通過查閱網卡使用說明書來確定這一點。
網卡的設置程序與驅動程序不同,設置程序僅僅用來對網卡EEPROM中的設置進行修改。網卡程序本身可能運行在其它操作系統下,如WINDOWS95/98、OS/2、DOS等。如果是非Linux平台,那你就先在適合設置程序運行的系統中安裝網卡,按設置程序說明設置網卡參數。然後再在Linux系統下安裝該網卡。
第二步:安裝Linux系統
假如你將要安裝以太網卡的Linux系統本身還未安裝,那麼可以先試著在安裝Linux的同時安裝網卡。這一步成功的前提是你的Linux發行版本包含將要安裝的網卡的驅動程序。
運行Linux的安裝程序,按提示進行操作,別忘了安裝核心的網絡部分。當進行到LAN配置時,安裝程序會列出它支持的所有網卡的類型。看看你的網卡是否榜上有名。隨著Linux發行版本的不斷升級,目前RedHat 6.0已經覆蓋了常用的網卡類型。如果很幸運地你的網卡恰好在其中,那麼下文討論的很多步驟都可以不必考慮了,安裝程序會自動完成網卡的安裝與驅動。但如果沒找到適用於你的網卡類型,也不必擔心,繼續下一步。
第三步:手工安裝網卡
安裝網卡也就是安裝網卡的驅動程序。網卡要工作必須要有驅動程序,並且驅動程序越成熟越好。驅動程序一般由網卡的生產或供應商提供。由於Linux是一個起步不久的新興操作系統,網卡的生產商並不一定提供Linux環境下的驅動程序。這時候你就得從其它途徑想辦法了,比如到INTERNET上專門提供硬件驅動程序的網站查找一下,也可以在新聞組上貼個求助信息。總之,只有得到網卡的驅動程序後,方可進行下一步。
網卡的驅動程序有兩種類型。一是可直接使用的二進制代碼;另一種是驅動程序的源代碼。二進制代碼一般是預先編譯好的可裝載模塊。源代碼可以編譯成可裝載模塊,也可以編譯成系統核心的一部分。如何把源代碼編譯成可裝載模塊不在本文討論之列,具體可以查閱驅動程序的說明書。
1.可裝載模塊的使用
系統提供了一組命令用於將驅動程序模塊載入內存執行。這些命令包括modprobe、insmod、Ismod、rmmod。modprobe 與insmod命令功能相似,但是方式各異。
●modprobe 命令使用配置文件/erc/config.modules來加載可執行模塊。要用 modprobe命令加載以太網卡的驅動程序,可以在 config.modules文件中加入:
alias eth0 drivermodule (drivermodule是驅動程序模塊的名稱)
這行配置信息把以太網卡的設備名與驅動程序模塊聯系起來。modprobe命令依據這條信息,自動加載存放於 /lib/library/xxxx/net目錄下名為 drivermodule.o的模塊。因此要使 modprobe命令找到驅動程序模塊,必須將該模塊放在 /lib/library/xxxx/net目錄下。
那麼驅動程序的參數如何指定呢?還是使用conf.modules文件。方法是在接著上述配置信息的後面加入下行信息:
options drivermodule parml=valuel,parm2=value2,……
這裡parm1 是驅動程序可以接受的參數名,valuel是該參數值;依次類推。
比如options cs89x0 io=0x200 irq=0xA media=aui
●insmod命令直接通過命令行參數將驅動程序模塊載入內存,並可以在命令中指定驅動程序參數。例如:
insmod drivermodule.o parml=valuel,parm2=value2,……
以上兩個命令中可以使用驅動程序參數要依據具體的網卡及其驅動程序而定,要仔細閱讀網卡及驅動程序的說明書。有的網卡驅動程序可以用這些參數覆蓋網卡本身EEPROM中存儲的參數。有的則必須使用EEPROM中的參數。有的因為驅動程序不自動檢測網卡使用的參數,所以還得把網卡使用的EEPROM中的參數傳給驅動程序。
卸載驅動程序模塊使用rmmod命令:
rmmod drivermodule.o
2.把驅動程序編譯入
●insmod命令直接通過命令行參數將驅動程序模塊載入內存,並可以在命令中指定驅動程序參數。例如:
insmod drivermodule.o parml=valuel,parm2=value2,……
以上兩個命令中可以使用驅動程序參數要依據具體的網卡及其驅動程序而定,要仔細閱讀網卡及驅動程序的說明書。有的網卡驅動程序可以用這些參數覆蓋網卡本身EEPROM中存儲的參數。有的則必須使用EEPROM中的參數。有的因為驅動程序不自動檢測網卡使用的參數,所以還得把網卡使用的EEPROM中的參數傳給驅動程序。
卸載驅動程序模塊使用rmmod命令:
rmmod drivermodule.o
2.把驅動程序編譯入