Linux操作系统以其独有的开放性、稳定性和高效性等特点,受到越来越多有识之士的青睐。随着IT行业巨头宣布支持Linux,Linux正在迅速扩大其应用市场,尤其是服务器市场。标准上,Linux兼容POSIX1003.1,但比现有的UNIX系统有更合理的内核结构。由于它的开放性,各种广泛使用的网络协议在该系统中得到了实现。目前人们使用的Linux系统一般是指由Linux内核、外壳和外围应用软件组成的发行版。Linux发行版是不同的公司或组织有效捆绑Linux内核、外壳、安装工具和应用软件的结果,所以种类繁多,各有利弊。但是总的来说,这些发行版支持尽可能多的网卡。本文仅讨论RedHat具体发行版下网卡的选择、安装和配置,希望对其他发行版的相同问题有所借鉴。
就像UNIX一样,Linux支持的网卡主要是以太网卡。许多品牌的以太网卡,如3COM、ACCTON、ATT、IBM、CRYSTAL、D-LINK等。只要安装和配置正确,就能获得想要的效果。
一、Linux中网卡的工作原理
为了更清楚的解释这个问题,我们先简单分析一下Linux是如何让网卡工作的。一般来说,Linux内核已经实现了OSI参考模型的网络层和上层。网络层的实现依赖于数据链路层的有效工作。网卡驱动是数据链路层和物理层的接口。通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。
1.网卡驱动程序
简单来说,要使用手中的网卡,你唯一需要做的就是获取这个网卡的驱动。驱动程序为操作系统的核心提供接口,并为物理层提供接口。
驱动程序的操作系统接口是一些用于发现网卡、检测网卡参数以及发送和接收数据的例程。当驱动开始工作时,操作系统首先调用检测例程来发现系统中安装的网卡。如果网卡支持即插即用,检测例程应该能够自动发现网卡的各种参数;否则,您必须在驱动程序运行之前设置网卡的参数,供驱动程序使用。当内核想要发送数据时,它调用驱动程序的发送例程。发送例程将数据写入正确的空间,然后激活物理发送过程。
面向物理层的驱动程序接口是中断处理例程。当网卡接收到数据,发送过程结束,或者发现错误,网卡产生中断,然后内核调用中断处理例程。中断处理程序判断中断的原因并处理响应。例如,当网卡接收数据并中断时,中断处理例程调用接收例程来接收数据。
2.驱动器运行参数
驱动程序的工作参数随网卡的性质而变化,包括I/O端口号、中断号、DMA通道、共享内存区等。当网卡工作在端口输入/输出模式时,使用输入/输出端口号,也称为输入/输出基址。I/O模式需要CPU的全程介入,但所需硬件和存储空间较低。通过CPU端口号指定的空间与网卡交换数据。中断号是网卡的中断序列号,只要不与其他设备冲突。网卡使用DMA模式时,使用DMA通道批量传输数据,不需要CPU的干预。
对于特定的网卡,如果网卡支持全自动检测,那么就不需要指定任何参数,驱动程序的检测例程会自动设置需要的参数。通常,您需要手动设置其中的一些参数。如果您的网卡使用端口I/O模式,您应该设置端口号和中断号。如果您的网卡使用DMA模式,您应该设置DMA通道和中断号。如果您的网卡使用共享存储区模式,您必须设置共享存储区的地址范围。
3.如何使用驱动程序
有了网卡的驱动程序,你可以选择是将驱动程序添加到Linux内核中,还是将驱动程序处理到一个独立的模块中。Linux系统一个吸引人的优点就是可以定制系统的核心。在系统核心加入经常调用的函数,可以大大提高系统的效率。在这种情况下,当系统启动时,系统内核自动加载网卡的驱动程序。驱动程序的参数可以由LILO命令参数指定。系统启动后,驱动程序永久驻留在内核中,所以不能用常规方法卸载。至于定制的系统内核,是通过重新编译获得的;如何编译内核后面会讲到。
如果驱动程序被编译成一个可加载的模块,它可以在系统启动后用系统提供的命令随时加载。随时加载的好处是减少内存开销,易于管理,但同时也牺牲了网络传输的效率。驱动程序的参数直接输入命令行或通过配置文件指定。
二、网卡安装前的准备工作
安装网卡之前,请务必检查是否满足以下条件:
1.硬件方面
以太网卡
网线和连接器,如10base-T,一般为8芯双绞线,带RJ-45接口。
2.软件方面
Linux操作系统
网卡驱动程序(目标代码或源代码)
*网卡配置程序
*软件开发工具,如GNU toolkit(包括编译器gcc、make等。)
3.系统配置信息
可用的端口地址
可用的中断号
上面没有标星号的是必要条件,标星号的是必要条件视情况而定。细节将在下面进一步解释。
三。网卡的安装和配置
第一步:配置以太网卡的工作参数。
配置是配置网卡的工作参数,如端口地址、中断号等。网卡的默认参数一般存储在网卡内部的EEPROM中,是网卡出厂前设置好的。默认参数在大多数情况下是可行的,但是如果这些参数和你的系统有冲突,而且网卡不支持软件的动态设置,那么你就要使用网卡的设置程序了。并不是所有的网卡都要经过这一步,因为有些网卡支持通过驱动软件及其输入参数来确定网卡的工作参数。这可以参考网卡的操作说明来确定。
网卡的设置程序和驱动不同。设置程序仅用于修改网卡EEPROM中的设置。网卡程序本身可能运行在其他操作系统下,如WINDOWS95/98、OS/2、DOS等。如果是非Linux平台,那么你首先要把网卡安装在适合运行安装程序的系统中,按照安装程序的指令设置网卡参数。然后在Linux系统下安装网卡。
第二步:安装Linux系统。
如果你要安装以太网卡的Linux系统还没有安装,可以尝试在安装Linux的同时安装网卡。这一步成功的先决条件是您的Linux发行版包含要安装的网卡的驱动程序。
运行Linux安装程序,按照提示操作,不要忘记安装核心的网络部分。当进入局域网配置时,安装程序将列出它支持的所有网卡的类型。查看您的网卡是否在列表中。随着Linux发行版的不断升级,RedHat 6.0已经覆盖了常见的网卡类型。如果你的网卡恰好在里面,那么下面讨论的很多步骤都可以忽略,安装程序会自动完成网卡的安装和驱动。但是如果没有找到适合自己的网卡类型,也不要着急,继续下一步。
步骤3:手动安装网卡
安装网卡就是安装网卡的驱动。网卡必须有驱动才能工作,驱动越成熟越好。驱动程序通常由网卡制造商或供应商提供。由于Linux是一个刚刚起步的新操作系统,网卡厂商不一定提供Linux环境下的驱动。这时候你就得想别的办法了,比如在互联网网站上找硬件驱动,或者在newsgrou上发布帮助信息
网卡有两种驱动程序。一种是可以直接使用的二进制代码;另一个是驱动的源代码。二进制代码通常是预编译的可加载模块。源代码可以被编译成可加载模块或系统核心的一部分。本文不讨论如何将源代码编译成可加载模块。详情请参考驱动规范。
1.可加载模块的使用
系统提供一组命令来将驱动模块加载到存储器中以供执行。这些命令包括modprobe、insmod、Ismod、rmmod。Modprobe在功能上类似于insmod命令,但方式不同。
modprobe命令使用配置文件/erc/config.modules来加载可执行模块。要用modprobe命令加载以太网卡的驱动程序,可以添加:
Aliaseth0驱动模块(驱动模块是驱动模块的名称)
这一行配置信息将以太网卡的设备名称与驱动程序模块联系起来。根据这些信息,modprobe命令会自动加载/lib/library/xxxx/net目录中存储的名为drivermodule.o的模块。因此,为了让modprobe命令找到驱动程序模块,必须将它放在/lib/library/xxxx/net目录中。
那么如何指定驱动程序的参数呢?或者使用conf.modules文件。方法是在上述配置信息后添加下行信息:
选项驱动模块参数1=值1,参数2=值2,…
Parm1是驱动程序可接受的参数名,valuel是参数值;诸如此类。
选项cs89x0io=0x200irq=0xamedia=aui。
insmod命令通过命令行参数直接将驱动模块加载到内存中,可以在命令中指定驱动参数。例如:
ins mod driver module . o parml=valuel,parm2=value2,…
上述两个命令中可以使用的驱动程序参数取决于特定的网卡及其驱动程序。仔细阅读网卡和驱动程序的说明。一些网卡驱动程序可以使用这些参数来覆盖网卡本身的EEPROM中存储的参数。其他必须使用EEPROM中的参数。因为有些驱动不会自动检测网卡使用的参数,所以要把网卡使用的EEPROM中的参数传递给驱动。
使用rmmod命令卸载驱动程序模块:
rmmod驱动程序模块o
2.将驱动程序编译到系统核心中。
除了使用可加载模块形式的驱动程序,驱动程序也可以编译到Linux内核中以获得更高的效率。这种方法需要驱动源代码、Linux核心源代码及其编译工具。Linux内核的编译过程包括配置内核、重建依赖、生成内核代码等步骤。核心配置的过程就是用系统提供的配置工具(make config或make menuconfig)重新生成很多用来编译核心的make文件的过程。为了让核心配置工具了解您的网卡驱动程序,您需要修改一些核心配置文件。
(1)修改配置文件:主要修改核心源代码目录。