您好,欢迎访问三七文档
封装系统时硬件驱动的处理驱动驱动程序是沟通操作系统和硬件的重要桥梁,通过驱动程序可以让操作系统识别更多的硬件,并使硬件发挥更好的性能。Windows操作系统当出现新硬件时会自动去识别,如果可能则会自动安装该设备的驱动。所以即使我们不处理源计算机操作系统的驱动程序,当系统部署到新计算机时也会自动的识别新硬件,这也可能是为什么微软没有强调封装部署必须处理驱动程序的原因之一。但现实情况事与愿违,某些硬件驱动由于硬件ID的问题本身就存在冲突,某些时候有些驱动程序的残留会造成不良影响等等,这虽然不是Windows的原因而是驱动制作者的问题,但这些情况实实在在的影响了系统封装与部署。硬件抽象层(HAL)的处理什么是HAL?硬件抽象层(HardwareAbstractionLayer,简称HAL),位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。简单说就是将硬件抽象化,以利于各种操作。打开设备管理器,展开“计算机”项目,即可看到当前计算机的HAL类型。HAL类型又被很多技术员称为“电源管理模式”或简称“电源”。WindowsXP的HAL有很多种而Windows7的HAL就简单多了,分为了32位和64位系统两种:“ACPIx86-basedPC”和“ACPIx64-basedPC”根据微软文档的要求,封装与部署不可用于不同HAL的计算机。不同的HAL之间是不完全通用的,如果非要把不适合此计算机的HAL用于此计算机,那么很容易出现各种错误WindowsXPHAL的处理WindowsXP的HAL最常见的也有6种,既然微软的要求是不同HAL的不可通用,那如果碰到封装时源计算机是A种HAL,而部署的目标计算机是B种HAL,怎么办?手动改?如果部署了500台计算机个个手动改?或者我就封装6种HAL的系统,碰到哪种HAL的计算机就部署哪个系统,这样做不是不可,但一是需要维护至少6个系统映像十分麻烦,二是对于一般的IT人员还真不一定分得开什么计算机用什么HAL。那能不能自动判断并自动更改HAL?勇于探索的前辈们还真找到了方法。这个方法源于WindowsXP到WindowsVista之间的年代,那时有一个测试版本,叫做WindowsLonghorn。WindowsLonghorn虽然没有像现在Win6.x那样将HAL简化到只有32位HAL和64位HAL两种,但WindowsLonghorn具备了自动判定计算机HAL并自动更改HAL的能力。由于Longhorn的引导方式与XP无异,都是使用NTLDR引导,所以前辈们完美实现了移植Longhorn的HAL判定到XP!:要准备的文件和程序:(1)WindowsLonghorn的NTLDR,位于WindowsLonghorn的C盘根目录下,默认隐藏。(2)SetACL.exe,用于更改部分注册表键值的权限。移植Longhorn的HAL自动判定到XP的方法:1、在当前系统中提取所需文件(1)如果系统安装过ServicePack,那么找到“C:\Windows\DriverCache\i386”目录下与你当前ServicePack版本相同的.cab文件。例如当前系统是XPSP3,那么找“C:\Windows\DriverCache\i386\SP3.cab”。如果系统没有安装过ServicePack,那么找“C:\Windows\DriverCache\i386\driver.cab”。(2)新建一个文件夹,如C:\Windows\HalCache。(3)将(1)中找到的cab包中的halacpi.dll、halapic.dll、halmps.dll、halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe解压到C:\Windows\HalCache文件夹中。(4)将hal.dll改名为halstnd.dll,将ntoskrnl.exe改名为ntkrnlup.exe。(5)将C:\Windows\HalCache中所有文件复制到C:\Windows\System32中,覆盖同名文件。(6)删除C:\Windows\HalCache。2、创建一个.inf文件在C:\Windows\Inf文件夹(默认为隐藏属性)中创建一个名为dtecthal.inf的纯文本文件,写入如下内容:[Version]signature=“$WindowsNT$”DriverVer=07/01/2001[hal];MPS_MP=halmps.dllMPS_UP=halapic.dllE_ISA_UP=halstnd.dllACPIPIC_UP=halacpi.dllACPIAPIC_UP=halaacpi.dllACPIAPIC_MP=halmacpi.dll.[ACPIOptions]ACPIEnable=2ACPIBiosDate=01,01,19993、修改启动文件C:\NTLDR和C:\Boot.ini均为具有隐藏属性的系统文件,且具有只读属性,请去掉这些属性后再做下列操作。(1)备份XP的NTLDR为NTLDR_BAK(这个文件没有后缀名)。(2)将Longhorn的NTLDR复制到C盘根目录下。(3)将Bootfont.bin改名为Bootfont.bin.bak,由于Longhorn的NTLDR加载XP的Bootfont.bin会出现乱码的情况,所以先改名,以备以后恢复。(如果你是英文版系统则没有Bootfont.bin,可略过此步骤)(4)打开Boot.ini,找到XP的启动项,例如:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=MicrosoftWindowsXPProfessional/noexecute=optin/fastdetect在最后加入自动检测HAL的参数“/detecthal”:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=MicrosoftWindowsXPProfessional/noexecute=optin/fastdetect/detecthal4、处理掉当前的HAL信息注册表中“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL”键记录了当前计算机的HAL类型和信息,删除掉它俩就相当于做掉了目标计算机的HAL。但这两个键都是有保护的,哪怕是Administrator用户都不能随便删除它们,幸好我们刚才准备了SetACL.exe。在命令提示符中切换到SetACL所在目录,运行如下命令:setacl.exeMACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL/registry/granteveryone/fullsetacl.exeMACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL/registry/granteveryone/full6打开注册表编辑器,删除掉“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL”键。打开设备管理器,可看到以前的“计算机”项目不见了,对,源计算机的HAL已经被我们删除了。当此系统部署到目标计算机时,由于我们已经移植了Longhorn的HAL自动判定,被删除的HAL注册表键会自动创建,且与目标计算机的HAL相匹配。经过一番折腾,我们成功的将Longhorn的HAL自动判定功能移植给了XP,由于这种HAL自动判定技术也完全来自于微软,所以正确率和稳定性毋庸置疑(1)如果CPU是32位的,只能部署x86的操作系统;(2)如果CPU是64位的,可以部署x64的操作系统,亦可以部署x86的操作系统;(3)x86的操作系统只能运行32位软件,但兼容性较高;(4)x64的操作系统可以运行64位软件,亦可以运行32位的软件,但对某些32位的软件可能不支持;(5)x64操作系统可支持的内存上限高于x86操作系统;(6)上述内容对windows操作系统普遍有效,不只针对Windows7。一般的驱动卸载方法和注意事项硬件驱动卸载方法我相信大家都会,打开“设备管理器”,展开所有项目逐一卸载就可以了,但是注意下述项目:(1)关于“IDEATA/ATAPI控制器”曾经盛传需要将“IDEATA/ATAPI控制器”下凡是“某某控制器”一律改为“标准双通道PCIIDE控制器”,据说可以加强兼容性。但经过长时间的观察与实践,结合相关理论后,发现这个说法存在一定的谬误。即使都是“标准双通道PCIIDE控制器”,但是此“标准双通道PCIIDE控制器”非彼“标准双通道PCIIDE控制器”。5Su0v']!Q#O1O*t0\'k需要为一个硬件安装什么驱动,是由硬件ID(HWID)来决定的。HWID类似人的身份证一样,理论上是一种硬件的唯一编号,而我们再设备管理器中所看到的硬件设备名,都是通过驱动INF中HWID与其名称对应关系来决定的。就像我们有同名但身份证号不同的人一样,存在着都叫做“标准双通道PCIIDE控制器”但HWID不同的硬件,且不在少数。所以即使源计算机中改为“标准双通道PCIIDE控制器”,但如果只是和目标计算机中的控制器同名不同HWID,那么就是一种徒劳,且这样会让我们残留“IDEATA/ATAPI控制器”的驱动,可能会对目标计算机的部署造成影响。那么我们对“IDEATA/ATAPI控制器”要做的是卸载,而不是修改!对“IDEATA/ATAPI控制器”执行卸载操作已经经过了实践验证,未发现问题(2)关于“计算机”(HAL,或俗称“电源管理”、“电源”)曾经盛传将HAL改为StandardPC可以提高兼容性,这是仅次于(1)的一个谬误。HAL改为StandardPC倒是还有一点根据,StandardPC是具有最高兼容性的HAL,就像一个人虽然做事做不好,但至少不会出错。使用StandardPC如若出现HAL不匹配问题至多是计算机无法正常关机,计算机电源管理能力下降而已。但是,在2.1.2和2.1.4节中我们已经学习了WinXP和Win7的HAL处理方式,现在我想您也可以看出这个说法的谬误。对于WinXP,我们移植了Longhorn的HAL自动判定,使WinXP同样具备了HAL自动判定能力。同时,我们又使用了其他方法直接删除了源计算机的HAL,干净利索无残留。所以我们针对WinXP的HAL,至多做个卸载工作,如果您不想做也无所谓,反正我们有方法可以直接删除当前计算机的HAL类型。对于Win7,2.1.4节中已经详细说明,只要我们搞清楚我们封装的系统是x86还是x64,要部署的计算机的CPU是32位还是64位就可以了,根本无需专门处理HAL。当然,我们也不要卸载Win7的HAL,这是画蛇添足的行为。总结,根据我们对HAL的认识和已有的处理方法,对于WinXP,至多做个卸载工作,亦可以不做(当然,必须做过2.1.2节中的处理);对于Win7,无需卸载HAL,不用管它。(3)哪些驱动不需要卸载?有些驱动经过长期实践发现是无需卸载的,如下:'WinXP:PS2键盘、PS2鼠标、系统设备;Win7:PS2键盘、PS2鼠标、系统设备、HAL。)(严格讲,还应包括“遗留设备(LegacyDriver)”(4)还有哪些需要特别注意?第一,某些驱动的卸载是有顺序的,建议按照设别管理器从下到上的顺序执行卸载,某些驱动的卸载可能触发其他驱动的安装第二,Windows\I
本文标题:封装系统时硬件驱
链接地址:https://www.777doc.com/doc-4023295 .html