如何爲系統盤集成SATA驅動

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編輯原安裝光盤鏡像文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章