新闻  |   论坛  |   博客  |   在线研讨会
SATA AHCI SCSI 驱动的集成
bg6iam | 2010-08-15 16:55:12    阅读:7846   发布文章

 

下面来阐述一下如何把 第三方大容量存储(SATA SCSI RAID AHCI)驱动 完美的整合在XP的安装盘上

一 准备过程

我们想集成驱动 首先第一步就是要准备好对应的驱动去硬件官方网站或者驱动之家 下载回硬件对应的驱动解压了以后 一般会在驱动目录中发现txtsetup.oem文件 

这个文件记录着该版本的驱动所支持的硬件的很多信息 我们只需要找到它是怎样加载驱动的相关信息即可

[Config.iaStor]

;#############################################################################

; iaAHCI.inf

[HardwareIds.scsi.iaAHCI_ESB2]

id = "PCI\VEN_8086&DEV_2681&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH7RDH]

id = "PCI\VEN_8086&DEV_27C1&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH7MMDH]

id = "PCI\VEN_8086&DEV_27C5&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH8RDHDO]

id = "PCI\VEN_8086&DEV_2821&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH8MEM]

id = "PCI\VEN_8086&DEV_2829&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH9RDODH]

id = "PCI\VEN_8086&DEV_2922&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH9MEM]

id = "PCI\VEN_8086&DEV_2929&CC_0106","iaStor"

[HardwareIds.scsi.iaAHCI_ICH10R]

id = "PCI\VEN_8086&DEV_3A22&CC_0106","iaStor"

[HardwareIds.scsi.iaStor_ESB2]

id = "PCI\VEN_8086&DEV_2682&CC_0104","iaStor"

[HardwareIds.scsi.iaStor_ICH7RDH]

id = "PCI\VEN_8086&DEV_27C3&CC_0104","iaStor"

[HardwareIds.scsi.iaStor_ICH7MDH]

id = "PCI\VEN_8086&DEV_27C6&CC_0104","iaStor"

[HardwareIds.scsi.iaStor_ICH8RICH9RICH10RDO]

id = "PCI\VEN_8086&DEV_2822&CC_0104","iaStor"

[HardwareIds.scsi.iaStor_ICH8MEICH9ME]

id = "PCI\VEN_8086&DEV_282A&CC_0104","iaStor"

;#############################################################################

[scsi]

; iaAHCI.inf

iaAHCI_ESB2          = "Intel(R) ESB2 SATA AHCI Controller"

iaAHCI_ICH7RDH        = "Intel(R) ICH7R/DH SATA AHCI Controller"

iaAHCI_ICH7MMDH        = "Intel(R) ICH7M/MDH SATA AHCI Controller"

iaAHCI_ICH8RDHDO      = "Intel(R) ICH8R/DH/DO SATA AHCI Controller"

iaAHCI_ICH8MEM        = "Intel(R) ICH8M-E/M SATA AHCI Controller"

iaAHCI_ICH9RDODH      = "Intel(R) ICH9R/DO/DH SATA AHCI Controller"

iaAHCI_ICH9MEM        = "Intel(R) ICH9M-E/M SATA AHCI Controller"

iaAHCI_ICH10R        = "Intel(R) ICH10R SATA AHCI Controller"

; iaStor.inf

iaStor_ESB2          = "Intel(R) ESB2 SATA RAID Controller"

iaStor_ICH7RDH        = "Intel(R) ICH7R/DH SATA RAID Controller"

iaStor_ICH7MDH        = "Intel(R) ICH7MDH SATA RAID Controller"

iaStor_ICH8RICH9RICH10RDO = "Intel(R) ICH8R/ICH9R/ICH10R/DO SATA RAID Controller"

iaStor_ICH8MEICH9ME    = "Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller"

;#############################################################################

[Files.scsi.iaAHCI_ESB2]

driver = disk1, iaStor.sys, iaStor

我们只需要把上面的信息添加到 系统光盘的txtsetup.sif内就可以在系统txtmode方式找到硬盘的硬件信息

下面说明一下 关于集成SRS驱动需要修改的几个关键文件

TXTSETUP.SIF --------------txtmode方式复制系统文件的主要文件  

DOSNET.INF   -------------如果想硬盘DOS下安装系统 这个文件也要修改

HIVESFT.INF   ------------在此文件内定义驱动搜索路径 在后续的PNP驱动集成会说明|

这三个文件存在于 系统盘 I386目录内

----------------------------------------------------------------------------------------------------------------------------------

二添加文件的支持

txtsetup.sif

到了说明此文件的时候了 我们想添加自己的驱动来使系统能识别自己的设备来完成安装 需要在此文件内添加对应的脚本才可以 下面来认识几个关键字段的作用

[SourceDisksNames.x86] ----------------(定义文件的来源)

[WinntDirectories]        ----------------(定义文件的复制目标)

