NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 16386|回復: 19

[教學]硬碟控制器經驗談

  [複製鏈接]
發表於 2012-4-12 22:46:27 | 顯示全部樓層 |閱讀模式
目前一般家用主機板的硬碟控制器主要可以分成下列三種運行模式

IDE模式、AHCI模式以及RAID模式

目前會看到有很多RC版本的NoName XPE需要大家測試的原因....主要就是因為XP PE內建微軟沒有出通用型的AHCI模式以及RAID模式驅動程式...

所以才需要花很多時間在測試AHCI模式以及RAID模式的硬碟控制器上...

硬碟控制器的模式主要是以硬體識別碼來區分

IDE模式  
2.jpg

AHCI模式
1.PNG 4.PNG

RAID模式
3.jpg


上面舉例的每一種模式的裝置,他的硬體識別碼都是四組(相容識別碼最低層的歸類為PCI\CC_0101 PCI\CC_0106 PCI\CC_0104)

也就是說所有
IDE模式的硬碟控制器它的相容識別碼都會有PCI\CC_0101
AHCI模式的硬碟控制器它的相容識別碼都會有PCI\CC_0106
RAID模式的硬碟控制器它的相容識別碼都會有PCI\CC_0104


所以在XP PE裡面的[HardwareIdsDatabase]就是用來辨識這些裝置看它們需要去加載哪一個驅動...

而XP PE內[HardwareIdsDatabase]區段內的硬體識別碼是有分優先順序的...

所以為的優先順序就是...
PCI\VEN_8086&DEV_3B29&SUBSYS_9069104D&REV_05  --->最優先
PCI\VEN_8086&DEV_3B29&SUBSYS_9069104D                --->第二
PCI\VEN_8086&DEV_3B29&CC_010601                            --->第三
PCI\VEN_8086&DEV_3B29&CC_0106                                --->第四

也就是說硬體識別碼越完整...他就會最優先去掛載驅動的(文章後面會有研究的證明)

IDE模式...微軟有一個通用的驅動PCIIDE.SYS...他可以通吃IDE模式的硬碟控制器,所以這邊我們就利用相容識別碼 PCI\CC_0101 去加載 PCIIDE

所以你會在 [HardwareIdsDatabase]區段內找到 PCI\CC_0101="pciide"

所以只要你是硬碟控制器是開啟IDE模式的話...使用NoName XPE一定可以正常辨識你的硬碟的...

AHCI模式以及RAID模式就沒辦法這樣做嚕...以目前來說VISTA以後的作業系統...
有出一個通用型的AHCI驅動程式...MSAHCI.SYS,也就是說WIN7版本的PE 只要利用PCI\CC_0106 去加載 MSAHCI 就可以通吃AHCI模式的硬碟控制器了
但是XP PE就只能收集和內建這些AHCI和RAID的驅動了...

這邊就舉個例子來講解如何在XP PE集成AHCI模式以及RAID模式的硬碟控制器驅動

增加主機板晶片的銜接儲存裝置類驅動...都是在txtsetup.sif這個文件上做動作的...

txtsetup.sif檔案位於RXPE.IMG內的RXPE資料夾內...

這邊就舉個簡單的例子而已...其他廠牌的驅動就要你自行下功夫去查詢嚕...

加入比較簡單的晶片驅動...

只要針對txtsetup.sif內的3個區段內加入他適當的 "碼" "文字"...

不知道怎麼描述才是正確的...不過知道我說的意思就好了...

txtsetup.sif內的這3個區段分別為...

[HardwareIdsDatabase]

[SCSI.Load]

[SCSI]


這邊舉...一張VIA晶片PCI的... AT200 硬碟雙用擴充卡為例子
只要在txtsetup.sif內的這3個區段內個別加入

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249&CC_0104="viamraid"

[SCSI.Load]

viamraid=viamraid.sys,4

[SCSI]

viamraid="VIA RAID Controller"

再把你下載的驅動內的viamraid.SYS 放進XPE內的SYSTEM32資料夾內的DRIVER資料夾內
這樣就完成了...

當然...你可能會有疑問...這些資料是哪來的...
我只能很簡單的告訴你...
請去這晶片...
或是這張卡的官方網站下載她們的驅動程式裡面就會有這些資料了....

這邊放上舉例的驅動下載點...
http://www.upmost.com.tw/download_check.php?s_id=132

下載後...解壓縮...在下面路徑找到VIAMRAID.INF

at200_v550b\DRIVER\VRAIDDrv\XP\x86\VIAMRAID.INF裡面有這裝置包含的硬體識別碼(HardwareIdsDatabase)

修改步驟
1.打開VIAMRAID.INF

