首页| 论坛| 搜索| 消息
主题:磁盘控制器驱动集成方略
霸王硬上弓发表于 2008-12-21 19:59
如需要转载本帖,请注明 本帖出自:自由天空技术论坛,原作者:Skyfree
第一章、关于磁盘控制器
Skyfree我在之前不少的教程中都提到过有关这方面的内容,不过由于之前技术水平有限,不能较为完整详细的解释这方面的内容,所以一直感到惭愧。现今,经过了相当长一段时间的学习与实践,我想现在的我应该可以把有关磁盘控制器驱动集成原理的部分较为明了的解释一下了。
一、正确理解磁盘控制器驱动的含义
很多朋友将“SATA硬盘驱动”这个词经常挂在嘴边,Skyfree我当年也是这个样子。其实这种说法是一种从表象上看问题的说法,所以有不少的偏差。好吧,现在我要将一个概念深入人心,即“磁盘控制器与磁盘类型没有直接的关系”。当然,或许这个说法也有部分偏差,有兴趣的朋友可以更为深入的研究,并可以找我讨论。
“磁盘控制器驱动”是针对磁盘控制器的(似乎是废话),而不是针对磁盘(硬盘以及相关类似的存储介质,狭义的可以认为磁盘就是指的硬盘)的。磁盘控制器有主板芯片组自带的,有主板集成的第三方的,也有独立的磁盘控制器卡。磁盘控制器,就像是磁盘到计算机的一个中间介质,简单说,系统是通过磁盘控制器认识磁盘的。所以,如果系统里没有和磁盘控制器匹配的磁盘控制器驱动,是无法识别磁盘的。
如果对这个不好理解,可以这样来想,例如我们当年的98系统,98系统里没有常用的USB控制器驱动,所以我们的U盘插上后系统识别不出来,而我们现在最常用的XP中包含了大量常用的USB控制器驱动,所以基本上所有的U盘插上后会自动识别出来。这里,你可以把USB控制器看做磁盘控制器,U盘控制器驱动看做磁盘控制器驱动,U盘看做磁盘。USB控制器驱动是为USB控制器装的,而不是为U盘装的。
说到这里,我们来看一下我们最常见的两种磁盘控制器:
1、并行磁盘控制器,或者叫做ATA(PATA)磁盘控制器。
基本上来说,这种磁盘控制器都是为IDE接口的磁盘准备的,而并行磁盘控制器也一般只有并行工作模式。所以,一般来说,并口磁盘所使用的磁盘控制器都是工作在并行模式的并行磁盘控制器。
但也由此,让许多人将这个概念照搬到了串行磁盘控制器上,造成了一些理解错误。
还有一点,很多人认为IDE的磁盘就不需要安装磁盘控制器驱动,这个也是错误的。并不是因为不需要安装,而是因为系统内已经集成了并行磁盘控制器,就像XP集成了大量常用USB控制器驱动一样。
2、串行磁盘控制器,或者叫做SATA磁盘控制器。
SATA磁盘控制器,广义上讲,SATA(Serial ATA)指的是所有的串行磁盘控制器,包括普通的串行磁盘控制器、RAID磁盘控制器、SCSI磁盘控制器等等;狭义上讲,我们普遍的将SATA磁盘控制器理解为普通的串行磁盘控制器,就像你我的计算机上正在使用的这种一样。我们在下文中,都将“SATA磁盘控制器”理解为其狭义概念。
(1)串行磁盘控制器的工作模式
串行磁盘控制器比较灵活,不像并行磁盘控制器一般只工作在并行模式,而是可以在BIOS里将其设置为多种工作模式,根据主板BIOS的不同,名称可能有所差别,并行工作模式有:IDE、ATA、PATA等,串行工作模式有:SATA、RAID、AHCI等。
很多二线厂或者通路商主板上的串行磁盘控制器都默认为并行工作模式,这会折损部分磁盘工作效能,但是却提高了兼容性;很多一线大厂则都是将串行磁盘控制器默认为串行工作模式,这样可以发挥磁盘的最高工作效能。
所以,请记住,串行磁盘控制器可以在并行与串行两种工作模式间进行调换,而非只工作在串行工作模式。
(2)串行磁盘控制器的接口
这好像是个白痴话题,串行磁盘控制器的接口肯定是串口(SATA接口),大多数人这么认为,当然,也包括之前的我。好吧,我们暂且排除有SCSI的特殊接口的串口,只说说我们常见的。
大多数,应该是绝大多数的情况下,串行磁盘控制器的接口是串口。不过,在某些集成了第三方磁盘控制器的主板上,例如有一块945P的主板上集成了ITE的串行磁盘控制器,它的ITE串行磁盘控制器不仅提供用于组建RAID的SATA接口,同时也提供了组建RAID的IDE接口。所以,IDE磁盘也是有可能工作在串行模式下的,绝非IDE磁盘一定工作在并行模式下。
综上,我们可以不通过磁盘类型来看问题,也就是说,在今后研究磁盘控制器驱动时我们看到的只有磁盘控制器,至于磁盘是什么样子、什么接口,只是一个可用的参照而已,不是我们主要要观察的东西。
二、磁盘控制器驱动集成原理
磁盘控制器驱动的集成方法是由微软提供的,当然不排除很多高人不用这个方法,但是似乎他们都挺喜欢自娱自乐,所以具体这些高人的方法是什么我们不得而知,那么我们这些菜鸟们还是专心跟着盖茨走,看看微软提供了什么样的集成磁盘控制器驱动的方法。
为了便于理解,我只讲最核心的方法,如果您对此有极高的兴趣,建议您阅读微软在XP原版光盘中自带的Deploy.chm中的相关内容。
微软提供了这样一种方法,即在Sysprep.inf中添加SysprepMassStorage段,SysprepMassStorage段下内容的写法是:
硬件ID=硬件驱动Inf文件路径
例如:
pci\ven_10de&dev_0055&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
pci\ven_10de&dev_0054&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
pci\ven_10de&dev_0267&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
pci\ven_10de&dev_0266&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
pci\ven_10de&dev_037f&cc_0101=D:\Skyfree_MassStorage\M\MCP55\nvata.inf
pci\ven_10de&dev_0055&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
pci\ven_10de&dev_0054&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
pci\ven_10de&dev_0267&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
pci\ven_10de&dev_0266&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
pci\ven_10de&dev_037f&cc_0104=D:\Skyfree_MassStorage\M\MCP55\nvraid.inf
其中像“pci\ven_10de&dev_0267&cc_0101”这类就是硬件ID,硬件ID是每一类硬件专用的唯一的编号,注意,是每一类不是每一个。
而像“D:\Skyfree_MassStorage\M\MCP55\nvata.inf”就是包含这个硬件ID的驱动INF所在的位置了。
好的,按照微软的说法,只要我们在Sysprep.inf里写对了SysprepMassStorage段的列表(以下我们称为Device-InfPath列表),然后运行Sysprep.exe进行封装就可以了。这时,在运行Sysprep.exe封装时,Sysprep会根据MassStoragel列表的内容,逐一将磁盘控制器驱动文件复制到当前系统中,并创建相应的注册表项目。
微软的这个方法具有绝对的权威性,以及相对较高的稳定性,不过读到这里您应该有很多疑问了,诸如Device-InfPath列表怎么生成等等,别着急,更详细的内容我会在下一章具体介绍。
下一页 (1/2)
回帖(6):
6 # z3960
04-02 08:07
不错 学习了谢谢分享
5 # z3960
04-02 08:06
进来看一看教程
4 # 霸王硬上弓
12-21 20:01
其他要注意的问题:
1、搜集驱动前最好卸载所有当前硬件设备驱动,以免在监控搜集磁盘控制器 ..
3 # 霸王硬上弓
12-21 20:01
第四章、磁盘控制器驱动的集成与提取
无论您使用的什么方法,现在应该已经有一份很长很长的D ..
2 # 霸王硬上弓
12-21 20:00
第三章、自动生成磁盘控制器驱动列表
希望您不是按照第二章里的内容做完后才开始看第三章的 ..
1 # 霸王硬上弓
12-21 20:00
第二章、手动生成磁盘控制器驱动列表
一、要有驱动
简单不过的道理,如果我们要向当前 ..

全部回帖(6)»
最新回帖
收藏本帖
发新帖