再说驱动

2014-04-29 04:08
中国信息技术教育 2014年1期
关键词:声卡驱动程序网卡

编者按::新的一年,“高手论技”继续伴随大家前行,身处一线的你,就那些技术上最常遇到的故障、最需要解决的难题、最成熟的应用……都可以在此畅所欲言,各抒己见。是继续围观还是现身说法,新浪微群http://q.t.sina.com.cn/264976,期待您的共同参与。

随着计算机应用的不断人性化,我们的许多工作便利了,这其中驱动程序功不可没,但作为幕后英雄,却甚少为人关注。在此,主持人和嘉宾将分两期来探讨驱动程序所带给我们的精彩。

主持人:

刘宗凡 广东省四会中学

嘉宾:

陈守家 山东省潍坊商业学校

邱元阳 河南省安阳县职业中专

驱动程序在电脑系统中起着非常关键的接口作用,是联接硬件和操作系统的桥梁,其重要性不言而喻。驱动程序从本质上来说还是一段程序代码,但它是一段特殊的代码。驱动程序在操作系统中的工作处在一个管理级别的状态,这个状态具有没有约束的权利,这样的代码如果工作不正常就会给系统带来灾难,因此驱动程序属于底层的系统软件。而因为硬件的多样性,驱动程序的安装也成了一个难题。在上一期我们已经探讨了驱动程序的概念和安装的基本问题,这一期我们再来深入谈谈驱动程序的方方面面。

● 驱动的分类

刘宗凡:驱动程序不是普通的应用软件,它的特殊性体现在哪里?

邱元阳:驱动程序的代码是为应用服务的,所以它的调用通常都是被动的,因为你不知道用户什么时间使用哪个功能,所以驱动程序的代码多数是些片段,用计算机术语来描述就是完成某个功能的函数。不像应用程序一样自己知道下一步该干啥了,没有整体感,只要函数完成一个规定的功能就可以了。不用管它什么时间被调用,只要让系统知道完成该项功能的函数在哪里就行了。简单来说设备驱动程序实质就是提供一组供应用程序操作设备的接口函数,各种设备提供的功能不同,驱动程序提供的函数接口也就不相同了。

陈守家:根据接口函数的不同,驱动程序的分类也比较复杂,我们用一个图能看得更清楚(如图1)。

1.虚拟设备驱动程序(Virtual Device Driver,缩写为VDD)。它可使DOS应用程序访问x86平台上的硬件,也可支持Windows系统下的对端口访问。

2.PnP驱动程序。类驱动程序是管理已定义类的设备,小驱动程序是为了给厂商提供专业支持的。由它们俩共同组成了视窗驱动程序模块(Windows Driver Model,缩写为WDM),它们是一种遵循电源管理协议并能在windows系统上实现源代码级兼容的PnP驱动程序。PnP的任务是把物理设备和软件设备驱动程序相配合并操作设备,在每个设备和它的驱动程序之间建立通信信道。

3.显示驱动程序。这是用于显示和打印设备的内核模式驱动程序。

4.文件系统驱动程序。在本地磁盘或网络上实现标准PC文件系统模型(含多层次目录结构和命名文件概念)。

5.保留设备驱动程序。这主要包括Windows NT早期版本的驱动程序,它直接控制一个硬件设备而不用其他驱动程序帮助,可以不做修改地在Windows的现行版本中运行。

刘宗凡:虚拟驱动程序除了陈老师讲的这层含义,通常还有另一个含义:对不存在的设备的驱动。我们通过安装一个虚拟驱动程序,来模拟一个实际的设备,哪怕这个设备是子虚乌有的。最有名的应该是虚拟光驱。我们在安装虚拟光驱软件时,实际上系统中已经安装了一个虚拟光驱的驱动程序,通过这种方式来“欺骗”操作系统,让它认为系统中存在一个实际的光驱。通过这个虚拟光驱的操作,可以大大加快真实光盘的运行速度,另外还减少了光盘的磨损,可谓一举两得。虚拟驱动这种“无中生有”的本事,给我们带来了很多便利。

