您的位置:首页 > 其它

如何为系统盘集成SATA驱动

2008-08-06 12:32 369 查看
2004年之后销售的南桥原生SATA的主板基本上都有所谓的SATA映射IDE的功能选项,因此可以免掉软驱(但是这些主板一样有SATA
RAID工作模式,只是一般默认为IDE模式罢了);但是对于早期的一些主板,例如8237南桥的主板,其SATA接口的工作方式只有RAID模式没有
IDE模式,这样在安装系统的时候必须要通过软驱加载SATA
RAID驱动以便继续安装系统。值得注意的是:尽管nLite这个软件也可以在系统中集成SATA驱动,但是可能由于其他的一些原因,在安装过程中并不能
够正确的加载SATA RAID驱动,所以最好还是手动集成SATA RAID驱动。下文就是说如何在系统中集成SATA
RAID驱动来免掉软驱加载的。

为了不再让WinXP的安装过程需要通过软盘加载SATA驱动程序,很多人都梦想主板的SATA驱动程序集成到安装光盘中,本文就来DIY一张集成SATA驱动程序的WindowsXP安装光盘!(Windows2000集成SATA的方法与XP完全一致)

这里我们以Si3112的SATA驱动程序为例进行介绍。其它类型的SATA驱动程序的集成步骤几乎完全相同,所不同的仅仅是驱动程序文件名的不同而已

把一张完好的Windows XP安装光盘放入光驱,在资源管理器中将光盘中的文件全部选定,再复制到“D:/XPSATA”目录中。

1、准备驱动程序文件

  一般随主板附送的驱动程序安装光盘中都有SATA的驱动程序。打开光盘目录,寻找名称中含有“SATA”或“RAID”字符的文件夹;也可在主板制造
