风一样的男孩 发表于 2010-2-24 20:25:37

显卡PNP原理及方法(关于显卡冲突问题的解决方案)

我来讲下这个事.
把9系列的装好,440的显卡又没驱动了!
郭总讲的这个事,现实.为什么呢,如何解决呢?
首先我们要知道为什么会冲突,冲突的关结点在哪里
驱动的安装无非做了几个事情:
1,拷贝文件到相关位置
2,写入相关注册表信息,使系统能初始化并正常使用
也正因为这两点才会导致后面的事情发生.
因为都是NVIDIA厂商的硬件.
文件的命名原则从TNT2->GF2->GF4->GF5XXX-GF6XXX-GF7XXX.....-GF9XXXX,都没改.
分析过驱动的人就会发现.在INF驱动配置文件当中.从老板本的到新版本,不管是文件名的命名还是注册表键名的命名都没有改变.
这也就导致了一个问题出来了.因为现在还没有一款驱动可以从最老的TNT2兼容到最新的GF9800.
也就要装两款甚至两款以上的驱动才能满需要,PNP包
当装第一款驱动.很顺利.没什么问题.
但当装第二款驱动的时候,问题来了.
已经驱动并设置好的第一款驱动配套的显卡已无法正常工作了.
那到关键点就是出在装第二款驱动时做的事情了.
在装第二款驱动的时候,如果不是用SETUP方式安装的话,用手动从设备管理器里面安装就可以看到事故现场.
在装驱动的时候,会有很多个提示.该文件已存在,是否覆盖等等.
覆盖完后就经过了一个闪屏操作.
闪屏操作是在做什么了.我监控过.是了两个事情.
第一个,将服务等注册表信息写入注册表
第二个,调用系统DLL,刷新整个系统.使系统使用当前写入的服务来加载这块显卡.
那么在这两个事情当中第一个事情和我们之前装第一次驱动也是做的也是一样的,也就是说不管是注册表里的服务还是其它信息,有很多重复的信息.也就产生了覆盖操作.
由这两个覆盖操作就导致了显卡冲突!
那么我们既然找到了冲突的原因.
就好解决这个问题了.
关键在解决文件及注册表冲突上就可以了!
具体操作大家都会吧...
我就说下我的方法吧.不知道行得通不..
补充网友:涟源奇东-郭军(234318)问题
是不是在装的时候提示覆盖的时候按否??
答:安装会完成.只不过重启显卡无法正常工作.因为支持这款显卡的文件信息不对啊.
在这里讲下显卡驱动版本.
这也就是所谓的显卡PNP
显卡版本上,61.77可以支持:NVIDIA RIVA TNT到NVIDIA GeForce 6800 Ultra一直到NVIDIA Quadro FX 1300
显卡版本上,182.50可以支持:NVIDIA GeForce 6200到NVIDIA GeForce 8600 GT一直到NVIDIA GeForce 9800 GTX/9800 GTX+
也就是说这两个驱动加在一起可以支持NV现在差不多所有型号!
我只是拿这两款驱动举个例子!
要想知道每款驱动支持哪些显卡可以查文件:nv4_disp.inf
nv4_disk.inf
这个文件是驱动的配置文件,包括信息如下:
1,需要拷贝的文件,类型很多。(.dll/.sys/.cfg/.nvu/.exe)
2,需要拷贝到什么地方,一般包括: (c:windows,c:windowsinf,c:windowssystem,c:windowssystem32,c:win dowssystem32drivers等路径)
3,各硬件的厂商号、设置号等,具体如:PCIVEN_10DE&DEV_0020,这里面VEN是 厂商号,nVIDIA,DEV是设备号。
每一个硬件厂商都有唯的的序列号,同样,每个厂商生产的硬件也有唯一的设备 号。例如:10EC 表示设备厂商为Realtek,你们只要看到10EC的话,就一定是这 个厂商的产品。
4,需要添加的注册表信息。包括控制信息,服务信息,枚举信息等。
这里面的控制信息对应注册表:HKLMSYSTEMCurrentControlsetControl
服务信息对应注册表:HKLMSYSTEMCurrentControlsetServices
枚举信息对应注册表:HKLMSYSTEMCurrentControlsetEnum
一个硬件只要有这三个支撑就可以在Windows平台发挥作用
在这三个信息当中,发生冲突的主要就是服务信息。
5,周边注册表信息,包括用户信息,控制面板信息等……
而nv4_disp.inf里面的数据又是与其它文件相匹配的,
大家也许想到了。既然冲突的是服务信息,大不了把NV的服务名改掉,不就可以了。
只要修改一下inf文件的服务那个段就可以了。
这只是很多冲突中的一种,既然我们可解决这个问题。肯定要做得圆美,上面就讲到了,冲突的两个:文件冲突,注册表冲突。
那么就引出了我们的正题,修改文件以及修改注册表。
我们不可能等到硬件装好了再用REGEDIT.EXE去一个一个改。
修改文件很简单,就是重命名一下。其实修改注册表也很简单。因为注册表的相关信息都是在nv4_disk.inf统一配置的。
在这里用我的一个很简单的办法:批量修改。
在nv4_disp.inf批量查找并替换nv为kd,这不仅改了文件信息,而改了注册表信息。
再将用DOS命令:ren nv*.* kd*.*
来改所有驱动文件夹下的文件名。
就可以达到修改文件及注册表信息的效果了!
我是一个整体思路。并不是一个万能的包。还要靠各位慢慢解决余下遇到的各种各样的问题。
不论什么事情,只要找到事物的关结点,就可以处理问题了。
页: [1]
查看完整版本: 显卡PNP原理及方法(关于显卡冲突问题的解决方案)