邱元阳:对,除了虚拟光驱,我们还可能用到虚拟网卡、虚拟打印机等,这都是通过虚拟驱动程序来实现的。打印机的驱动可以在没有打印机的情形下进行安装,以满足文档的打印预览要求。虚拟打印机则往往是一个应用程序,实现文件的特殊输出要求,如输出为不同格式和类型的文件。

在虚拟机中的硬件,有真实物理机上的设备,也有虚拟的设备,其驱动程序与真实设备一样。支持硬件虚拟化的设备,如CPU,可能还需要在主板BIOS中打开相应的设置。比如光驱,我们既可以使用实际的光驱,也可以使用某个ISO文件虚拟出来的光驱。当然网卡,必须有一个虚拟的,用来实现和宿主机之间的网络连接。

● 驱动安装之惑

刘宗凡:从各类的驱动程序就可以看出它们是非常复杂的,虽然很少走上前台和我们直接打交道,但碰上一些不常见的设备,安装驱动程序就是一件非常令人头疼的事。我们在安装驱动程序时使用什么办法、会碰到哪些麻烦?

陈守家:驱动精灵是一个很智能很好用的驱动安装辅助工具,能够自动识别并从网络上下载安装相应设备的驱动程序。但是,如果网卡驱动本身还没有正常安装,驱动精灵的在线安装也就无能为力了,因此驱动精灵又推出了离线版本,自带了大量的驱动程序,需要事先完整下载下来才能进行安装。当然,驱动精灵也有自带的网卡驱动版本,如果驱动精灵在运行时检测不到网络连接,将自动识别、安装网卡驱动。另外,驱动人生也是一款常用的驱动安装软件。

刘宗凡:除了用软件来在线检测硬件安装驱动程序外,网上还有一种所谓的“万能驱动”程序下载,从声卡、显卡、网卡到摄像头、主板、游戏手柄等设备的万能驱动都有。当然,每一个驱动程序都只能驱动某一种型号的硬件设备,所以万能驱动听起来好像很神秘,其实就是一堆常见硬件驱动程序的集合而已。如果我们在没有网络的情况下要安装驱动程序,先下载好万能驱动也未尝不是一种好的选择。另外,不同网站制作的万能驱动也良莠不齐,大家应选择比较专业的驱动程序网站制作的,这样才会有更好的效果。

邱元阳:在早期的Windows中,安装驱动程序是很困难的,因为那时在尚不完善的“即插即用”环境下,硬件的驱动程序间常常会发生冲突,从而导致无法正常工作。特别是在Windows 98时代,这种硬件冲突常常发生,系统安装和维护时经常会为硬件的IRQ分配大伤脑筋。

IRQ(Interrupt Request),即“中断请求”。硬件需要处理器去执行某些工作时,就会发出一个请求信号,通知处理器“中断”正在执行的其他工作,优先处理请求,完成之后再继续处理之前未完成的工作。

系统提供了16个IRQ请求号(从IRQ0至IRQ15),但是其中很多已经预先分配给特定的硬件了,只有IRQ5、IRQ9、IRQ10和IRQ11是空置的。但是要使用IRQ的周边设备却很多,声卡、网卡等PCI设备都需要配置一个IRQ。如果有两个设备使用了同一个IRQ,就会出现IRQ冲突,致使两者都不能正常工作,尤以声卡与其他设备的冲突最为常见。

有些硬件是可以共用一个IRQ的,但有些却又不行。例如,PCI声卡就需要独享一个IRQ,有时甚至需要两个(MIDI库和Wave波表)。因此当系统自动分配IRQ时,若分配声卡与其他设备共用一个IRQ,就容易发生IRQ冲突,这时就需要我们到BIOS中进行手动设置。

在Windows XP以后的系统中,即插即用(Plug-and-Play,简称PnP)功能已经非常完善,系统将自动找到一个不冲突的中断号和I/O地址分配给外部设备,完全不需要人工干预,因而发生硬件冲突的可能性已经很小了。

