Linux作業系統下乙太網路卡的安裝及配置

來源:互聯網
上載者:User

利用I/O技術可通過資料匯流排實現PC機和網卡間的通訊。目前廣泛採用的I/O技術有:編程I/O、直接儲存空間訪問(DMA)、共用儲存空間和匯流排主控DMA。

Linux作業系統下以太網卡的安裝及配置

摘 要 隨著Linux作業系統日益被人們所接受,如何在Linux系統上展開網路應用越來越成為人們關心的問題。本文詳細論述了作為基礎工作的網卡安裝配置的原理、方法與步驟,並且描述了一個實際工作中的例子。
關鍵詞 Linux 以太網卡 Linux核心 可裝載模組

  Linux作業系統以其專屬的開放性、穩定性、高效率等特點,受到越來越多有識之士的青睞。隨著IT產業巨頭紛紛宣布對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.把驅動程式編譯入系統核心
  除了以可裝載模組的形式使用驅動程式,還可以把驅動程式編譯進Linux核心,以擷取更高的效率。這種方式需要驅動程式的原始碼、Linux核心原始碼及其編譯工具。Linux核心的編譯過程包括配置核心、重建依賴關係、產生核心代碼等步驟。配置核心的過程是用系統提供的組態工具(make config 或make menuconfig)重建用來編譯核心的眾多make檔案的過程。為了讓核心的組態工具瞭解你的網卡驅動程式,你需要修改一些核心的設定檔。
  (1)修改設定檔:主要修改核心原始碼目錄下的四個檔案,即drivers/net/CONFIG檔案、drivers/net/Config.in檔案、drivers/net/Makefile 檔案和drivers/net/Space.c檔案。CONFIG和Config.in檔案用於控制核心組態工具(make config 或make menuconfig)的運行,主要是加入關於是否包括該網卡的支援提示。Makefile 和Space.c檔案用於編譯核心代碼並說明面向核心的介面。詳細語句參見下面例子。
  (2)運行核心組態工具:在核心原始碼目錄下執行make config或 make menuconfig命令。 make config是面向命令列的,通過逐句回答提問來配置核心。由於其在配置過程中不可改變或撤消以前的回答,故多有不便。make menuconfig 則是通過視窗菜單方式,使用起來很方便。就本文而言,你只要在上一步中正確修改了設定檔,那麼在config中會出現是否需要該網卡支援的提問,你選擇‘y’。或者在menuconfig中的 network菜單中出現表示該網卡的功能表項目,把它選上即可。
  (3)重建依賴關係:很簡單,執行make dep和make clean命令。
  (4)產生核心代碼:執行make zImage 命令。這個命令開始真正編譯核心代碼,並把核心代碼存放為arch/i386/boot 目錄下的zImage。
  (5)為了使用新的核心代碼,你需要用新的核心代碼替換原有的。原有的核心代碼一般存放在/boot 目錄下,檔案名稱類似於vmlinuz-v.s.r-m (v.s.r-m)表示核心的版本號碼)。如vmlinuz-2.0.34-1。執行下列命令:
  cp arch/i386/boot/zImage /boot/vmlinuz-v.s.r-m
  為了安全起見,可以先把原有的核心代碼做個備份,以便發生錯誤時恢複。
  至此,你可以重新引導系統以使用新的帶有正確網卡驅動支援的Linux核心。唯一剩下未解決的是驅動程式的參數問題。有些網卡驅動程式如果不輸入參數,那它工作就會不正常,甚至根本不工作。由於現在網卡的驅動程式是系統啟動時由核心載入啟動並執行,系統啟動之後使用者就很難改變這些參數了,所以你必須在系統啟動時告訴Linux核心網卡驅動程式使用的參數。具體方法有兩種:
  (1)在系統引導程式LILO中輸入。
  在LILO開始引導系統時,用ether子命令設定以太網卡驅動程式的參數。ether命令的使用方式為:
  LILO:linu xether=IRO.BASE_ADDR,NAME
  這裡帶底線的是要輸入的部分,IRQ表示中斷號,BASE_ADDR表示連接埠號碼,NAME表示網卡的裝置名稱。例如:linux ether=15,0x320,eth0
  (2)在LILO設定檔中設定。
  每次在系統啟動時再輸入驅動程式參數似乎有點過於麻煩。幸好系統提供了LILO的設定檔可以用來永久性的設定Linux系統啟動時的子命令。方法是在/etc/lilo.conf檔案中的適當位置加入以下一行:
  append=“ether=IRQ, BASE_ADDR,NAME”
  這裡帶底線部分的意義同上。加入這一行後,還需要用/sbin/lilo命令把這個配置寫入引導程式。
  第四步:網路設定及測試
  安裝完網卡就可以配置網路通訊了。配置網路簡單地就是使用ifconfig命令,
