故障现象
我的局域网中有一台以Windows 2000为系统平台的客户机,它通过网卡连入局域网。可是在一次启动后,系统提示“网络适配器不能正常工作,必须重新配置”。查看这台客户机网卡的I/O地址和IRQ值等资源,但是并没有发现有硬件冲突的现象存在,该计算机无法与局域网内其他计算机连接。
诊断过程:
解决故障有时还是需要按部就班,根据发现的种种故障现象,先收集相关资料然后再实地进行解决。
在网卡的配置过程中,主要是对网卡驱动程序进行配置。而在这其中,有4种资源的配置非常重要,用户需重点把握。这4中资源是:中断请求(IRO)、直接内存访问(DMA)、输入/输出 (I/O) 端口地址和内存范围。
在计算机中,一个设备的运行主要靠CPU进行调配,但仅靠CPU是不够的,还需要不同设备的相应驱动程序通过总线与CPU取得联系,使得设备能够响应CPU的控制要求或者使设备的运行请求得到CPU的支持。为了控制设备,在驱动程序的控制下,CPU会向设备发送命令并从设备读取信息。也就是要和设备建立数据通信。由于计算机中不只是一个设备,因此要和特定的设备通信,CPU就必须首先了解该设备数据输入/输出接口的地址。这样才能为CPU和设备之间的通信建立一个“信道”。这里,设备驱动程序的作用就是为CPU提供不同设备接口地址等各种资源信息的。
● IRQ值
IRQ值就是中断请求值。每个设备都具备一个IRQ值,通过它向CPU发送服务请求。一般来说,计算机有16个中断线,分别与各种设备相连,系统对每个中断线进行编号,这些编号就是对应的中断号。当一条中断线被激活后,CPU就会立即停下来当前的工作,装载一定的中断处理子程序(即中断服务程序)来完成对应的服务请求,当服务完成后,系统又回到刚才的断点继续原来的工作中。IRQ值也可以被看成是对应中断服务程序的地址。如果系统中有至少两个设备有相同的中断号,则会引起冲突。通常在计算机中中断号分配如下:
中断号说明
IRO OH 系统时钟(不可用)
IRO 1H 键盘 (不可用)
IRO 2H 系统的第二个中断请求控制器(IRO 8H~ IRO 15H)
IRO3H 串行口2 (可用)
IRO 4H 串行口1(可用)
IRO 5H 并行口2 (可用)(一般用来设置声卡)
IRO 6H 软盘 (不可用)
IRO 7H 并行口1(可用)(一般用作打印机)
IRO 8H 实时时钟(不可用)
IRO 9H 可用分配给其他设备
IRO 10H 可用分配给其他设备
IRO 11H 常用于显示卡
IRO 12H PS/2鼠标
IRO 13H 数学协处理器
IRO 14H IDE1控制器通道
IRO 15H IDE2控制器通道(可用)
●直接内存访问(DMA, Direct Memory Access)
主机与设备之间的数据传送有两种途径:一是由CPU管理数据的传送,二是用专门的芯片完成数据的传送。而直接内存访问(DMA)就是不经CPU的干预,由设备同内存之间直接进行数据的相互传送。在这种方式下,设备利用DMA建立通道,直接将数据写入存储器或将数据从存储器中读出,而不是用CPU参与,从而提高了系统的响应速度。一般,总共只有8个DMA通道,分别被标识为0~7号。
DMA编号 具体作用
0 可用
1 EPC打印口(如果系统设置打印机)
2 软盘控制器
3 8位数据传送
4 级联DMA控制器
5 可用
6 可用
7 可用
● 输入/输出端口地址(I/O ,Input/Output)
CPU与设备通信时主要通过设备的输入/输出接口来完成,这个接口就叫做设备的输入/输出端口,即I/O端口。每个端口都有相应的号,这就是输入/输出端口的地址,即I/O地址。每一个端口都包含一组寄存器(包括数据寄存器、命令寄存器和状态寄存器)。每一个设备有不同的I/O地址,在计算机中共有1024个I/O地址。每个I/O通道地址都是由一个基地址和一个由参数指定的长度来组成。这些地址都是用十六进制数表示的。例如一块网卡的I/O地址范围可以是2000H`201H。
当一个设备向CPU发送中断请求时,CPU会检查内存中存储器的被该设备占用的I/O通道地址,以获取如何答复该设备请求的信息。由于I/O地址数量较多,所以很少出现冲突,特别对于即插即用设备更是这样。如果I/O通道地址出现冲突,那么通常是由于手动设置而使地址重叠。
● 内存范围
计算机中的每个程序和设备都会被分配内存范围,且这些范围对每个具体程序、设备而言必须是唯一的。内存范围是用八进制数的地址来指定的。例如,一块网卡被分配的内存地址范围可能是42000000H~42000FFFH。现在大多数芯片都采用扁平式的32位地址空间,可以最高支持4GB的内存范围,因此在比较新的操作系统中很少出现内存范围冲突。
一些设备在主内存中分配有内存范围。当安装、使用这样的设备时,这段内存范围被设备和CPU共享(运行设备驱动程序之后)。这段内存范围意味着设备和主内存之间“直接”传输数据,但并不是实际意义上的传输,而是由设备把数据放到它自己的内存中。
现在,对这4种资源的关系我有了一个系统的理解,这里以图示的方式记录下我的总结,以使自己在后续工作中能够继续使用。
好了,在了解了4种重要资源的工作原理及相互关系后,我就针对网卡配置不当分别从以下几方面进行检查。
1、检查驱动程序是否安装正确。
一般情况下,网卡是即插即用设备(pnp,plug-and-play),系统能够自动识别所安装的网卡型号并正确安装相应的驱动程序。但有时也会出现网卡驱动程序安装出错的情况,在设备驱动程序陈旧不被当前操作系统所支持或网卡为不知名厂商情况下,驱动程序安装出错尤为明显。当网卡驱动程序不能安装时,它也就不能起到应有的作用。针对不同的操作系统,网卡驱动程序安装方法也有所不同。不管所用的是何种系统,还是先了解一下驱动程序的安装方法。
在Windows 2000系统中安装网卡驱动程序需要遵循如下步骤。
首先依次打开“开始”→“设置” →“控制面板”,找到并双击“添加/删除硬件”图标,进入“添加/删除硬件向导”单击“下一步”按钮。
然后进入“选择一个硬件任务”窗口,此时由于需要安装网卡设备,因此应该勾选“添加/删除设备故障”一项,单击“下一步”按钮。
此时系统会自动搜索定位新硬件,一段时间后将出现“选择一个硬件设备”窗口,在设备列表中显示当前已经成功安装的设备或已安装但还未安装驱动程序的设备,如果某些设备在安装上出现问题或者要为他安装驱动程序,可以选中它后根据向导提示继续进行操作;如果需要安装的设备并没有在其中显示,就需要选中“添加新设备”一项后,单击“下一步”按钮。
接下来出现“查找新硬件”窗口,这里有“是,搜索新硬件”和“否,我想从列表中选择硬件”。如果选择前一项,则将由系统自动查找已经进行安装但还未安装驱动程序的设备,系统通常可以自动识别一些较为知名厂商推出的设备。为了能够人工干预网卡驱动程序安装的全过程。这里选择后一项,单击“下一步”按钮。
此时出现“硬件类型”窗口,可以在“硬件类型”下的列表中选择要安装何种硬件,这里选中“网卡”一项,单击“下一步”。
接下来出现“选择网卡”窗口,其中左边列表显示了多个不同的网卡制造商,而右边列表则显示某个制造商对应的网卡型号,这时应按照当前实际使用的网卡规格进行选择。如果当前使用的网卡规格系统能够识别(包括制造商和具体的型号),则可直接单击“下一步”按钮,系统将自动安装驱动程序,如果当前网卡规格在列表中没有显示,可以单击“从磁盘安装”按钮,在弹出的窗口中手工定位网卡驱动程序所在的位置。然后就可以根据系统提示进行安装了。
检查这台客户机使用的是Windows操作系统,而安装方法也和要求的基本没有出入,而这时仍然发现有系统信息提示网卡配置不当(或者在使用网卡时不能完成网络连接,这种情况也可能发生)。那么就应该检查当前网卡是否和其他的设备冲突了。
2、检查系统中是否存在与网卡的硬件冲突。
在学习资料中可以发现,最容易引起硬件冲突的是IRQ值因为在系统提供的IRQ值只有16个,除去系统本身已经占用的中断之后,真正可供分配的只有IRQ 3H(串行口2,如未接设备可用)、IRQ 4H(串行口1,如未接设备可用)、IRQ 7H(串行口1,在没有安装打印机时可用)、IRQ 9H和IRQ 10H。通常情况下,在安装网卡的驱动程序时,系统会根据程序中的数据自动设置网卡的IRQ值。但如果用户出于某些考虑(如某些设备需要的中断号已被先有设备占用)手工调整了IRQ值的设置,就可能出现和其他设备IRQ值相同的情况,从而引起设备的冲突。
这时好不容易找到网卡的说明书,发现原来网卡必须占用IRQ 10H,且1/O地址必须为0140H-015FH。于是在系统中将网卡的中断由开始设置的IRQ 11H改为IRQ 10H,并将1/O地址由原来的0340H-035FH改为0140H-015FH。这样应该可以恢复正常了吧。但是在“冲突的设备列表”中还是发现有两个设备,即网卡和声卡都在IRQ 10H。
由于网卡的IRQ值已经规定,因此考虑将声卡让出IRQ 10H。但在设备管理器中调整声卡的中断请求时,却又弹出“无法修复此资源设置”的提示框。考虑到在BIOS设置程序中可以对声卡的中断进行调整,于是重新启动计算机,在出现提示信息时按下“Del”键进入BIOS设置程序,打开“PNP/PCI CONFIGURATION”选项,将“OnBoard Audio Use IRO No”项中的声卡中断由“Auto”改为“5”。保存设置并退出。
重新启动系统,但在进入启动画面后几秒钟突然黑屏,只有一个光标在屏幕顶端不停的闪烁,随后计算机死机,怀疑是声卡中断没有调整正确,于是重新进入BIOS设置程序,对声卡的IRQ值进行调整。之后分别将声卡的IRQ值设为3H、7H、9H等,结果均告失败,无奈之下只好把声卡IRQ值恢复到调整前的“Auto ”。
既然正常模式无法进入,那么在安全模式下进行呢?接着重新启动计算机,按下F8键,在启动菜单中选择安全模式后顺利进入。在系统中打开“设备管理器”查看资源列表,发现在通用串行总线控制器下面多出一个“Unknown Device”,前面还有一个“X”号。很显然这是引起硬件冲突的网卡。删除它后重新启动,可以正常进入系统,但没有网卡,就无法进入局域网了。所以,安装网卡势在必行。那么如何来避免问题的发生呢?
我发现,现在占用IRQ 10H的设备共有3个,分别是网卡,声卡和计算机外联的扫描仪。虽然我在BIOS的设置中已将声卡占用的IRQ 10H让出,但扫描仪依然会占用IRQ 10H。如果网卡必须独占IRQ 10H,就会导致死机。那么,如果直接将IRQ 10H分配给网卡,是不是问题就可以解决了呢?于是重新启动计算机按下“Del”键进入BIOS设置,打开“PNP/PCI CONFIGURATION”选项,首先将“Resources Controlled By”由“AUTO”改为“Manual”,随即在弹出的中断请求列表中将“IRQ-10 assigned to”选项的内容由默认的“legacyISA”改为“PCI/ISA PnP”,将其中保留给PCI插曹。保存后退出。再次在Windows操作系统中重新安装网卡驱动程序,安装完毕后打开设备管理器查看,发现已正确显示网卡,同时在网卡属性中发现IRQ值和I/O值的分配也完全符合要求了。
排除心得
这一问题引起了我的充分重视。有时候操作系统出现网卡参数设置有误的提示,而且网络也能够连得通,但在工作中,经常出现网络时通时不通的现象,或者网络速度明显慢。这时就应该考虑到网卡的I/O地址和IRQ值参数可能与操作系统中分配的值不一致以及发生冲突的可能性。
遇到由于出现网络配置不当而引起不能连网以及不能顺利访问局域网其他计算机的故障时,应首先保证在不同的操作系统中都已经正确地安装了网卡驱动程序,然后再检查系统中是否出现硬件冲突,而出现硬件冲突的主要原因集中在对于硬件IRQ值的设置和分配中。一般情况下,如果系统能够正确识别网卡的驱动程序,则用户最好不要手工修改设备的各种资源数据。如果在必要时对这些资源数据手工修改,也要保证不和其他设备数据冲突并与网卡自带的数据保持一致。
另外,在安装、配置网卡驱动程序时还应该注意以下几点:
● 一般网卡都带有网卡设置软盘,在配置前应该根据主机的硬件资源(I/O地址和IRQ值等)情况对网卡进行设置,以免在安装网卡是发生资源冲突的现象。
● 如果网卡附带有驱动软件,应优先使用其附带的驱动软件。
● 必须在单用户状态下安装网卡或修改网卡的硬件设置和网络协议。
●修改网卡配置时,如果修改了系统的Local Host Name或IP地址,必须修改相应的文件,将Windows文件中原网卡的配置信息删掉,否则系统会不断重复显示报警信息而影响系统正常工作。