20070906

Windows XP SP2集成SATA驱动的改进方法

Author:  WinkCategories:  WindowsNo Comments »
  • 作者:Wink@Lynn Studio
  • 原创文章,转载请注明作者和出处。

之前曾经研究过如何在Windows XP SP2光盘中集成SATA驱动,并总结出来为文档留待以后参考。但是这个方法一直感觉并非完美,因为需要单独创建一个目录存放SATA驱动,而且涉及的文件较多,步骤过于繁琐。于是借着近日新入手ThinkPad T60的机会,重新总结了一下集成SATA驱动的方法,成果还是比较不错的

前期准备

文件的准备还是参考和之前的这篇“制作集成SATA驱动的Windows XP安装光盘”文章中所要求的一样。

首先了解一下相关的基本知识。

Windows XP安装分为Text Mode和GUI Mode两个步骤。

Text Mode

GUI Mode

TXTSETUP.SIF文件左右了Text Mode步骤可以使用的设备,但仅仅是提供驱动支持,无法发挥设备的全部性能。而在Text Mode末尾会将所需的基本驱动复制到硬盘上,以便GUI Mode的继续进行。所以修改该文件,可以使原本在Windows XP安装时因无驱动而无法识别的设备获得支持。

DOSNET.INF是为DOS环境以及Windows环境安装准备的。如果只是需要Windows安装光盘启动安装,可以忽略修改该文件。理论上讲,TXTSETUP.SIF和DOSNET.INF中的文件应是一一对应。

但是以上两个文件并非真正安装了驱动。安装结束进入系统后,便失去了因修改这两个文件而增加的设备支持。需要修改WINNT.SIF(安装应答文件)并相应地添加驱动文件至安装光盘中。

TXTSETUP.SIF相关说明

[SourceDisksNames.x86]

[SourceDisksNames.x86]预定义了后面需要使用的源文件位置。其中

1_  = %bootname1%,"%boottagfile1%",,""

笔者猜测,类似带下划线的编号可能意指利用makeboot或者makebt32生成的虚拟启动软盘组中的软盘编号(实际制作Windows XP的启动软盘就需要六张软盘),即该文件处于启动软盘组中的第几张之中,与文件末尾的[Strings]段对应。

[Strings]
cdname = "Windows XP Professional CD-ROM"
productname = "Windows XP Professional"
bootname1    = "Windows XP Professional SP2 Setup Boot Disk"
bootname2    = "Windows XP Professional SP2 Setup Disk #2"
bootname3    = "Windows XP Professional SP2 Setup Disk #3"
bootname4    = "Windows XP Professional SP2 Setup Disk #4"
bootname5    = "Windows XP Professional SP2 Setup Disk #5"
bootname6    = "Windows XP Professional SP2 Setup Disk #6"
cdtagfile   = "\win51ip"
cdtagfilei   = "\win51ip"
cdtagfilem   = "\win51mp"
boottagfile1   = "\disk101"
boottagfile2   = "\disk102"
boottagfile3   = "\disk103"
boottagfile4   = "\disk104"
boottagfile5   = "\disk105"
boottagfile6   = "\disk106"
spcdname = "Windows XP Professional Service Pack 2 CD"
spcdtagfilei   = "\win51ip.sp2"
cd2name = "Windows XP Professional CD2"
cd2tagfilei = "\win51ip2"

而“1_”又意味着文件被压缩,相反地,“_1”代表文件未被压缩,还没有找到确切的官方文档肯定这个说法。

[WinntDirectories]

[WinntDirectories]预定义了目标文件位置,默认的根目录为“WINDOWS\”。也就是说,

1 = "\"

代表着“WINDOWS”目录。

[SourceDisksFiles]

[SourceDisksFiles]段是重头戏,描述从源文件位置复制到目标位置的文件列表。具体的说明如下,一些地方还暂时无法咬准确切意义,不过,这不影响接下来的工作。

TXTSETUP Structure

DOSNET.INI相关说明

[Directories]

[Directories]和TXTSETUP.SIF中的[SourceDisksNames.x86]含义大致相同,也是预定义了后面需要使用的源文件位置。

[Files]

[Files]中列出需要从源文件位置复制的文件列表。前面说过TXTSETUP.SIF和DOSNET.INF中的文件应是一一对应,所以TXTSETUP.SIF中新增的文件,也需要在DOSNET.INI中相应添加。

TXTSETUP.OEM文件

在各个芯片厂商提供的SATA驱动中,都会提供TXTSETUP.OEM文件。关于TXTSETUP.OEM的详细说明,请参考Microsoft的“The txtsetup.oem File Format”文档。

以Intel Matrix Storage Manager提供的TXTSETUP.OEM文件举例,在后面的工作中,需要用到类似于下面的设备说明。