PnP实现了硬件设备和驱动程序的协调配合,在每个设备和它的驱动程序之间建立通信信道,自动将I/O地址、IRQ、DMA通道和内存地址段等资源分配给相应的硬件,使它们无冲突地正常工作。但是,在主板的PCI、AGP和PCI-E等插槽中,存在共用中断的情况,当在这些插槽中插入相应的板卡时,就有可能发生冲突。不过现在的主板基本上都集成了常用的声卡、网卡和显卡等芯片,去掉了共享中断的多余插槽,不需要手工配置中断,一般不会再出现硬件冲突。

陈守家:在安装声卡驱动程序时,我们常常会接到WDM的驱动程序。WDM(Windows Driver Model),即Win32驱动程序模型,是微软力推的全新驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。

WDM支持USB、IEEE 1394、ACPI等硬件标准,以往在两个平台上同时运行时需要编写两个截然不同的驱动程序,现在只要编写一个WDM驱动程序就可以了。

Windows的驱动程序体系包括类驱动程序、总线驱动程序、迷你驱动程序和过滤器驱动程序。其支持的硬件可以在硬件兼容性列表(Hardware Compatibility list,HCL)中查到。WDM实现了一个模块化的、分层次类型的微型驱动程序结构,这种架构有利于提升音效处理的效能。

刘宗凡:我们在安装HD Audio声卡驱动程序时有时会碰到一个提示:“需要HD Audio总线驱动程序,但是没有找到。”无论你如何重新安装声卡驱动程序,也是无法成功的。其实这是缺少微软HD Audio总线驱动程序,或称UAA补丁,安装这一补丁再安装驱动程序就可以解决该问题。注意这只能用在Windows XP SP2及之前的系统。

陈守家:Windows XP以后的系统自带有VGA驱动,即使没有安装显卡驱动程序,也能够以正常分辨率来显示图像。但是在VGA驱动下,显示器的显示效果很差,图像变化的延迟非常明显,甚至用鼠标拖动一下窗口都有明显的闪烁和滞后,更不用说运行复杂的程序了。当有这种情况发生时,一般都是没有安装相应的显卡驱动程序所致。

邱元阳:在设置显示器分辨率时,有时一不小心选择了显示器不支持的高分辨率时,或者将某台原来分辨率设置太高的主机搬到另一台不支持这个分辨率的显示器上用时,显示器将无法显示。这个问题其实很容易解决。我们将电脑重新启动到安全模式,然后在设备管理器中将显卡驱动卸载再重启,我们就又回到了只有VGA驱动支持的情况,重新安装显卡驱动就可以了。

● 特殊设备驱动和驱动增强

刘宗凡:上面的驱动程序安装其实还只算是比较普通的情况,驱动程序基本上都是装完操作系统以后再安装,但也有些特别的设备会有特别的要求。

邱元阳:对,如某些SCSI硬盘的驱动,磁盘阵列或阵列卡的驱动,甚至一些非原生SATA硬盘的驱动。在安装系统的过程中如果没有加载,就可能无法正常安装操作系统,或者安装后这类硬件也无法发挥正常功能。

在Windows系统特别是网络操作系统的安装过程中,会有一个按下F6键安装第三方驱动的提示,用于安装Windows没有自带而又需要在操作系统安装完成之前加载的驱动。这类驱动程序往往需要光盘或者软盘来提供,因为此时可能硬盘尚不能使用。在安装服务器的操作系统时,特别是有些老式的SCSI设备或磁盘阵列卡时,经常会遇到这样的问题。

此外,一些打印机可能还会要求在安装驱动程序时断开USB连接,安装完成后再插上USB连接线,避免系统的PnP自动识别硬件。

陈守家:在驱动程序之外,我们可能会使用到一些设备增强软件,因为这些软件和硬件的特殊紧密关系,有时我们也可以把这些程序看作是驱动程序的一部分。例如,微软通用的UAA高清音频补丁能实现:①简化音频外设的安装。②简化音频驱动程序的安装。③提高系统稳定性。④提高性能。⑤免音频干扰。⑥为需要保护的内容提供更高的安全性。这个补丁程序和设备驱动关系紧密,可以看成是驱动程序的一部分。