[SourceDisksFiles.x86]  -------------(待复制的文件列表 语法按照[SourceDisksNames.x86] 定义)

[HardwareIdsDatabase]   ----------------(通过识别硬件的PID来识别 并赋予一个变量)

[SCSI.load]   ---------([HardwareIdsDatabase]识别出了硬件 加载对应的驱动文件)

[SCSI]        ---------(HardwareIdsDatabase]识别出了硬件  给该设备命名)

参照上面的txtsetup.oem文件

我们可以开始添加了 下面的是一个我写的intel的例子

[SourceDisksFiles.x86]

iaStor.sys    = 1,,,,,,4_,4,1,,,1,4

[HardwareIdsDatabase]

; iaAHCI.inf

PCI\VEN_8086&DEV_2681&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_27C1&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_27C5&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_2821&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_2829&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_2922&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_2929&CC_0106 = "iaStor"

PCI\VEN_8086&DEV_3A22&CC_0106 = "iaStor"

; iaStor.inf

PCI\VEN_8086&DEV_2682&CC_0104 = "iaStor"

PCI\VEN_8086&DEV_27C3&CC_0104 = "iaStor"

PCI\VEN_8086&DEV_27C6&CC_0104 = "iaStor"

PCI\VEN_8086&DEV_2822&CC_0104 = "iaStor"

PCI\VEN_8086&DEV_282A&CC_0104 = "iaStor"

[SCSI.load]

iaStor        = iaStor.sys,4

[SCSI]

; iaAHCI.inf

iaStor      = "Intel(R) ESB2 SATA AHCI Controller"

iaStor      = "Intel(R) ICH7R/DH SATA AHCI Controller"

iaStor      = "Intel(R) ICH7M/MDH SATA AHCI Controller"

iaStor      = "Intel(R) ICH8R/DH/DO SATA AHCI Controller"

iaStor      = "Intel(R) ICH8M-E/M SATA AHCI Controller"

iaStor      = "Intel(R) ICH9R/DO/DH SATA AHCI Controller"

iaStor      = "Intel(R) ICH9M-E/M AHCI Controller by BlueSky"

iaStor      = "Intel(R) ICH10R SATA AHCI Controller"

; iaStor.inf

iaStor      = "Intel(R) ESB2 SATA RAID Controller"

iaStor      = "Intel(R) ICH7R/DH SATA RAID Controller"

iaStor      = "Intel(R) ICH7MDH SATA RAID Controller"

iaStor      = "Intel(R) ICH8R/ICH9R/ICH10R SATA RAID Controller"

iaStor      = "Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller"

dosnet.inf

此文件支持的是在硬盘安装系统的时候 文件能够得到正确复制

[Directories]   ---------------源路径的说明

[OptionalSrcDirs]   ----------其他路径的说明 如不在此说明 添加的目录不会得到复制

[FloppyFiles.1]

[Files]               ------------这2个不用多解释了 文件的复制列表

下面开始添加

[FloppyFiles.1]

d1,iaStor.sys

[Files]

d1,iaStor.sys

最后把iaStor.sys压缩以后复制到i386内 至此驱动集成完毕 光盘安装&硬盘安装 皆可

三 PNP驱动的集成

看完了上面的资料 肯定很多人会问了 txtmode方式通过之后 系统安装完毕我们的设备是否就驱动上了呢?

蓝天的回答是:未驱动上。 上面的做法只是只是让windows在安装初期认出了硬盘 并执行后面的操作,

进了系统之后 该硬件的PNP驱动还是未添加的 这就如同您的其他硬件 显卡 声卡一样需要再手动安装驱动.

有没方法直接能驱动上呢??回答是: 可以

PNP驱动集成的关键文件在于驱动文件 inf文件的路径指定 这个路径指定就在hivesft.inf,

在文件内搜索"DevicePath"可以看到系统默认的搜索路径是%SystemRoot%\inf ,

我们只要增加一个路径并把文件对应复制过去就可以实现PNP驱动的识别了,