例如:
  ifconfig eth0 1.2.3.4 netmask 255.0.0.0 up
  最後ping一下網上其它機器的ip地址,檢查網路是否連通。

五、一個以太網卡安裝執行個體
  下面以Cirrus公司生產的Crystal CS8920以太網卡為例,詳細說明上述安裝配置過程。本例中,有些命令參數,如核心原始碼目錄等,是以我使用的系統內容為出發點。具體應用中還要加以本地化。為了更接近實際,例子中也包括了對安裝中碰到的問題的描述。
  1.此網卡是IBM PC機的內建式網卡,機器只提供了Windows95/98環境下的驅動程式。由於RedHat 5.0發行版本尚未提供對此網卡的直接支援,所以從Cirrus的網站上找到並下載了該網卡驅動程式的Linux版本,是一個名為Linux102_tar.gz的壓縮檔。
  2.檔案Linux102_tar.gz解壓後包括五個檔案。包括原始碼,僅適用於Linux 2.0版本的目標模組以及readme檔案。
  3.查閱readme檔案後,瞭解到這個驅動程式只能使用網卡EEPROM中設定的連接埠號碼(I/O基地址)、中斷號。為了知道網卡EEPROM的設定,又從Cirrus網站下載了該網卡DOS版本的設定程式setup.exe
  4.在DOS中運行setup.exe,發現網卡的開始端點口號為0x360,中斷號為10,與別的裝置有衝突。選擇setup.exe程式的相應菜單,把中斷號改成5。另外,此驅動程式不支援plug and Play,故也在setup.exe中將網卡的PnP功能屏蔽掉。
  5.我所使用的RedHat 5.0的Linux核心版本為2.0.34,所以不能用現成的驅動程式目標模組,需要自己動手編譯。如上文所述,有兩種方式使用此驅動程式。
  6.如果要編譯成獨立模組,執行下列命令:
  gcc -D_KERNEL_-I/usr/src/linux/include -I/usr/src/linux/net/inet-Wall -Wstrictprototypes -02 -fomit-frame-pointer -DMODULE -DCONFIG_MODVERSIONS -ccs89x0.c
  編譯結果是名為cs89x0.o的驅動程式目標模組。要裝載此驅動程式,輸入下列命令: insmod cs89x0.o io=0x360 irq=10
  要卸載此驅動程式,用rmmod命令:
  rmmod cs89x0.o
  7.如果要將驅動程式編進系統核心,
  修改/usr/src/linux/drivers/net/CONFIG,加入:
  CS89x0_OPTS=
  修改/usr/src/linux/drivers/net/Config.in,加入:
  tristate‘CS8920 Support’CONFIG_CS8920
  以上兩行是為了讓make config在配置過程中詢問是否增加CS8920網卡的支援。修改/usr/src/linux/drivers/net/Makefile加入:
  ifeq((CONFIG_CS8920),y)
  L_OBJS+=cs89x0.o
  endif
  修改/usr/src/linux/drivers/net/Space.c,加入:
  extern int cs89x0_probe(struct device *dev);
  ……
  #ifdef CONFIG_CS8920
    && cs89x0_probe(dev);
  #endif
  以上兩段是為了編譯並輸出網卡驅動程式及其常式。
  把驅動程式原始碼拷到/usr/src/linux/drivers/net目錄下。
  在/usr/src/linux目錄下執行 make config或 make menuconfig,選擇核心CS8920網卡支援。
  執行make dep、make clean命令。最後用 make zImage 編譯Linux核心。
  如何設定核心驅動程式參數,上節已有說明,不再贅述。

六、結束語
  與其它外設一樣,以太網卡種類繁多,對於新興的作業系統Linux來說,是否能夠有效地支援這些裝置,直接關係著Linux的發展前途。本文敘述的以太網卡安裝配置只是其中的一小部分,未盡事宜希望與有識之仕共同探討。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.