linux论文.docx
《linux论文.docx》由会员分享,可在线阅读,更多相关《linux论文.docx(8页珍藏版)》请在冰豆网上搜索。
linux论文
LINUX
操作系统论文
(Linux操作系统下以太网卡的安装及配置)
学院:
华东交通大学理工学院
专业:
09计算机科学与技术
班级:
1班
姓名:
肖凯
学号:
20090210440116
提交日期:
2011年11月30日
指导老师:
徐涢基
一·······················引言
二·······················LUNUX的背景和特色
三·····················正文
四·······················结束语
一.引言
Linux系统是从UNIX发展来的。
UNIX是世界上最流行的操作系统之一,它是一种实时操作系统,可以运行于大型和小型计算机上的多任务系统。
但由于它比较庞大,而且价格昂贵,所以不适合PC机用户使用。
而Linux正好弥补了这些缺点,同时还继承了UNIX大多数优点。
由于它基于PC机上运行的操作系统,并且内核源代码是公开的,使得Linux成为时下最浒的操作系统。
Linux是一种适用于PC机的计算机操作系统,它适合于多种平台,是目前唯一免费的非商品化操作系统。
由于有结构清晰、功能强大等特点,它很快成为许多院校学生和科研机构的研究人员学习和研究的对象。
在他们的热心努力下,Linux渐渐成为一个稳定可靠、功能完善的操作系统。
Linux是由UNIX发展来的,它不仅继承了UNIX操作系统的特征,而且许多方面还超过了UNIX系统。
另外它还有许多UNIX所不具有的优点和特征。
当前,由于Linux资源完全公开,使得Linux的发展日益广泛快速。
基于Linux的各种应用已逐渐深入日常生活的方方面面,尤其是在嵌入式领域,由于内核可裁减定制,因此可随意地根据用户需求进行整个系统的定制与重构。
其中,我们可以通过对各种标准外部设备的驱动进行改造,从而实现用户对标准设备的特定需求。
由于它的开放性,各种被人们广泛应用的网络协议都在该系统中得到了实现。
目前人们所使用的Linux系统一般是指由Linux核心、外壳(SHELL)及外围应用软件构成的发行版本。
Linux发行版本是不同的公司或组织将Linux核心、外壳、安装工具、应用软件有效捆绑起来的结果,所以种类繁多,各有各的优缺点。
但就其总体而言,这些发行版本具有对尽可能多的网卡的支持。
本文仅就RedHat5.1这个特定发行版本下的网卡的选择、安装、配置进行讨论,就象UNIX,Linux支持的网卡主要是以太网卡。
二.Linux的背景和特色
Linux是一种“自由软件”:
所谓自由,是指用户可以自由地获取程序及其源代码,并能自由地使用他们,包括修改或拷贝等。
它是网络时代的产物,众多的技术人员通过Internet共同完成它的研究和开发,无数用户参与了测试和除错,并可方便地加上用户自己编制的扩充功能。
作为自由软件中最为出色的一个,Linux具有如下的特点:
(1)完全遵循POSLX标准,并扩展支持所有AT&T和BSDUnix特性的网络操作系统。
由于继承了Unix优秀的设计思想,且拥有干净、健壮、高效且稳定的内核,其所有核心代码都是由LinusTorvalds以及其他优秀的程序员们完成,没有AT&T或伯克利的任何Unix代码,所以Linux不是Unix,但Linux与Unix完全兼容。
(2)真正的多任务、多用户系统,内置网络支持,能与NetWare、WindowsNT、OS/2、Unix等无缝连接。
网络效能在各种Unix测试评比中速度最快。
同时支持FAT16、FAT32、NTFS、Ext2FS、ISO9600等多种文件系统。
(3)可运行于多种硬件平台,包括Alpha、SunSparc、PowerPC、MIPS等处理器,对各种新型外围硬件,也可以从分布于全球的众多程序员那里得到迅速地支持。
(4)对硬件要求较低,可在较低档的机器上获得很好的性能,特别值得一提的是Linux出色的稳定性,其运行时间往往可以“年”计。
(5)有广泛的应用程序支持。
已经有越来越多的应用程序移植到Linux上,包括一些大型厂商的关键应用。
Linux的主要应用领域
目前,Linux的应用主要包括:
(1)Internet/Intranet:
这是目前Linux用得最多的一项,它可提供包括Web服务器、Ftp服务器、Gopher服务器、SMTP/POP3邮件服务器、Proxy/Cache服务器、DNS服务器等全部Internet服务。
Linux内核支持IPalias、PPP和IPtunneling,这些功能可用于建立虚拟主机、虚拟服务、VPN等。
(2)由于Linux拥有出色的联网能力,因此它可用于大型分布式计算,如动画制作、科学计算、数据库及文件服务器等。
(3)作为可在低平台下运行的Unix的完整(且免费)的实现,广泛应用于各级院校的教学和科研工作,如墨西哥政府已经宣布在全国的所有中小学配置Linux并为学生提供Internet服务。
(4)桌面和办公应用。
Linux有广泛的用处,它可用于:
个人UNIX工作站。
终端用户和应用服务器。
UNIX开发平台。
商业开发。
网络服务器。
Internet服务器。
终端服务器、传真服务器、Modem服务器。
三.Linux操作系统下以太网卡的安装及配置
一、Linux中网卡的工作原理
为了将这个问题说明的更清楚一些,不妨先简要地剖析一下Linux是如何让网卡工作的。
一般来说,Linux核心已经实现了OSI参考模型的网络层及更上层部分。
网络层的实现依赖于数据链路层的有效工作。
网卡的驱动程序就是数据链路层与物理层的接口。
通过调用驱动程序的发送例程向物理端口发送数据,调用驱动程序的接收例程从物理端口接收数据。
1.网卡驱动程序
驱动程序的操作系统接口是一些用于发现网卡、检测网卡参数以及发送接收数据的例程。
当驱动程序开始运作时,操作系统首先调用检测例程以发现系统中安装的网卡。
如果该网卡支持即插即用,那么检测例程应该可以自动发现网卡的各种参数;否则你就要在驱动程序运作前,设置好网卡的参数供驱动程序使用。
当核心要发送数据时,它调用驱动程序的发送例程。
发送例程将数据写入正确的空间,然后激活物理发送过程。
2.驱动程序工作参数
驱动程序的工作参数因网卡性质的不同而不同,大致包括I/O端口号、中断号、DMA通道、共享存储区等。
输入输出端口号又被称为输入输出基地址,当网卡工作于端口输入输出模式时被使用。
端口输入输出模式需要CPU的全程干预,但所需硬件及存储空间要求较低。
CPU通过端口号指定的空间与网卡交换数据。
中断号是网卡的中断序号,只要不与其它设备冲突即可。
当网卡使用DMA方式时,它要使用DMA通道批量传输数据而不需要CPU的干预。
3.驱动程序的使用方式
有了网卡的驱动程序后,你可以选择是把驱动程序加入到Linux核心之中还是把驱动程序加工成独立模块。
Linux系统一个引人入胜的长处就是可以定制系统的核心。
把需要频繁调用的功能加入系统核心,可以大大提高系统的效率。
在这种情况下系统启动时,系统核心自动加载网卡的驱动程序。
驱动程序的参数可以通过LILO命令参数加以指定。
系统启动后驱动程序永久驻留核心,不能用常规的方法将其卸载。
至于定制的系统核心,是通过重新编译得到的;如何编译核心将在后文叙及。
二、网卡安装前的准备 在安装网卡前,务必检查是否具备下列条件:
1.硬件方面
●以太网卡
●网络连接线及连接头,如10base-T一般为8芯双绞线配RJ-45接口
2.软件方面
●Linux操作系统
●网卡驱动程序(目标码或源代码)
●网卡配置程序
●软件开发工具,如GNU工具包(包括编译器gcc、make等)
3.系统配置信息
●可用的端口地址
●可用的中断号
三、网卡的安装及配置
第一步:
配置以太网卡的工作参数
配置网卡就是配置网卡的工作参数,如端口地址、中断号等。
网卡的缺省参数一般存储于网卡内部的EEPROM,这是网卡出厂前设置好的。
缺省参数在大多数情况下是可行的,但如果这些参数与你的系统有冲突并且网卡又不支持软件动态设置,那么你就要使用网卡的设置程序。
并不是所有的网卡都要经过这一步,因为有些网卡支持通过驱动软件及其输入参数来确定网卡的工作参数。
可以通过查阅网卡使用说明书来确定这一点。
第二步:
安装Linux系统
运行Linux的安装程序,按提示进行操作,别忘了安装核心的网络部分。
当进行到LAN配置时,安装程序会列出它支持的所有网卡的类型。
第三步:
手工安装网卡
安装网卡也就是安装网卡的驱动程序。
网卡要工作必须要有驱动程序,并且驱动程序越成熟越好。
驱动程序一般由网卡的生产或供应商提供。
由于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,……
卸载驱动程序模块使用rmmod命令:
rmmoddrivermodule.o
2.把驱动程序编译入系统核心
除了以可装载模块的形式使用驱动程序,还可以把驱动程序编译进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.exe
4.在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的驱动程序目标模块。
要装载此驱动程序,输入下列命令:
insmodcs89x0.oio=0x360irq=10
要卸载此驱动程序,用rmmod命令:
rmmodcs89x0.o
7.如果要将驱动程序编进系统核心,
修改/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.o
endif
修改/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的发展前途。