商的网站或其它驱动程序下载站点(如:驱动之家“http://www.mydrivers.com”等)寻找与自己的主板芯片组相匹配的SATA驱动程
序。

这里我们可以使用Windows
XP本身附带的一个命令行工具“makecab.exe”(2000下也有),它位于“C:/WINDOWS/System32/”目录下。由于
“System32”是默认的搜索路径,因此使用时不需要程序所在的路径。在开始菜单中打开“运行”对话框,输入如下命令:

“MAKECAB D:/SATADRV/SI3112.SYS D:/STATADRV/i386/SI3112.SY_”。

  在D盘中建立一个新的目录(如“SATADRV”),然后将找到的SATA驱动程序,将除sys文件以外的驱动文件全部拷贝到这个目录中(有一些人为
了保险可能也将.sys驱动文件也拷贝到这个文件夹下,这样做也是可以的)D:/SATADRV,将上面转换得到的sy_文件也一并拷贝到这个目录中,同
时将转换得到的sy_文件复制一份到i386文件夹的根目录下面,(这一步不可缺!否则在文本模式下会提示加载不到SI3112.SYS驱动文件)在这个
“D:/SATADRV”的文件夹中,一定会有一个扩展名为“.inf”或“.oem”的小文件,如“oemsetup.inf”或者
“txtsetup.oem”等(本例中为“txtsetup.oem”),用记事本程序打开它,随后要用!然后建立一个名为$OEM$的文件夹,其下建
立一个名为$1的子文件夹,将SATADRV这个文件夹移动到$1根目录下;最后将$OEM$文件夹添加到系统安装光盘的根目录下。

2、编辑“txtsetup.sif”文件

  打开“D:/XPSATA/I386”文件夹,找到一个名为“txtsetup.sif” 的文件,这是Windows XP在安装时加载驱动程序的信息文件,用记事本程序打开它。

  按“Ctrl+F”快捷键,打开查找对话框,以“[SourceDisksFiles]”为关键字进行查找。找到这个字段后,其下面已经存在一些内
容。翻页到这个字段的末尾(注意:不是整个文件内容的末尾,一定要添加在该字段的末尾,并且最好要空一行,否则在加载完毕SATA
RAID驱动后还是会提示内置驱动程序安装出错),添加以下内容:“si3112.sys = 1,,,,,,4_,4,1,,,1,4”。

例如(注:这里的驱动是VIA的):

[SourceDisksFiles]

……

raiderpd.ini = 1,,,,,,,,3,3

sv2511.png = 1,,,,,,,,3,3

sv2512.png = 1,,,,,,,,3,3

sv-262e1.png = 1,,,,,,,,3,3

sv-262e3.png = 1,,,,,,,,3,3

sv-262e4.png = 1,,,,,,,,3,3

viamraid.sys = 1,,,,,,4_,4,1,,,1,4

[SourceDisksFiles.ia64]

agp460.sys = 1,,,,,,,4,1

……

这里的“si3112.sys =
1,,,,,,4_,4,1,,,1,4”是描述驱动程序所在位置的代码。代码的格式为
“filename_on_source=diskid,subdir,upgradecode,newinstallcode,spare,spare,newfilename”,
在“txtsetup.sif”文件中的“[SourceDisksNames]”和“[WinntDirectories]”等字段中有详细的描述。有
兴趣的朋友可以深入研究其它目录的对应关系,这里仅简单介绍。

在实际操作时,绝对不可以照搬代码!特别是扩展名为SYS的文件“si3112.sys”,它是SATA驱动程序目录“SATADRV”中的驱动程序文件
名,如果读者的SATA驱动程序与本文所述的不同,则只需换成目录中相应的文件即可。(尽管如此,在XP与2K下的.sys文件位置都是
1,,,,,,4_,4,1,,,1,4,所以对于不同的SATA驱动文件,只需要更改前面的文件名即可,即:*.sys =
1,,,,,,4_,4,1,,,1,4;切换到前面打开的“txtsetup.oem”文件,以“[HardwareIds.”为关键字进行搜索,应该
可以找到类似“[HardwareIds.SICS.Si3112]”的字段。该字段下的代码

如:“ id ="PCI/VEN_1095&DEV_3112 &SUBSYS_31121095", "Si3112" ”。

切换到刚才打开的“txtsetup.sif”文件窗口中,以“[HardwareIdsDatabase]”为关键字进行搜索。找到后,将
“txtsetup.oem”文件中“[HardwareIds.SICS.Si3112_XP]”字段(注意这里最后的几个代码:_XP,如果是2K系
统就用相应的字段下的代码,由于XP与2000内核基本一样,因此大部分情况下两者的代码应该是一样的)下的代码拷贝到“txtsetup.sif”文件
的“[HardwareIdsDatabase]”字段末尾(注意:要求同上,一定要添加在该字段的末尾,并且最好要空一行,否则安装时会出现内置驱动程
序出错)。不过,我们需要更改一下代码的格式,如将“id = "PCI/VEN_1095&DEV
_3112&SUBSYS_31121095", "Si3112"”改为:“
PCI/VEN_1095&DEV_3112&SUBSYS_31121095 = "Si3112"
”(其他代码修改方法相同),更改后的代码如下:

PCI/VEN_1095&DEV_3112&SUBSYS_31121095 = "Si3112"

  PCI/VEN_1095&DEV_3112&SUBSYS_34238086 = "Si3112"

  PCI/VEN_1095&DEV_3112&SUBSYS_311215D9 = "Si3112"

  PCI/VEN_1095&DEV_3112&SUBSYS_B0021458 = "Si3112"

  PCI/VEN_1095&DEV_3112&SUBSYS_01661028 = "Si3112"

  PCI/VEN_1095&DEV_3112&SUBSYS_82141033 = "Si3112"

  PCI/VEN_1095&DEV_3512&SUBSYS_35121095 = "Si3112"

  PCI/VEN_1095&DEV_3512&SUBSYS_01661028 = "Si3112"

例如:(注:这里的驱动是VIA的)

[HardwareIdsDatabase]

……

PCI/VEN_8086&DEV_96A1&SUBSYS_00018086 = "i2omp"

PCI/VEN_8086&DEV_3092&SUBSYS_00018086 = "i2omp"

PCI/VEN_1106&DEV_3349 = "viamraid"

PCI/VEN_1106&DEV_0591 = "viamraid"

PCI/VEN_1106&DEV_3249 = "viamraid"

PCI/VEN_1106&DEV_3149 = "viamraid"

PCI/VEN_1106&DEV_3164 = "viamraid"

[Map.Computer]

sgiborg_mp = "*SGI-3"

sgiborg_mp = "*SGI-4"

提示

不同SATA驱动程序的代码内容各不相同,应该根据具体情况灵活处理。比如NVIDIA的RAID控制器,在其txtsetup.oem中与
[HardwareIds.相关的字段有两段:[HardwareIds.scsi.RAIDCLASS]与
[HardwareIds.scsi.BUSDRV],而且早期版本的驱动文件与后期版本的在数量上有所不同――早期的在第一段
[HardwareIds.scsi.RAIDCLASS]下只有2行代码:

id = "GenNvRaidDisk","nvraid"

id = "*_NVRAIDBUS","nvraid"

后期的驱动增加到三行:

id = "GenNvRaidDisk","nvraid"

id = "*_NVRAIDBUS","nvraid"

id = "*NVRAIDBUS","nvraid"

第二段的内容才与VIA等厂家的类似:

[HardwareIds.scsi.BUSDRV]

id = "PCI/VEN_10DE&DEV_008E", "nvatabus"

id = "PCI/VEN_10DE&DEV_0085", "nvatabus"

……

id = "PCI/VEN_10DE&DEV_0055", "nvatabus"

不管最终与此字符段相关的数量有多少,只要将与当前系统相关(Windows2000、WindowsXP或者Windows2003)的信息添加进去就可以了,以下就是说明:

类似的例子还有SiS、Uli的驱动,这里以SiS为例。SiS的txtsetup.oem文件也有多段,但是与NVIDIA不同的是――它是按系统区分的,比如:

[HardwareIds.scsi.SISRAID_SRV2003]

id="PCI/VEN_1039&DEV_0182", "SiSRaid2"

……

[HardwareIds.scsi.SISRAID_WIN32]

id="PCI/VEN_1039&DEV_0182", "SiSRaid2"

……

[HardwareIds.scsi.SISRAID_WIN64]

id="PCI/VEN_1039&DEV_0182", "SiSRaid2"

……

由于三者的id="PCI/VEN_1039&DEV_0182", "SiSRaid2"都是一样的,因此也只要添加一行即PCI/VEN_1039&DEV_0182 = "SiSRaid2"就可以了。

检查拷贝修改的内容是否与原有的内容重复,如果有,则把重复的一行删除。接着在“txtsetup.sif”文件查找“[SCSI.load]”和
“[SCSI]”字段,添加如下内容(注意:一样要添加在该字段的末尾,并且最好要空一行,否则加载SATA
RAID驱动后会出现内置驱动程序出错):

  [SCSI.load]

  si3112 = si3112.sys,4 (注:对于这里的位置代码,XP与2K也是一样的,因此对于不同的驱动程序,所要更改的一样是等号前面的驱动设备名称与等号后面的驱动文件名,最后都是以“4”结尾,格式即:驱动设备名称 = .sys,4

例如:(注:这里的设备驱动是VIA的)

[SCSI.load]

……

dac2w2k = dac2w2k.sys,4

hpt3xx = hpt3xx.sys,4

viamraid = viamraid.sys,4

[BootBusExtenders.Load]

pci = pci.sys

acpi = acpi.sys

……

  [SCSI]

  si3112 = "Silicon Image SiI 3112 SATALink Controller"
(注:此处的设备名称最好与txtsetup.oem或者*.inf设备驱动信息文件中所描述的设备名称一致。但是又有一个问题:现在很多驱动器设备厂商
都是同一个驱动文件能够对应多个不同的SATA
RAID设备――比如VIA的8237R、8251等南桥都对应viamraid名称,NVIDIA的NF3、NF4系列都对应nvatabus,那么在
[SCSI]字段中该如何定义设备名称呢?其实这个无关紧要,但最重要的是:一个设备名称只能够对应一个自定义设备名:比如已经定义了viamraid
= "VIA SATA RAID Controller",就不要再定义viamraid = "VIA RAID
Controller"或者其他什么的,这样会造成系统识别混乱。尽管可能会与*.inf中定义的设备名称有一点不符――比如根据inf信息文件的相关说
明,用8251南桥的系统本来应该识别成VIA VT8251 AHCI RAID
Controller,但是由于事先在[SCSI]字段中定义了viamraid = "VIA SATA RAID
Controller",所以最终安装完毕系统后系统只会识别[SCSI]字段中定义的设备名:viamraid = "VIA SATA RAID
Controller",不会识别inf信息文件中的设备名。这样不会影响使用。

例如:(注:这里的设备驱动是VIA的)

[SCSI]

……

perc2 = "Dell PERC 2/3 RAID Controller"

perc2gat = "Dell PERC 2/3 RAID Controller (Gatling)"

viamraid = "VIA SATA RAID Controller"

[BootBusExtenders]

pci = "PCI Bus Driver",files.pci,pci

acpi = "ACPI Plug & Play Bus Driver",files.acpi,acpi

  至此,我们就把自己的SATA驱动程序的相关信息添加到了Windows XP安装信息文件“txtsetup.sif”中了!

  上述添加自定义SATA信息内容的步骤看似很复杂,其实也就是同时打开Windows
XP安装文件目录中的“txtsetup.sif”文件和驱动程序目录中的“.inf”或“.oem”信息文件,然后将后者文件中相关字段下面的内容一一
对应地移植到“txtsetup.sif”文件中。知道了方法,做起来就要容易些了!

3、  修改“winnt.sif”文件内容

  现在,我们已经完成了两个最重要的步骤:一是获取了SATA驱动程序文件,它们现在被保存在“/$OEM$/$1/SATADRV”文件夹中;二是修
改了Windows XP安装时自动加载驱动程序的信息文件“txtsetup.sif”。但现在有一个新的问题:Windows
XP在安装时如何知道它所需要的驱动程序文件在哪个目录下呢?

  这个问题则需要通过修改“winnt.sif” 这个文件来解决。这个文件是Windows XP系统在安装时的附加信息文件,可以在其中指定非微软提供的第三方驱动程序的安装路径。

  对于本例,在“D:/XPSATA/I386”文件夹中用记事本创建一个文本文件,写好内容后,再将文件名改为“winnt.sif”即可。

  提示

  在用记事本保存文件时,一定要输入完整的文件名,并且一定要用半角的双引号将文件名引起来,如“"winnt.sif"”,否则实际上生成的实际上仍然是个文本文件(Winnt.sif.txt),这将导致安装过程中出错,STAT驱动程序无法自动加载!

在“winnt.sif”文件中添加以下内容(如果已经存在部分内容,则应进行修改或添加,且保证每行的内容不要重复):

  [Unattended]

  OemPreinstall=Yes

  OemPnPDriversPath="SATADRV"

  上述代码最后一句引号中的内容是指随后生成光盘时,驱动程序相对于光盘根目录所在的相对路径(因此一定要建立$OEM$文件夹并且在其下建立名为$1
的子文件夹,并且将SATADRV文件夹放入$1根目录下;这里又有一个问题,如果有多个不同厂商的驱动应该怎么办呢――其实也很简单,在$1下建立一个
文件夹,名称随意,但是为了便于理解建议用Drivers等通用名称,再将这些不同厂商的驱动文件夹都放入Drivers文件夹下-比如包含有Sil、
VIA、NVIDIA等多个文件夹,不同驱动文件路径之间用“;”隔开,这里就是:OemPnPDriversPath =
"Drivers/Sil;Drivers/VIA;Drivers/NVIDIA")。由于我们打算把保存驱动程序的“D:/SATADRV”文件夹放
到新生成的安装光盘的根目录,因此不必包含任何子目录路径。对于[Data]下的UnattendedInstall字段,如果不知道后面的具体设置的
话,建议设置为"No",这样不影响SATA RAID驱动文件的加载。

这里给出一份正确的已经编写好而且能够完全正确安装的Winnt.Sif文件内容――具体要求可以根据自己需要自行编写:

;SetupMgrTag

[Data]

MsDosInitiated="0"

AutoPartition=0

UnattendedInstall="No"

OemSkipEula="Yes"

[Unattended]

Unattendmode = FullUnattended

OemPreinstall = Yes

DriverSigningPolicy=Ignore

TargetPath = *

Filesystem = LeaveAlone

OemPnPDriversPath = "VIADRV"

[UserData]

FullName = "Your User Name"

OrgName = "Your Organization Name"

ComputerName = *

ProductKey= "*****-*****-*****-*****-*****"

[GuiUnattended]

; Sets the Timezone to the Pacific Northwest

; Sets the Admin Password to NULL

; Turn AutoLogon ON and login once

TimeZone = "004"

AdminPassword = *

AutoLogon = Yes

AutoLogonCount = 1

[LicenseFilePrintData]

; For Server installs

AutoMode = "PerServer"

AutoUsers = "5"

[GuiRunOnce]

; List the programs that you want to lauch when the machine is logged into for the first time

[Display]

BitsPerPel = 8

XResolution = 800

YResolution = 600

VRefresh = 70

[SetupParams]

UserExecute="%SystemDrive%/Install/XPinstall.exe"

[TapiLocation]

CountryCode=86

Dialing=Tone

[RegionalSettings]

LanguageGroup=9,10

[Branding]

BrandIEUsingUnattended=Yes

[Proxy]

Proxy_Enable=0

Use_Same_Proxy=1

[Identification]

JoinWorkgroup = Workgroup

[Networking]

InstallDefaultComponents=Yes

[Components]

msmsgs=off

msnexplr=Off

[Shell]

CustomDefaultThemeFile="%WinDir%/Resources/Themes/Royale.theme"

  最后重新生成安装光盘;其实这样看起来似乎显得麻烦,其实只要将已经制作好的$OEM$文件夹与已经编辑好的Winnt.Sif与
txtsetup.sif文件添加并替换原来光盘中的相应文件就可以了,另外记住要添加转换的*.sy_驱动文件到系统安装光盘的i386根目录下,否则
会提示找不到驱动文件,最后可以用Ultra ISO编辑原安装光盘镜像文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: