歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux操作系統下以太網卡的安裝及配置

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

日期:2017/2/25 10:39:35   编辑:Linux教程
  Linux操作系統以其獨有的開放性、穩定性、高效率等特點,受到越來越多有識之士的青睐。隨著IT產業巨頭紛紛宣布對Linux的支持,Linux正在迅速擴展其應用市場,特別是服務器市場。在標准上,Linux與POSIX1003.1兼容,但它具有比以住的UNIX系統更合理的內核結構。由於它的開放性,各種被人們廣泛應用的網絡協議都在該系統中得到了實現。目前人們所使用的Linux系統一般是指由Linux核心、外殼(SHELL)及外圍應用軟件構成的發行版本。Linux發行版本是不同的公司或組織將Linux核心、外殼、安裝工具、應用軟件有效捆綁起來的結果,所以種類繁多,各有各的優缺點。但就其總體而言,這些發行版本具有對盡可能多的網卡的支持。本文僅就RedHat這個特定發行版本下的網卡的選擇、安裝、配置進行討論,希望對於其他發行版本的同樣問題有點借鑒作用。

  就象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命令參數加以指定。系統啟動後驅動程序永久駐留核心,不能用常規的方法將其卸載。至於定制的系統核心,是通過重新編譯得到的;如何編譯核心將在後文敘及。

  如果把驅動程序編譯成可裝載模塊,就可以用系統提供的命令在系統啟動後隨時加載。隨時加載的好處是減少內存開銷,易於管理,但同時也犧牲了一點網絡傳輸的效率。驅動程序的參數是在命令行中直接輸入或通過配置文件指定。

   四、一個以太網卡安裝實例

  下面以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的發展前途。本文敘述的以太網卡安裝配置只是其中的一小部分,未盡事宜希望與有識之仕共同探討。

Copyright © Linux教程網 All Rights Reserved