而RivaTuner是一款显卡强力超频调试软件。它能够提高图像显示质量和解决一些兼容性问题。aTuner是德国硬件网站3DCenter.de的nVIDIA显示卡调节工具。它可以对nVIDIA GPU的反锯齿、各项异性过滤、垂直刷新同步和MipMap LOD进行调节。软件在启动的时候会要求你打开4x全屏抗锯齿。软件界面非常简单,所有功能都包含其中。在常用的项目中有OpenGL的全屏抗锯齿、各项异性过滤、垂直刷新同步、MipMap LOD和D3D的全屏抗锯齿、各项异性过滤、垂直刷新同步、MipMap LOD调节项目。

PowerStrip是一款通用各种显卡的、功能非常强悍的显卡、屏幕功能配置工具,诸如调整桌面尺寸、屏幕更新频率、放大缩小桌面、屏幕位置调整、桌面字型调整、鼠标游标放大缩小、图形与显卡系统信息、显卡运行性能调整等;而这些功能都可利用附在桌面上的Toolbar或是快速键来快速变更,支持用户的喜好。它能修改显卡的各个细致的配置,如添加一些显卡原本不支持的分辨率,进行显示核心软超频等(如图2)。因此,它成为了不少显卡发烧友的首选软件。要注意的是,这个软件能直接修改显卡的工作参数,在错误的设置时可能会对显卡造成损坏,不了解它的作用的选项最好不要贸然设置。

● 驱动开发环境

刘宗凡:我们在安装驱动程序时往往会碰到一些很棘手的问题,而驱动程序的开发工作更具挑战性。由于大多数的驱动程序在内核模式下运行,软件的错误经常造成系统严重的不稳定,如蓝屏死机等情况。虽然驱动程序是一般用户所能掌握的,但了解一下它的开发要求和环境也是“发烧友”必修的课程。

陈守家:如果你要从事驱动开发,首先要明白手头硬件的工作原理,包括处理器架构的知识;其次假如要开发的整个系统是裸机程序,那你要开发的驱动程序就是一套和硬件打交道的函数库;但是假如计划在产品中使用一个操作系统,那开发驱动之前就需要熟悉这个操作系统的相关内部操作原理。

邱元阳:在Windows下进行驱动程序的编写和开发,可以使用微软的驱动程序开发环境DDK(Device Development Kit,设备开发包)或WDK(Windows Driver Kit,Windows驱动程序包),它们是不同版本的开发包,可根据不同的操作系统来选择使用。如果是在Windows 7下进行开发,可以使用WDK,若在Windows XP下进行开发,最好使用DDK。

驱动程序的开发一般需要使用两台电脑,一台用于开发,一台用来调试。在个人工作环境下,也可以使用虚拟机来进行。

程序设计语言和编译器也是不可缺少的,如VC++。具体的环境搭建,可以使用VS2008+DDK方式,再加上一个辅助工具DDK Wizard。Windows 7下也可以使用VS2010+WDK+VisualDDK来进行。

在测试和调试驱动程序时,可以使用自由构建和检查构建的方式进行。内核模式调试需要一个目标机和一个主机,目标机用来运行驱动程序或另一内核模式的应用程序,主机运行调试程序。使用Driver Verifier这一工具可以用来监视和检查内核模式驱动程序的运行。在DDK中有一些常见驱动程序的示例可以用来学习,甚至可以在其基础上进行修改,开发出适合自己设备的驱动程序。

刘宗凡:驱动程序对于普通用户来说确实是一匹不易驾驭的“野马”,但我们只要细心观察、多加琢磨、广开思路,还是能够掌握这门信息技术教师应该掌握的必修课。只要深入了解了驱动程序,就能让电脑的各个部件完全发挥出它的功效来,让其更好地为我们服务。

猜你喜欢
声卡驱动程序网卡
在DDS 中间件上实现双冗余网卡切换的方法
Server 2016网卡组合模式
计算机硬件设备驱动程序分析
ALSA声卡驱动程序设计
声卡数据采集系统设计方式分析
挑战Killer网卡Realtek网游专用Dragon网卡
读编往来
基于MPC8280的CPU单元与内部总线驱动程序设计
风雨二十五载PC声卡春秋录
影音娱乐轻松搞定