|
2#
楼主 |
发表于 2007-10-7 07:54:35
|
只看该作者
研发过程:
nForce网卡的HWID分析过程就略了,再提俺要吐了...
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=113275
NVIDIA nForce Ethernet硬件ID分析
当你down接近1G的芯片组驱动,最后发现有用的东西(Ethernet IDE SMBus SMU,Display无视)用WINRAR压缩成固实的RAR文件,大小才3.26MB时...
我想你会有拿起板凳猛拍NVIDIA的猪头工程师的冲动吧
一、从硬件结构入手
二、驱动程序文件进一步分析
三、插曲:神秘的nvtcp.sys
四、对比Vista驱动,HWID补完计划
五、MCP73的迷惑,通吃?
六、闲话后继研究
一、从硬件结构入手
第一步是从nForce芯片组的网络部分入手,寻找其网卡驱动在WINPE上为何如此难缠的原因
完整的网卡在硬件上包含两部分:MAC(媒体访问控制)和PHY(Physical Layer 物理层)
从nForce3开始
NVIDIA在南桥(NVIDIA称之为MCP)上集成了千兆网卡的MAC
(nForce芯片组的板载PHY芯片有Realtek、Marvell、Visse等)
为了满足其数据传输量,NVIDIA还开辟了一条特殊的PCI总线连接MAC部分与南桥(MCP)
惹事的就是这条特殊PCI总线
从nForce3的网卡驱动开始
芯片组驱动的Ethernet这个文件夹内其实是放了两个驱动
按照安装顺序
第一个是总线驱动nvnetbus.inf (bus部分)
第二个才是网卡驱动nvenetfd.inf (fd部分)
所以我在处理网卡驱动时
一是要让两个INF内的对应HWID的一一对应
严禁捞过界的行为——例如装了nForce3的bus部分,却配套nForce4的fd部分,那就彻底乱套了,很大机会见到亲切的蓝屏画面
二是根据WINPE下驱动安装的特性
把nForce2之外的网卡驱动拆分成总线驱动bus、网卡驱动fd两部分,然后用XCAB处理(一定要勾选处理INF)
------------------------
二、驱动程序文件进一步分析
开始时我也以为只要按照pecmd的固有机制
INF文件解压到X:\WXPE\INF
sys文件解压到X:\WXPE\system32\drivers
其它文件解压到X:\WXPE\system32
结果证明光这样做是不行的,因为手工进行这系列操作也无效
于是在那台C61的机器上继续研究
配置如下图
此机器安装了deepinxp lite v58 test
网卡驱动已经安装好
在驱动程序详细信息那里看到两件诡异的事情:
(一)、配套DLL文件的蛊惑
驱动文件详细信息:
资源:
HWID:
服务和枚举:
总线关系和设备协同安装
NVIDIA Network Bus Enumerator的驱动调用的dll文件居然不是两个而是三个
多出了一个bdco1ins.dll
同样NVIDIA nForce Networking Controller的驱动程序详细信息里面多出了fdco1ins.dll
打开对应的INF文件搜索bdco1ins.dll或fdco1ins.dll
另外比较原版nvnetbus.inf和XCAB处理后的nvnetbus.inf中
发现此字段有蛊惑:
[nvnetBus_Device_CoInstaller_CopyFiles]
bdco1.dll
bdco1ins.dll,bdco1.dll
nvconrm.dll
也就是说,bus驱动的安装过程,bdco1.dll会拷贝多一份,重命名为bdco1ins.dll
同样,fd驱动的安装过程,fdco1ins.dll会拷贝多一份,重命名为fdco1ins.dll
而调用[nvnetBus_Device_CoInstaller_CopyFiles]的恰好是
[nvnetBus_Device.NT.CoInstallers]
但是原版nvnetbus.inf中
[nvnetBus_Device.NT.CoInstallers]
AddReg=CoInstaller_AddReg
copyFiles=nvnetBus_Device_CoInstaller_CopyFiles
这行是能够被XP驱动安装组件认可并且执行驱动程序文件的拷贝和重命名
而XCAB处理后的nvnetbus.inf中
[nvnetBus_Device.NT.CoInstallers]
AddReg=CoInstaller_AddReg
;opyFiles=nvnetBus_Device_CoInstaller_CopyFiles
分号;在INF文件中起的是注释作用
也就是说这行是没作用的
nvenetfd.inf也有同样的情况
驱动文件详细信息:
资源和电源管理:
HWID:
服务和枚举:
类别安装程序和设备协同安装
pecmd安装驱动的特性之一是要求INF文件废掉copyFiles操作!
而我那个只分拆了bus跟fd后就直接用XCAB处理的的驱动包,内里没有bdco1ins.dll和fdco1ins.dll
缺少这两个辅助dll,网卡驱动装得上才怪
于是除了nForce2的网卡驱动,其它都补上bdco1ins.dll和fdco1ins.dll
(二)、sys文件的猫腻
NVIDIA nForce Networking Controller的驱动程序详细信息里面
驱动核心文件的名称是NVENETFD.sys
原驱动包里面则是nvefdxp.sys(nvefd2k.sys已经干掉了,呵呵)
查看原版nvenetfd.inf
调用[NVENET_XP.CopyFiles]的是[NVENET_XP.NDI.NT]
[NVENET_XP.NDI.NT]
Characteristics = 0x84 ; NCF_PHYSICAL | NCF_HAS_UI
BusType = 1 ; Pretend ISA
AddReg = NVENET_XP.reg, SpeedSetting.reg, ASF.reg, JumboFrameSize.reg, ChecksumOffload.reg, SegOffload.reg,\
LowPowerStateLinkSpeed.reg, FlowControl.reg
copyFiles = NVENET_XP.CopyFiles
[NVENET_XP.CopyFiles]
NVENETFD.sys,nvefdxp.sys,,2
[NVENET_2K.CopyFiles]
NVENETFD.sys,nvefd2k.sys,,2
也就是说,驱动的安装过程,nvefdxp.sys(nvefd2k.sys)都会改名为NVENETFD.sys
经过XCAB处理后的nvenetfd.inf
[NVENET_XP.NDI.NT]
Characteristics = 0x84 ; NCF_PHYSICAL | NCF_HAS_UI
BusType = 1 ; Pretend ISA
AddReg = NVENET_XP.reg, SpeedSetting.reg, ASF.reg, JumboFrameSize.reg, ChecksumOffload.reg, SegOffload.reg,\
LowPowerStateLinkSpeed.reg, FlowControl.reg
;opyFiles = NVENET_XP.CopyFiles
这里已经变成了注释,没有拷贝和改名的作用
所以驱动安装失败
nvefd2k.sys早已删除
剩下的nvefdxp.sys都改名为NVENETFD.sys
其实一些驱动包只支持WINXP,文件名直接就是NVENETFD.sys,不需要改了
不过我也得庆幸C61没有这个情况
不需要日后肯定要做的再度Debug
经过上述两步折腾,驱动能成功安装了,ADSL拨号+IE6上网成功了
但技术追求是没有止境的...
------------------------
三、插曲:神秘的nvtcp.sys
(一)、干掉nvtcp.sys
还是那台C61机器
NVIDIA Network Bus Enumerator和NVIDIA nForce Networking Controller
的驱动程序详细信息里面都没有nvtcp.sys、
INF里面查过,是属于nvnetbus.inf的,但搜到唯一的一处
只是在注册表条目里面写入了一个信息
[CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, \
"bdco1ins.dll,BDCoInstaller", \
"nvconrm.dll,NVCoInstaller"
HKR, Uninstall, Script,0,"nvnrm.nvu"
HKR, Uninstall, Name,0,"NVIDIA Ethernet Driver Components"
HKR, Uninstall, INFSrcDir, 0, %1%
HKR, Uninstall, Uninstaller,0,"nvunrm.exe"
HKR, Uninstall, CopyFiles, %REG_MULTI_SZ%, "nvtcp.sys"
从这段文件看来,是关于设备卸载的
nvnetbus.inf文件里面,nvtcp.sys没有起到其它作用
后来nForce4、C51上的安装测试也证明了这一点
在网上搜索,得知nvtcp.sys应该是跟NVIDIA在其芯片组驱动包里面提供的网络防火墙有关
所以nvtcp.sys完全可以精简掉
(二)、进一步精简驱动
还有两个未知作用的文件:nvnrm.sys、nvsnpu.sys
是否可以一并干掉?
经过我在C51平台上的进一步确认
(C61的研究和测试是熬通宵的,因为机器重灌系统后要交货,于是厚脸皮找人弄了台C51)
删除这两个文件的话
NVIDIA Network Bus Enumerator驱动会安装失败,而且是报告驱动损坏的那一种(绝对没商量)
nvnrm.nvu其实是个纯文本
nvunrm.exe是NV的专用设备卸载程序
都可以灭了
还有INF文件里面根本没提到的nvphy.bin文件
nForce 650i(南桥部分是nForce 430、410)、nForce 520/560、nForce 630a的Ethernet驱动内各带有一个
这个文件从名字来看比较诡异
删掉后在C51上的测试暂时正常
如有问题请兄弟姐妹们反馈
nvenetfd.tag、nvnetbus.tag只是在[SourceDisksNames]字段存在
如nvenetfd.inf
[SourceDisksNames]
1 = %DiskId1%, NVENETFD.tag,,
把, NVENETFD.tag,,变成,,,
完事
至于CAT文件,早就干掉了,留着碍事...
经过一番减肥后
驱动的体积成功缩小40%
不过意外参考了一些资料
发觉有必要继续upgrade
------------------------
四、对比Vista驱动,HWID补完计划
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=113275
NVIDIA nForce Ethernet硬件ID分析
提取了Vista中nForce系列网卡的驱动
两特点:
(一)、很简洁!只有netnvm32.inf+nvm60x32.sys!看得口水直流...
后来分析了一下,觉得应该没什么可能移植了
WINXP中,两个INF文件
nvnetbus.inf
[Version]
Signature="$WINDOWS NT$"
;Class=System
;ClassGuid={4D36E97D-E325-11CE-BFC1-08002BE10318}
Class=%Vendor_ClassName%
ClassGuid={1a3e09be-1e45-494b-9174-d7385b45bbf5}
nvenetfd.inf
[version]
Class = Net
ClassGUID = {4D36E972-E325-11CE-BFC1-08002BE10318}
另外综合到
nForce系列网卡在安装nvnetbus.inf之前
在设备管理器里的设备类别是“其它PCI桥设备”
安装nvnetbus.inf后设备类别才变成“网络适配器”
设备类别的差别,很难搞(Mission Impossible...)
(二)、HWID多一倍!
看来还有很多网卡的HWID,在NVIDIA官网提供的驱动里面根本没有
从Vista的驱动注释看来,大多数是NoteBook平台的
另外参考一下老毛桃WINPE里头的nForce网卡驱动
根据nForce芯片组的演化进程
同步修改一下nvnetbus.inf、nvenetfd.inf,加入缺少的HWID(依旧注意一一对应!)
增强通用性
------------------------
五、MCP73的迷惑,通吃?
这事情在这里提过了
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=112734
82楼
新增了不少网卡的HWID之余(蓝色字部分)
更奇怪的是,似乎7CH提供的这个网卡驱动,能通吃nForce3和之后的所有nForce芯片组的网卡?
到现在为止,NVIDIA虽然发布了MCP73芯片组,但是官网依然尚未提供对应驱动的官方下载
以下仅列出nvnetbus.inf部分
nvenetfd.inf也是一一对应的,这里略了
DriverVer = 09/10/2007, 67.6.2
[Standard]
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_008C
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_00DF
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0038
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0057
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0269
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0373
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0389
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03EF
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03E6
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0452
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0453
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_054E
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_054F
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0086
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_00E6
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0037
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0056
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0268
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0372
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03E5
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03EE
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0450
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0451
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_054C
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_054D
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_07DC
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_07DE
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_07DD
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_07DF
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0760
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0761
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0762
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0763
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0AB0
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0AB1
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0AB2
%nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_0AB3
这里也按之前的做法提供了MCP73的驱动(分拆、增加dll、sys改名、精简无用文件)
如果有兄弟姐妹已经摸到MCP73的板子,可以帮忙测试一下
还有就是——手头有nForce3和之后的芯片组的平台兄弟姐妹,也请在测试上面的驱动之余,试试这个MCP73的驱动
如果确认是完全通用,那么之前的七个驱动完全可以放弃掉六个,大大减少驱动的体积!
------------------------
六、闲话后继研究
1、大规模广泛测试...各种nForce芯片组的都试试...
需要注意两个小问题:继续确认一些文件的删除是否有影响;MCP73网卡驱动的通用性
2、如开头所说的,这些驱动如果都集中在一个cab内压缩(能节省很多空间),就会互相干扰而无法成功安装驱动,也请试用者帮忙再度验证
3、日后有继续有这种架构的nForce网卡驱动出现,当前的处理手法是否继续奏效?新驱动的通用性如何?
4、鉴于PECMD的驱动安装机制特性,XCAB处理后的INF文件,如果安装出现问题,建议检查copyfiles=的字段,看看有无猫腻
顺带一提
光棍节次日,nForce 780i要来了
http://news.mydrivers.com/1/92/92268.htm
三卡SLI芯片组11月12日发布
除了G92、G92两款新显卡将在11月12日发售之外,NVIDIA还会在同一天推出代号“C72”的“nForce 780i SLI”芯片组,支持三卡SLI。
nForce 780i SLI芯片组支持全系列Intel LGA775处理器,包括最新登场的1333MHz前端总线型号和未来的45nm Yorkfield、Wolfdale。
nForce 780i SLI将具备三条PCI-E x16插槽,支持“Tri-SLI”技术,以此对抗AMD-ATI即将放出的四卡Quad CrossFire。不过需要注意的是,该芯片组虽然支持PCI-E 2.0规范,但并非原生支持,而是通过额外加装的BR04芯片达成的。
此外,nForce 780i SLI依然支持DDR2内存,而对DDR3的支持要等到2008年第一季度的“C73”。
nForce 780i SLI还有两个千兆以太网控制器、六个SATA 3Gbps接口。
Xpreview.com提供的nForce 780i SLI主板实物图,可以明显看到三条PCI-E x16插槽、45度斜向摆放的北桥芯片和旁边的BR04芯片。
[ 本帖最后由 ryvius 于 2007-10-7 08:12 AM 编辑 ] |
评分
-
查看全部评分
|