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发行版本的不断升级,目前RedHat6.0已经覆盖了常用的网卡类型。如果很幸运地你的网卡恰好在其中,那么下文讨论的很多步骤都可以不必考虑了,安装程序会自动完成网卡的安装与驱动。但如果没找到适用于你的网卡类型,也不必担心,继续下一步。
第三步:手工安装网卡
安装网卡也就是安装网卡的驱动程序。网卡要工作必须要有驱动程序,并且驱动程序越成熟越好。驱动程序一般由网卡的生产或供应商提供。由于Linux是一个起步不久的新兴操作系统,网卡的生产商并不一定提供Linux环境下的驱动程序。这时候你就得从其它途径想办法了,比如到INTERNET上专门提供硬件驱动程序的网站查找一下,也可以在新闻组上贴个求助信息。总之,只有得到网卡的驱动程序后,方可进行下一步。
网卡的驱动程序有两种类型。一是可直接使用的二进制代码;另一种是驱动程序的源代码。二进制代码一般是预先编译好的可装载模块。源代码可以编译成可装载模块,也可以编译成系统核心的一部分。如何把源代码编译成可装载模块不在本文讨论之列,具体可以查阅驱动程序的说明书。
1.可装载模块的使用
系统提供了一组命令用于将驱动程序模块载入内存执行。这些命令包括modprobe、insmod、Ismod、rmmod。modprobe与insmod命令功能相似,但是方式各异。
●modprobe命令使用配置文件/erc/config.modules来加载可执行模块。要用modprobe命令加载以太网卡的驱动程序,可以在config.modules文件中加入:
aliaseth0drivermodule(drivermodule是驱动程序模块的名称)
这行配置信息把以太网卡的设备名与驱动程序模块联系起来。modprobe命令依据这条信息,自动加载存放于/lib/library/xxxx/net目录下名为drivermodule.o的模块。因此要使modprobe命令找到驱动程序模块,必须将该模块放在/lib/library/xxxx/net目录下。
那么驱动程序的参数如何指定呢?还是使用conf.modules文件。方法是在接着上述配置信息的后面加入下行信息:
optionsdrivermoduleparml=valuel,parm2=value2,……
这里parm1是驱动程序可以接受的参数名,valuel是该参数值;依次类推。
比如optionscs89x0io=0x200irq=0xAmedia=aui
●insmod命令直接通过命令行参数将驱动程序模块载入内存,并可以在命令中指定驱动程序参数。例如:
insmoddrivermodule.oparml=valuel,parm2=value2,……
以上两个命令中可以使用驱动程序参数要依据具体的网卡及其驱动程序而定,要仔细阅读网卡及驱动程序的说明书。有的网卡驱动程序可以用这些参数覆盖网卡本身EEPROM中存储的参数。有的则必须使用EEPROM中的参数。有的因为驱动程序不自动检测网卡使用的参数,所以还得把网卡使用的EEPROM中的参数传给驱动程序。
卸载驱动程序模块使用rmmod命令:
rmmoddrivermodule.o
2.把驱动程序编译入系统核心
除了以可装载模块的形式使用驱动程序,还可以把驱动程序编译进Linux核心,以获取更高的效率。这种方式需要驱动程序的源代码、Linux核心源代码及其编译工具。Linux核心的编译过程包括配置核心、重建依赖关系、生成核心代码等步骤。配置核心的过程是用系统提供的配置工具(makeconfig或makemenuconfig)重新生成用来编译核心的众多make文件的过程。为了让核心的配置工具了解你的网卡驱动程序,你需要修改一些核心的配置文件。