裡面找 [VIA]區段
%PCI\VEN_1106&DEV_3249.DeviceDesc% = viamraid , PCI\VEN_1106&DEV_3249&CC_0104

要把她們改成xpe用的格式
PCI\VEN_1106&DEV_3249&CC_0104="viamraid"
再把他放到HardwareIdsDatabase這個區段內...


2.SCSI.LOAD 這邊都一樣,只要按照下面格式去寫就可以
[SCSI.Load]
viamraid=viamraid.sys,4

3.[SCSI]的部分
裡面找 [Strings] 區段
[strings]
VIA="VIA Technologies, Inc."
PCI\VEN_1106&DEV_3349.DeviceDesc="VIA VT8251 AHCI RAID Controller"
PCI\VEN_1106&DEV_6287.DeviceDesc="VIA VT8251 AHCI Controller"
PCI\VEN_1106&DEV_0591.DeviceDesc="VIA VT8237A SATA RAID Controller"

裡面隨便挑一個你喜歡的...或是自己命名....照下面XPE用的格式打上就可以了...這邊只是這個控制器的描述而已所以沒差。
[SCSI]
viamraid="VIA RAID Controller"


4.驅動的部分

at200_v550b\DRIVER\VRAIDDrv\XP\x86\viamraid.sys就是所要用到的驅動程式...

放進XPE內的SYSTEM32資料夾內的DRIVER資料夾內...

這樣就加入完成嚕...


====================================================================

再來是針對xpe內硬體識別碼的研究...

我一樣以AT200 硬碟雙用擴充卡為例子

這張卡的硬體識別碼為...PCI\VEN_1106&DEV_3249&SUBSYS_32491106

接下來以這張卡的4個硬體識別碼同時存在時來做研究...
(這4種硬體識別碼都是這張卡的硬體識別碼...只是表達的方式不一樣而已)

PCI\VEN_1106&DEV_3249

PCI\VEN_1106&DEV_3249&CC_0104

PCI\VEN_1106&DEV_3249&CC_010400

PCI\VEN_1106&DEV_3249&SUBSYS_32491106

研究一

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249="iastor"

PCI\VEN_1106&DEV_3249&CC_0104="iastor"

PCI\VEN_1106&DEV_3249&CC_010400="iastor"

PCI\VEN_1106&DEV_3249&SUBSYS_32491106="viamraid"

這時進到xpe後可以正確識別在掛這張卡上的硬碟...
改為...

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249="viamraid"

PCI\VEN_1106&DEV_3249&CC_0104="viamraid"

PCI\VEN_1106&DEV_3249&CC_010400="viamraid"

PCI\VEN_1106&DEV_3249&SUBSYS_32491106="iastor"

這時進到xpe後...就看不到硬碟了...


研究二

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249="iastor"

PCI\VEN_1106&DEV_3249&CC_0104="iastor"

PCI\VEN_1106&DEV_3249&CC_010400="viamraid"

這時進到xpe後可以正確識別在掛這張卡上的硬碟...
改為...

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249="viamraid"

PCI\VEN_1106&DEV_3249&CC_0104="viamraid"

PCI\VEN_1106&DEV_3249&CC_010400="iastor"

這時進到xpe後...就看不到硬碟了...

後面的研究我就把不打了...

跟你所想的是一樣的...

xpe在判斷硬體識別碼的時候...並不是由上往下的去掃描...

而是會匹配硬體識別碼中最完整的那一個...並掛上驅動...

由上往下的情形是在同等級的硬體識別碼同時存在時才會先掃描到的先掛載驅動...

例如說...

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249&CC_0104="viamraid"

PCI\VEN_1106&DEV_3249&CC_0104="iastor"

這樣進xpe後就可以看到硬碟...
反之...

[HardwareIdsDatabase]

PCI\VEN_1106&DEV_3249&CC_0104="iastor"

PCI\VEN_1106&DEV_3249&CC_0104="viamraid"

這時進到xpe後...就看不到硬碟了...


==================================================================


再來是說到我們正常的作業系統...假如你原本是開啟IDE模式...你不想重灌的情況下...你想要把硬碟控制器更改為AHCI模式..你該怎樣做呢?

這邊就不像PE一樣是用TXTMODE去安裝驅動程式的...

而是需要用INF檔案去安裝...或是你直接把登陸檔補齊再把驅動放到相關位置就可以了...

登陸檔補齊再把驅動放到相關位置修改完後...只要重開機進BIOS...把硬碟控制器切換成AHCI模式...就不會藍底白字了...可以正常進入...

當然...正常進入XP後...你最好還是下載官方的AHCI驅動程式...重新安裝一次...這樣不管是效能還是設定才會保證是正確的...