[HardwareIds.scsi.iaAHCI_ICH9R]
id = "PCI\VEN_8086&DEV_2922&CC_0106","iaStor"
[HardwareIds.scsi.iaStor_ICH8M]
id = "PCI\VEN_8086&DEV_282A&CC_0104","iaStor"
[HardwareIds.scsi.iaAHCI_ICH8M]
id = "PCI\VEN_8086&DEV_2829&CC_0106","iaStor"
[HardwareIds.scsi.iaStor_ICH8R]
id = "PCI\VEN_8086&DEV_2822&CC_0104","iaStor"
[HardwareIds.scsi.iaAHCI_ICH8R]
id = "PCI\VEN_8086&DEV_2821&CC_0106","iaStor"
……

这里需要根据自己主板的南桥芯片硬件ID来判断使用哪一句代码,可以在系统中通过查看“设备管理器”的该设备属性详细信息中的硬件ID得到。例如笔者的ThinkPad T60笔记本是迅驰三平台,使用

[HardwareIds.scsi.iaAHCI_ICH7M]
id = "PCI\VEN_8086&DEV_27C5&CC_0106","iaStor"

这行代码。另外,在TXTSETUP.OEM文件中还有类似于

iaAHCI_ICH7M = "Intel(R) 82801GBM SATA AHCI Controller (Mobile  ICH7M/DH)"

的设备名称也是我们需要的。

实际操作,为迅驰三主板添加SATA驱动支持。

打开“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

[HardwareIdsDatabase]
PCI\VEN_8086&DEV_27C5&CC_0106 = "iaStor"

[SCSI.Load]
iaStor = iaStor.sys,4

[SCSI]
iaStor = "Intel(R) 82801GBM SATA AHCI Controller (Mobile ICH7M)"

这些代码通过前面的知识准备已经不难理解,iaStor.cat等五个文件是从Intel Matrix Storage Manager中得到的。另外,前面也说过“[HardwareIdsDatabase]”和“[SCSI]”段中需要按照自己的实际情况在TXTSETUP.OEM文件挑选使用。“[HardwareIdsDatabase]”中是将TXTSETUP.OEM文件中的“[HardwareIds.scsi.*****]”内容形式稍加改变而已。

接下来是编辑DOSNET.INI文件:

[FloppyFiles.1]
d1,iastor.sys

[Files]
d1,iaAHCI.inf
d1,iaAHCI.cat
d1,iaStor.cat
d1,iaStor.inf
d1,iaStor.sys

然后是修改WINNT.SIF文件,关于如何创建应答文件,网上资料很多,笔者不做赘述,使用Windows XP Service Pack 2部署工具即可,这里只是列出和集成SATA驱动相关需要添加的语句:

[Data]
MSDosInitiated=0
UnattendedInstall=Yes
OemDrivers=OemInfFiles

[OemInfFiles]
OemDriverFlags=1
OemDriverPathName="%systemroot%\inf"
OemInfName="iaahci.inf","iastor.inf"

最后将Intel Matrix Storage Manager(F6flpy32)中的五个文件iaahci.cat、iaahci.inf、iastor.cat、iastor.inf、iastor.sys复制至I386目录下,注意,不需要使用makecab命令压缩。再用UltraISO等光盘工具封装为Windows XP安装光盘即可。

实际操作二:AMD 690G芯片SATA驱动的集成。

方法和上面基本相同,只是驱动文件的区别而已。还是一样,实际需要根据自己主板芯片的硬件ID和芯片厂商提供的驱动文件判断集成。(以笔者手里的资源,精英AMD690GM-M2的SATA控制器硬件ID是“PCI\VEN_1002&DEV_4380&SUBSYS_43821019”,映泰TA690G的SATA控制器硬件ID是“PCI\VEN_1002&DEV_4380&SUBSYS_43821002”,这里以精英AMD690GM-M2为例。另外,映泰TA690G的BIOS中开启AHCI的选项是“IDE→AHCI”,不知是否还有什么特殊的意义。)

TXTSETUP.SIF修改:

[SourceDisksFiles]
ahci8086.cat = 1,,,,,,,20,0,0
ahci8086.inf = 1,,,,,,,20,0,0
ahci8086.sys = 1,,,,,,4_,4,1,,,1,4

[HardwareIdsDatabase]
PCI\VEN_1002&DEV_4380&SUBSYS_43821019 = "ahci8086"

[SCSI.Load]
ahci8086 = ahci8086.sys,4

[SCSI]
ahci8086 = "ATI AHCI Compatible RAID Controller-x86 platform"

DOSNET.INF文件修改:

[FloppyFiles.1]
d1,ahci8086.sys

[Files]
d1,ahci8086.inf
d1,ahci8086.cat
d1,ahci8086.sys

WINNT.SIF文件基本一样,在上面案例的基础上修改为:

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

当然,如果仅仅想集成690G的SATA驱动,就只需写成

OemInfName = "ahci8086.inf"

You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.

Comments are closed.

Back to Page Top