Linux操作系统下以太网卡的安装及配置Linux操作系统以其独有的开放性、稳定性、高效率等特性,遭到越来越多有识之士的偏爱。随着IT产业大鳄纷纷宣布对Linux的支持,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的干预。对于一块具体的网卡,假如网卡支持完全手动检查,这么一个参数也不用指定linux 网卡配置文件,驱动程序的测量类库会手动设定所需参数。通常情况,你须要人工设定这种参数的一部份。假如你的网卡使用端口输入输出模式,你要设定端标语和中断号。假如你的网卡使用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的安装程序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是该参数值;依次类推。例如optionscs8989xx0io=0x200irq=0xAmedia=aui●insmod命令直接通过命令行参数将驱动程序模块载入显存,并可以在命令手指定驱动程序参数。
比如:insmoddrivermodule.oparml=valuel,parm2=value2,……以上两个命令中可以使用驱动程序参数要根据具体的网卡及其驱动程序而定,要仔细阅读网卡及驱动程序的说明书。有的网卡驱动程序可以用这种参数覆盖网卡本身EEPROM中储存的参数。有的则必须使用EEPROM中的参数。有的由于驱动程序不手动检查网卡使用的参数,所以还得把网卡使用的EEPROM中的参数传给驱动程序。卸载驱动程序模块使用rmmod命令:rmmoddrivermodule.o2.把驱动程序编译入系统核心不仅以可装载模块的方式使用驱动程序,还可以把驱动程序编译进Linux核心,以获取更高的效率。这些方法须要驱动程序的源代码、Linux核心源代码及其编译工具。Linux核心的编译过程包括配置核心、重建依赖关系、生成核心代码等步骤。配置核心的过程是用系统提供的配置工具(makeconfig或makemenuconfig)重新生成拿来编译核心的诸多make文件的过程。为了让核心的配置工具了解你的网卡驱动程序,你须要更改一些核心的配置文件。(1)更改配置文件:主要更改核心源代码目录下的四个文件,即drivers/net/CONFIG文件、drivers/net/Config.in文件、drivers/net/Makefile文件和drivers/net/Space.c文件。
CONFIG和Config.in文件用于控制核心配置工具(makeconfig或makemenuconfig)的运行,主要是加入关于是否包括该网卡的支持提示。Makefile和Space.c文件用于编译核心代码并说明面向核心的插口。详尽句子参见下边反例。(2)运行核心配置工具:在核心源代码目录下执行makeconfig或makemenuconfig命令。makeconfig是面向命令行的,通过逐字回答提问来配置核心。因为其在配置过程中不可改变或撤销先前的回答,故多有不便。makemenuconfig则是通过窗口菜单形式,使用上去很便捷。就本文而言,你只要在上一步中正确更改了配置文件,这么在config中会出现是否须要该网卡支持的提问,你选择‘y’。或则在menuconfig中的network菜单中出现表示该网卡的菜单项,把它选上即可。(3)重建依赖关系:很简单,执行makedep和makeclean命令。(4)生成核心代码:执行makezImage命令。这个命令开始真正编译核心代码,并把核心代码储存为arch/i386/boot目录下的zImage。
(5)为了使用新的核心代码,你须要用新的核心代码替换原有的。原有的核心代码通常储存在/boot目录下,文件名称类似于vmlinuz-v.s.r-m(v.s.r-m)表示核心的版本号)。如vmlinuz-2.0.34-1。执行下述命令:cparch/i386/boot/zImage/boot/vmlinuz-v.s.r-m为了安全起见,可以先把原有的核心代码做个备份,便于发生错误时恢复。至此,你可以重新引导系统以使用新的带有正确网卡驱动支持的Linux核心。惟一剩下未解决的是驱动程序的参数问题。有些网卡驱动程序假如不输入参数,那它工作都会不正常,甚至根本不工作。因为现今网卡的驱动程序是系统启动时由核心载入运行的,系统启动以后用户就很难改变这种参数了,所以你必须在系统启动时告诉Linux核心网卡驱动程序使用的参数。具体方式有两种:(1)在系统引导程序LILO中输入。在LILO开始引导系统时,用ether子命令设定以太网卡驱动程序的参数。ether命令的使用方法为:LILO:linuxether=IRO.BASE_ADDR,NAME这儿带顿号的是要输入的部份,IRQ表示中断号,BASE_ADDR表示端标语,NAME表示网卡的设备名。
比如:linuxether=15,0x320,eth0(2)在LILO配置文件中设定。每次在系统启动时再输入驱动程序参数虽然有点过分麻烦。庆幸系统提供了LILO的配置文件可以拿来永久性的设置Linux系统启动时的子命令。方式是在/etc/lilo.conf文件中的适当位置加入以下一行:append=“ether=IRQ,BASE_ADDR,NAME”这里带顿号部份的意义同上。加入这一行后,还须要用/sbin/lilo命令把这个配置写入引导程序。第四步:网路配置及测试安装完网卡就可以配置网路通讯了。配置网路简单地就是使用ifconfig命令,比如:ifconfigeth01.2.3.4netmask255.0.0.0up最后ping一下网上其它机器的ip地址,检测网路是否连通。五、一个以太网卡安装实例下边以Cirrus公司生产的CrystalCS8920以太网卡为例,详尽说明上述安装配置过程。本例中,有些命令参数,如核心源代码目录等,是以我使用的系统环境为出发点。具体应用中还要加以本地化。为了更接近实际,反例中也包括了对安装中遇到的问题的描述。
1.此网卡是IBMPC机的外置式网卡,机器只提供了Windows95/98环境下的驱动程序。因为RedHat5.0发行版本仍未提供对此网卡的直接支持,所以从Cirrus的站点上找到并下载了该网卡驱动程序的Linux版本,是一个名为Linux102_tar.gz的压缩文件。2.文件Linux102_tar.gz解压后包括五个文件。包括源代码,仅适用于Linux2.0版本的目标模块以及readme文件。3.查阅readme文件后,了解到这个驱动程序只能使用网卡EEPROM中设定的端标语(I/O基地址)、中断号。为了晓得网卡EEPROM的设置,又从Cirrus站点下载了该网卡DOS版本的设置程序setup.exe4.在DOS中运行setup.exe,发觉网卡的起始端标语为0x360,中断号为10,与别的设备有冲突。选择setup.exe程序的相应菜单,把中断号改成5。另外,此驱动程序不支持plugandPlay,故也在setup.exe上将网卡的PnP功能屏蔽掉。5.我所使用的RedHat5.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的驱动程序目标模块。要装载此驱动程序linux 网卡配置文件,输入下述命令:insmodcs89x0.oio=0x360irq=10要卸载此驱动程序,用rmmod命令:rmmodcs89x0.o7.倘若要将驱动程序编进系统核心,更改/usr/src/linux/drivers/net/CONFIG,加入:CS89x0_OPTS=更改/usr/src/linux/drivers/net/Config.in,加入:tristate‘CS8920Support’CONFIG_CS8920以上两行是为了让makeconfig在配置过程中寻问是否降低CS8920网卡的支持。
更改/usr/src/linux/drivers/net/Makefile加入:ifeq((CONFIG_CS8920),y)L_OBJS+=cs89x0.oendif更改/usr/src/linux/drivers/net/Space.c,加入:externintcs89x0_probe(structdevice*dev);……#ifdefCONFIG_CS8920&&cs89x0_probe(dev);#endif以上两段是为了编译并输出网卡驱动程序及其类库。把驱动程序源代码拷到/usr/src/linux/drivers/net目录下。在/usr/src/linux目录下执行makeconfig或makemenuconfig,选择核心CS8920网卡支持。执行makedep、makeclean命令。最后用makezImage编译Linux核心。怎么设置核心驱动程序参数,上节已有说明,不再赘言。六、结束语与其它外设一样,以太网卡种类繁杂,对于新兴的操作系统Linux来说,是否还能有效地支持这种设备,直接关系着Linux的发展前途。本文表述的以太网卡安装配置只是其中的一小部份,未尽事宜希望与有识之仕共同阐述。