最後...這只是眾多方法中的其中一種...沒有人說一定要怎樣做...你有更好的方法請你分享出來並打上教學文章...

這邊我們假設有一台電腦他的硬碟控制器是INTEL晶片組...他現在是IDE模式...要更改為AHCI模式...

首先要知道他AHCI模式下的硬體識別碼是什麼...這邊假設為 PCI\VEN_8086&DEV_1C02&CC_0106

那我們該如何知道開啟AHCI模式下...我的硬體識別碼是什麼呢...

方法也很多...其中一種就是...進入NoName XPE內...執行Hwids...你就可以知道你的硬體識別碼了...
HWIDs.rar

先下載附件中的intel晶片的驅動程式
Intel.rar (247.8 KB, 下載次數: 137)
發表於 2012-4-13 00:14:16 | 顯示全部樓層
提示: 作者被禁止或刪除 內容自動屏蔽
發表於 2012-4-13 09:36:48 | 顯示全部樓層
本帖最後由 GGYY1971 於 2012-4-13 11:00 編輯

no 大:
我剛要按 "讚"   結果不小心按到 "噓"
可以幫我改一下嗎?
謝謝

手殘!請扣100分。.....................
發表於 2012-4-13 11:19:25 | 顯示全部樓層
GGYY1971 發表於 2012-4-13 09:36
no 大:
我剛要按 "讚"   結果不小心按到 "噓"
可以幫我改一下嗎?


我只想偷笑,可是系統要我打十個字
 樓主| 發表於 2012-4-13 14:02:06 | 顯示全部樓層
文章終於打完了...請參考
發表於 2012-4-14 01:33:33 | 顯示全部樓層
本帖最後由 wusun 於 2012-4-15 04:52 編輯

「把硬碟控制器更改為AHCI模式」這段文中,其中

2. 登陸檔要補齊的幾個地方是...
首先先新增HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001的機碼
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\PCI#VEN_8086&DEV_1C02&CC_0106]
  3. "Service"="iastor"
  4. "ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
複製代碼
再來是新增 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 的機碼
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\iaStor]
  3. "Type"=dword:00000001
  4. "Start"=dword:00000000
  5. "Group"="SCSI miniport"
  6. "ErrorControl"=dword:00000001
  7. "ImagePath"="system32\\drivers\\iaStor.sys"
  8. "DisplayName"="Intel AHCI Controller"
複製代碼
這兩段註冊也許可以用SK.INF2REG來幫助我們把硬體登錄資訊匯出。
發文對照碼 : bhr0mmrv
以上請參考!




發表於 2012-4-14 04:44:17 | 顯示全部樓層

假設為 PCI\VEN_8086&DEV_1C02&CC_0106 , install.cmd & IMSM_PRE.inf  要和 IASTOR.SYS 放在一起,  直接执行install.cmd, 谁成功就说一下

install.cmd
  1. rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 %~dp0imsm_pre.inf
