|
很多人非常关心硬盘控制器驱动程序的载入问题,下面我就个人的理解稍微谈谈。
PE的驱动程序载入点通常有:setupreg.hiv(大致对应于xp的system)、txtsetup.sif,另外作为inf的载入就和xp差不多了。硬盘控制器的驱动通常属于启动设备,是在txtsetup.sif加载的,下面以夕统的IDE为例:
我们下载SIS IDE2_04a磁盘驱动包,解压以后得到siside.inf、siside.sys、sisidex.sys、sisperf.sys和sisidexp.dll,打开siside.inf
=====================================
; Copyright (c) 2000-2005 SiS Techologies, Inc.
[version]
Signature="$WINDOWS NT$"
Class=hdc
ClassGuid={4D36E96A-E325-11CE-BFC1-08002BE10318}
Provider=%SiS%
CatalogFile=siside.cat
LayoutFile=mshdc.inf
DriverVer=09/15/2003,5.1.1039.2041
[DestinationDirs]
DefaultDestDir = 12 ; DIRID_DRIVERS
[ControlFlags]
ExcludeFromSelect = PCI\VEN_1039&DEV_5513
ExcludeFromSelect = PCI\VEN_1039&DEV_5518
[Manufacturer]
%SiS%=SiS_HDC
[SiS_HDC]
%PCI\VEN_1039&DEV_5513.DeviceDesc%=SiSide_Inst, PCI\VEN_1039&DEV_5513 ; SiS
%PCI\VEN_1039&DEV_5518.DeviceDesc%=SiSide_Inst, PCI\VEN_1039&DEV_5518
[SourceDisksFiles]
SiSide.sys = 1,,
[SourceDisksNames]
1=%SiSFilterDisk%,,,
;**********************************************************
; SiS PCI IDE Controller (DUAL_GOOD_IDE)
[SiSide_Inst]
CopyFiles = @siside.sys
[SiSide_Inst.Services]
AddService = SiSide, %SPSVCINST_ASSOCSERVICE%, SiSide_Service_Inst
[SiSide_Service_Inst]
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_BOOT_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %12%\siside.sys
LoadOrderGroup = System Bus Extender
[Strings]
SiS = "Silicon Integrated Systems Corp."
PCI\VEN_1039&DEV_5513.DeviceDesc="SiS 5513 IDE UDMA Controller"
PCI\VEN_1039&DEV_5518.DeviceDesc="SiS 5518 IDE UDMA Controller"
SiSFilterDisk = "disk1"
;*******************************************
;Handy macro substitutions (non-localizable)
SPSVCINST_ASSOCSERVICE = 0x00000002
SERVICE_KERNEL_DRIVER = 1
SERVICE_BOOT_START = 0
SERVICE_ERROR_NORMAL = 1
======================================
我们最为关心的有:
ExcludeFromSelect = PCI\VEN_1039&DEV_5513
ExcludeFromSelect = PCI\VEN_1039&DEV_5518
LoadOrderGroup = System Bus Extender
很显然,作为硬件信息的
PCI\VEN_1039&DEV_5513
PCI\VEN_1039&DEV_5518
我们需要把它加入到txtsetup.sif的[HardwareIdsDatabase]段
我们在该段内加入
PCI\VEN_1039&DEV_5518="siside"
PCI\VEN_1039&DEV_5513="siside"
HDC的载入地方是[BusExtenders.Load],载入的文件从siside.inf可以看出是siside.sys,于是我们在[BusExtenders.Load]段加入:
siside=siside.sys
在[BusExtenders]段加入名称
siside="SiS IDE Bus Driver",files.siside,siside
并在它后面加入驱动程序的组成
[files.siside]
siside.sys,4
sisperf.sys,4
sisidex.sys,4
为了找到对应的文件,我们还在[SourceDisksFiles]段加入对应信息
SISIDE.SYS=1,,,,,,4_,4,1,,,1,4
SISPERF.SYS=1,,,,,,4_,4,1,,,1,4
SISIDEX.SYS=1,,,,,,4_,4,1,,,1,4
SISIDEXP.DLL=100,,,,,,,2,0,0
然后,我们把siside.sys、sisidex.sys、sisperf.sys压缩成.sy_文件放入drivers,把sisidexp.dll放入system32,把txtsetup.sif文件压缩成.si_,然后重新打包,于是我们的PE就支持SISIDE了:)
当然,有很多驱动程序包含一些安装、卸载文件,这些文件其实是不需要的,如何精减就看你对inf文件的理解程度了。
对于siside来说,siside.sys典型是主驱动,这是必须的,sisidex.sys是扩展,显然也很重要,sisperf.sys很显然是提高性能的过滤器,sisidexp.dll作为HDC的管理应该也是需要的。
[ 本帖最后由 netwinxp 于 2008-1-18 02:49 PM 编辑 ] |
|