(当然,把文件都复制到默认的路径%SystemRoot%\inf 而不去修改hivesift.inf也可以实现 ,但是我们如果集成了大量的SRS驱动,会把inf目录搞的很庞大无序,我们可以分别复制驱动文件到对应路径.

下面是修改的例子 还是intel的例子

txtsetup.sif

[SourceDisksNames.x86]    字段最后一行插入 

1900= %cdname%,%cdtagfilei%,,"\i386\satadrv\intel"

[WinntDirectories]   定义SATA驱动程序文件的复制目标

1900= "satadrv\intel"

[SourceDisksFiles.x86]   字段最后一行添加

iaStor.sys    = 1,,,,,,4_,4,1,,,1,4(文本模式所需驱动这个文件对应复制到母盘的i386内)

iastor.sys = 1900,,,,,,,1900,0,0(PNP驱动 这些都复制到satadrv\intel内)

iaStor.inf = 1900,,,,,,,1900,0,0

iaAHCI.inf = 1900,,,,,,,1900,0,0

iaStor.cat = 1900,,,,,,,1900,0,0

iaAHCI.cat = 1900,,,,,,,1900,0,0

[HardwareIdsDatabase]

[SCSI.load]

[SCSI]                      这三个不需要再改了 上面的例子已经添加完毕

dosnet.inf

[Directories]

d5 = "\i386\satadrv\intel"

[OptionalSrcDirs]

Satadrv

[FloppyFiles.1]

d1,iaStor.sys

[Files]

d1,iaStor.sys

d5,iastor.sys

d5,iaStor.inf

d5,iaAHCI.inf

d5,iaStor.cat

d5,iaAHCI.cat

修改HIVEDEF.INF文件,查找“[AddReg]”字段,在“[AddReg]”范围的最后,添加

HKCU,"SOFTWARE\Policies\Microsoft\Windows NT\Driver Signing","BehaviorOnFailedVerify",0x00010001,0 HKCU,"SOFTWARE\Policies\Microsoft\Windows NT\Driver Signing",,0x00000012

编辑HIVESFT.INF

添加

HKLM,"SOFTWARE\Microsoft\Driver Signing","Policy",0x00000001,0

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath",0x00020002,"%SystemRoot%\inf"

改为HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath",0x00020002,"%SystemRoot%\satadrv\intel;%SystemRoot%\inf"

修改HIVESYS.INF文件,查找

HKLM,"SOFTWARE\Microsoft\Ole\AppCompat\ActivationSecurityCheckExemptionList","{2A6D72F1-6E7E-4702-B99C-E40D3DED33C3}",0x2,"1"

在其之后插入两行

HKLM,"SYSTEM\CurrentControlSet\Services\iaStor\Parameters",,0x00000012 HKLM,"SYSTEM\CurrentControlSet\Services\iaStor\Parameters\PnpInterface","5",0x00010003,1

最后是修改SETUPREG.HIV文件

打开注册表编辑器,选中“HKEY_LOCAL_MACHINE”项(或者“HKEY_USERS”项也可以),点击“文件”→“加载配置单元”,打开“D:\XPCD\I386\SETUPREG.HIV”文件,在弹出的“项名称”处随便输入一个名称,例如“setupreg”。这时会在“HKEY_LOCAL_MACHINE”项下面出现setupreg子项。依次点开“setupreg”→“ControlSet001”→“Services”,在“Services”下依次新建子项“iaStor”→“Parameters”→“PnpInterface”,在“PnpInterface”项右边的窗口新建DWORD值,数值名称设为“5”,数值数据为“1”。然后选中setupreg项使其高亮,点击“文件”→“卸载配置单元”。此时SETUPREG.HIV文件已经被修改,不过还需要做一些善后工作。注册表编辑器会在SETUPREG.HIV的同目录下生成一个SETUPREG.HIV.LOG文件,用于记载操作信息,将其删除即可。

不管是从硬盘安装还是从光盘安装,都要做这一步。

然后开始操作

iaStor.sys压缩iaStor.sy_ 并复制到i386

i386下创建satadrv目录 然后在satadrv目录下创建intel目录

iastor.sys

iaStor.inf

iaAHCI.inf

iaStor.cat

iaAHCI.cat 复制到i386\satadrv\intel

至此txtmode和 PNP模式驱动集成完毕

看了LSDN写的那篇文章 是在winnt.sif内添加指定搜索的inf文件

[Data]

MSDosInitiated=0

UnattendedInstall=Yes

OemDrivers=OemInfFiles

[OemInfFiles]

OemDriverFlags=1

OemDriverPathName="%systemroot%\inf"

OemInfName="iaahci.inf","iastor.inf"

这样做似乎也可以... 但是在txtsetup.sif内你是怎么写的呢

[SourceDisksFiles]

iaStor.cat  = 1,,,,,,,20,0,0

iaStor.inf  = 1,,,,,,,20,0,0

iaAHCI.cat  = 1,,,,,,,20,0,0

iaAHCI.inf  = 1,,,,,,,20,0,0

iaStor.sys  = 1,,,,,,4_,4,1,,,1,4

这样sys和inf不在一个路径下面,inf找不到驱动文件的,细心的看一下inf怎么找sys文件的就清楚了

-------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------

四 微软的比较另类的方法

这是不久前测试的 也是一种免软驱的方法 缺点是不支持多个设备的驱动集成 和 只支持硬盘安装一种方式

优点是改动文件较少 

经过和秋天的测试与讨论 暂时得到目前的结果:

1.此方法XP下完美通过

intel官方的说明是支持这些系统

Windows* 2000, Windows* XP Professional, Windows* XP Home Edition, Windows Server* 2003

2.只能集成单一设备驱动

3.TEXTMODE下带子目录的方式测试失败 正在研究Txtsetup.oem的语法

4.有待测试多设备驱动的同时支持

5.微软说不支持光盘启动安装 我们也只是做的硬盘下的dos安装 没去刻盘测试 结果未知

================以下是微软官方说明=================

文介绍如何在 Microsoft Windows Server 2003 操作系统上预安装第三方大量存储驱动程序。本文假设第三方提供的驱动程序使用 Txtsetup.oem 方法进行安装。

注意:在从 CD 启动进行安装时,无法将该过程与 Winnt.sif 文件结合使用。

文章摘自 :微软中国官方支持中心

安装第三方大量存储驱动程序以下示例假设您使用分发文件夹预安装驱动程序,并且您已经创建了分发文件夹。 

如果分发文件夹下没有 $OEM$ 文件夹,请创建该文件夹。例如: X:\I386\$OEM$ 

在 $OEM$ 文件夹下创建一个名为 TEXTMODE 的文件夹。例如: X:\I386\$OEM$\TEXTMODE 

将第三方大量存储驱动程序文件复制到该文件夹。这些文件通常包括一个 Txtsetup.oem 文件,并且至少包括一个驱动程序文件(.sys 文件)。将所有这些文件复制到 TEXTMODE 文件夹中。 

使用文本编辑器(如记事本)编辑 X:\I386\$OEM$\Textmode\Txtsetup.oem 文件。 

使用以下代码配置 Txtsetup.oem 文件: [Disks]d1 = "Windows 2003 Driver Set v1.00", w23dsk1, \

注意第二行结尾的反斜线字符。 

保存文件。 

使用文本编辑器(如记事本)编辑要用于执行无人参与安装的 Unattend.txt 文件。 

创建下面一节: 

[MassStorageDrivers]

"string that identifies the controller in the [scsi] section of TXTSETUP.OEM" = "OEM"

例如: 

[MassStorageDrivers]

"Adaptec Ultra160 Family PCI SCSI Controller (29160)" = "OEM"

注意:如果还要在具有 IDE 控制器(使用内置驱动程序,即 Windows 附带的驱动程序启动)的计算机上使用该同一无人参与文件,请将以下代码行添加到 [MassStorageDrivers] 节中: "IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller" = "RETAIL"

如果不添加此代码,在安装过程的文本模式部分,您可能会收到“Inaccessible Boot Device”Stop 错误消息。 

在 Unattend.txt 文件中,创建 [OEMBootFiles] 一节,并列出之前复制到 Textmode 文件夹中的文件。这通常包括一个 .inf 文件,一个 .sys 文件,对于 Windows 2003,还包括一个 .cat 文件。例如: 

[OEMBootFiles]

Driver.Sys

Driver.INF

Driver.CAT

Txtsetup.oem 

确保 OemPreinstall=Yes 位于无人参与文件的 [Unattended] 节中。否则,安装程序无法识别该驱动程序。

-------------------------------------------------------实例

Unattend.txt

[Unattended]

  OemPreinstall="Yes"

  DriverSigningPolicy=Ignore

  NonDriverSigningPolicy=Ignore

[MassStorageDrivers]

; iaAHCI.inf

"Intel(R) ESB2 SATA AHCI Controller" = "OEM"

"Intel(R) ICH7R/DH SATA AHCI Controller" = "OEM"

"Intel(R) ICH7M/MDH SATA AHCI Controller" = "OEM"

"Intel(R) ICH8R/DH/DO SATA AHCI Controller" = "OEM"

"Intel(R) ICH8M-E/M SATA AHCI Controller" = "OEM"

"Intel(R) ICH9R/DO/DH SATA AHCI Controller" = "OEM"

"Intel(R) ICH9M-E/M SATA AHCI Controller" = "OEM"

"Intel(R) ICH10D/DO SATA AHCI Controller" = "OEM"

"Intel(R) ICH10R SATA AHCI Controller" = "OEM"

; iaStor.inf

"Intel(R) ESB2 SATA RAID Controller" = "OEM"

"Intel(R) ICH7R/DH SATA RAID Controller" = "OEM"

"Intel(R) ICH7MDH SATA RAID Controller" = "OEM"

"Intel(R) ICH8R/ICH9R/ICH10R/DO SATA RAID Controller" = "OEM"

"Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller" = "OEM"

"IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller" = "RETAIL"

[OEMBootFiles] 

iaAHCI.cat

iaAHCI.inf

iaStor.cat

iaStor.inf

IaStor.sys

TXTSETUP.OEM

winnt.bat

@echo off

.\smartdrv.exe

.\smartdrv.exe

.\i386\winnt /s:.\i386 /u:.\i386\UNATTEND.TXT

把驱动文件放到指定位置

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客