複製代碼
IMSM_PRE.inf
  1. [Version]
  2. Signature="$Chicago$"

  3. [DefaultInstall]
  4. AddReg=iaStorCritical.Reg, iaStorSvc.Reg
  5. CopyFiles=iaStor_Driver_File

  6. [DefaultUninstall]
  7. DelReg=iaStorCritical.DelReg, iaStorSvc.DelReg

  8. [DestinationDirs]
  9. DefaultDestDir = 12 ; DIRID_DRIVERS

  10. [iaStor_Driver_File]
  11. iaStor.sys,,,0x00000010



  12. [iaStorCritical.Reg]
  13. HKLM,System\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&DEV_1C02&CC_0106,Service,%REG_SZ%,%IASTOR_SVC%
  14. HKLM,System\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&DEV_1C02&CC_0106,ClassGUID,%REG_SZ%,"{4D36E96A-E325-11CE-BFC1-08002BE10318}"

  15. [iaStorCritical.DelReg]
  16. HKLM,System\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&DEV_1C02&CC_0106

  17. ;============================================================================================================
  18. ; Storage Service - Parameter Set (ICH8M)
  19. ;============================================================================================================
  20. [iaStorSvc.Reg]
  21. HKLM,System\CurrentControlSet\Services\iastor,ErrorControl,%REG_DWORD%,1
  22. HKLM,System\CurrentControlSet\Services\iastor,Group,%REG_SZ%,"SCSI miniport"
  23. HKLM,System\CurrentControlSet\Services\iastor,Start,%REG_DWORD%,0
  24. HKLM,System\CurrentControlSet\Services\iastor,Type,%REG_DWORD%,1
  25. HKLM,System\CurrentControlSet\Services\iastor,DisplayName,%REG_SZ%,%*PNP0600.DeviceDesc%
  26. HKLM,System\CurrentControlSet\Services\iastor,ImagePath,%REG_SZ%,"System32\Drivers\iaStor.sys"

  27. HKLM,System\CurrentControlSet\Services\iastor,Tag,%REG_DWORD%,25
  28. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%AN%,%REG_DWORD%,0
  29. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%LPM%,%REG_DWORD%,1
  30. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%LPMSTATE%,%REG_DWORD%,0
  31. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%LPMDSTATE%,%REG_DWORD%,1
  32. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%GTF%,%REG_DWORD%,1
  33. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port0,%DIPM%,%REG_DWORD%,1

  34. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%AN%,%REG_DWORD%,0
  35. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%LPM%,%REG_DWORD%,1
  36. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%LPMSTATE%,%REG_DWORD%,0
  37. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%LPMDSTATE%,%REG_DWORD%,1
  38. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%GTF%,%REG_DWORD%,1
  39. HKLM,System\CurrentControlSet\Services\iastor\Parameters\Port2,%DIPM%,%REG_DWORD%,1

  40. [iaStorSvc.DelReg]
  41. HKLM,System\CurrentControlSet\Services\iastor


  42. [SourceDisksNames]
  43. 1=%ProdName%,,

  44. [SourceDisksFiles]
  45. imsm_pre.inf=1
  46. iaStor.sys=1

  47. [Strings]
  48. ProdName="IMSM Critical Database Preparation for Windows 2000/XP"
  49. ProdVersion="1.0"

  50. IASTOR_SVC="iaStor"
  51. *PNP0600.DeviceDesc="Intel AHCI Controller"


  52. INTEL="Intel"
  53. AN="AN"
  54. LPM="LPM"
  55. LPMSTATE="LPMSTATE"
  56. LPMDSTATE="LPMDSTATE"
  57. GTF="GTF"
  58. DIPM="DIPM"

  59. ;*******************************************
  60. ;Handy macro substitutions (non-localizable)
  61. SPSVCINST_ASSOCSERVICE = 0x00000002
  62. SERVICE_KERNEL_DRIVER  = 1
  63. SERVICE_BOOT_START     = 0
  64. SERVICE_ERROR_NORMAL   = 1
  65. REG_SZ                 = 0x00000000
  66. REG_EXPAND_SZ          = 0x00020000
  67. REG_DWORD              = 0x00010001
複製代碼
發表於 2012-11-23 20:35:00 | 顯示全部樓層
No老大,

這幾天試了自己加入 Marvell 的硬碟控制器驅動,但是再怎樣試也是不行,結果都是在開機時出現,
The file mv91xx.sys could not be found.
Press any key to continue.


我把我修改的 txtsetup.sif 主要修改內容附上,可以幫我看一下嗎?

************************************************************************
[HardwareIdsDatabase]

PCI\VEN_1B4B&DEV_9023&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_90A3&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9110&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_9190&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9111&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_9191&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9120&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_91A0&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9122&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_91A2&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9128&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_91A8&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9028&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_90A8&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9123&CC_0106="mv91xx"
PCI\VEN_1B4B&DEV_9123&CC_0104="mv91xx"
PCI\VEN_1B4B&DEV_914D&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_91A3&CC_0101="mv91xx"
PCI\VEN_1B4B&DEV_9130&CC_0106="mv91xx"

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

[SCSI]
mv91xx="Mavell MV9xxx"

*****************************************************************
※我也有再將 RXPE.IM_ 檔解出來看 mv91xx.sys 確實有在 rxpe\system32\drivers 內

但就是不知為何都會得到這樣的結果...
請幫忙解惑,感恩。

我是在 Windows XP Professional SP3 環境中,使用 MakeXPE 1.1.120428 版,製作出來的 RXPE.IM_
過程中沒有讓何錯誤。





發表於 2012-11-23 22:58:52 | 顯示全部樓層
mort77727 發表於 2012-11-23 20:35
No老大,

這幾天試了自己加入 Marvell 的硬碟控制器驅動,但是再怎樣試也是不行,結果都是在開機時出現,

利用MakeCAB把mv91xx.sys壓成mv91xx.sy_ ,再取代RXPE.IM_內的mv91xx.sys試試看
發表於 2012-11-23 23:36:35 | 顯示全部樓層
本帖最後由 2567288 於 2012-11-23 23:38 編輯
mort77727 發表於 2012-11-23 20:35
No老大,

這幾天試了自己加入 Marvell 的硬碟控制器驅動,但是再怎樣試也是不行,結果都是在開機時出現,

[討論] TXTSETUP.SIF 加入 Marvell 91xx Sata3 系列晶片驅動供測試
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2024-11-28 00:41 , Processed in 1.466897 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表