封装志 第二章(系统封装)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章、硬件驱动的处理6S+w0t3Sf!]2b(e驱动程序是沟通操作系统和硬件的重要桥梁,通过驱动程序可以让操作系统识别更多的硬件,并使硬件发挥更好的性能。然而封装系统时我们必须要处理一下源计算机的硬件驱动,毕竟你无法确定目标计算机是怎么样的硬件环境。处理好源计算机系统中的硬件驱动,可以拓展系统可部署的范围,减少因系统残留源计算机硬件和驱动信息造成的各种不良影响。虽然我没有在微软官方文档中看到必须处理源计算机硬件驱动的内容,但是根据长时间的实践与应用,在无数前辈们的基础上,我们总结出了一套切实可行的源计算机硬件驱动处理方法,这也是本章将要讲述的重点内容。Windows操作系统是即插即用的,也就是说当出现新硬件时会自动去识别,如果可能则会自动安装该设备的驱动。所以即使我们不处理源计算机操作系统的驱动程序,当系统部署到新计算机时也会自动的识别新硬件,这也可能是为什么微软没有强调封装部署必须处理驱动程序的原因之一。但现实情况事与愿违,某些硬件驱动由于硬件ID的问题本身就存在冲突,某些时候有些驱动程序的残留会造成不良影响等等,这虽然不是Windows的原因而是驱动制作者的问题,但这些情况实实在在的影响了系统封装与部署。1D7[~/i5S+u8j*g1V我们要讲理论,可也要结合实践,实践才能出真知。本章将结合实践,讲讲在现实中我们应该怎么做。,C9j0t*h6H(N2p#f'~7P5~(f0}6H,M2.1硬件抽象层(HAL)的处理-y(q/X9{(H7T1[1}@'s$u;_py$Mv#r2.1.1什么是HAL6b#};Q.|.T-},`.p\+x5S硬件抽象层(HardwareAbstractionLayer,简称HAL),位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。简单说就是将硬件抽象化,以利于各种操作。9Q;H7\f8s8U![如果要查看当前计算机的HAL类型,打开设备管理器,展开“计算机”项目,即可看到当前计算机的HAL类型。HAL类型又被很多技术员称为“电源管理模式”或简称“电源”。P*T(S9o0e8V,_;E0B*WWindowsXP的HAL有很多种,有“AdvancedConfigurationandPowerInterface(ACPI)PC”、“ACPIMultiprocessorPC”、“ACPIUniprocessorPC”、“MPSMultiprocessorPC”、“MPSUniprocessorPC”、“StandardPC”以及等等,种类很多,而且特殊的计算机硬件还会有特殊的HAL。Windows2000、WindowsServer2003这些与WindowsXP同属于Win5.x的操作系统亦是如此,HAL种类繁多。如果算上32位和64位系统的差别,那么HAL的种类至少还要乘2来计算。Windows7的HAL就简单多了,分为了32位和64位系统两种:“ACPIx86-basedPC”和“ACPIx64-basedPC”,中文版本可能翻译了其名称,“ACPI基于x86的电脑”和“ACPI基于x64的电脑”。WindowsVista、WindowsServer2008这些与Windows7同属于Win6.x的操作系统也是一样,HAL简单高效。某些特定机型还有个别专用的HAL,一般用户很少碰到,这里不再介绍。4b,G,s!V*C-mP'`6y.U根据微软文档的要求,封装与部署不可用于不同HAL的计算机。不同的HAL之间是不完全通用的,如果非要把不适合此计算机的HAL用于此计算机,那么很容易出现各种错误。最常见的例子,如部署有WindowsXP某计算机在系统部署后无法正常关机和重启。4?-t-S:Z2K2o7y那我们要如何处理HAL,特别是像WindowsXP这种HAL非常多的操作系统,难道要手动改吗?莫着急,待我一一道来。2.1.2WindowsXPHAL的处理-x4A'C-@-n,p#B;e%I5b3c'a(X1[3|4i$n9b4`+@WindowsXP的HAL最常见的也有6种,既然微软的要求是不同HAL的不可通用,那如果碰到封装时源计算机是A种HAL,而部署的目标计算机是B种HAL,怎么办?手动改?如果部署了500台计算机个个手动改?或者我就封装6种HAL的系统,碰到哪种HAL的计算机就部署哪个系统,这样做不是不可,但一是需要维护至少6个系统映像十分麻烦,二是对于一般的IT人员还真不一定分得开什么计算机用什么HAL。6h1f9i:Y;H(m6@)e那能不能自动判断并自动更改HAL?勇于探索的前辈们还真找到了方法。这个方法源于WindowsXP到WindowsVista之间的年代,那时有一个测试版本,叫做WindowsLonghorn。WindowsLonghorn虽然没有像现在Win6.x那样将HAL简化到只有32位HAL和64位HAL两种,但WindowsLonghorn具备了自动判定计算机HAL并自动更改HAL的能力。由于Longhorn的引导方式与XP无异,都是使用NTLDR引导,所以前辈们完美实现了移植Longhorn的HAL判定到XP!2M)k9S/n3_9[要准备的文件和程序:4pf#C?,T9v3A(1)WindowsLonghorn的NTLDR,位于WindowsLonghorn的C盘根目录下,默认隐藏。'z9~0a6b.HK(2)SetACL.exe,用于更改部分注册表键值的权限。移植Longhorn的HAL自动判定到XP的方法:.I-_,\v5@)?6|.X$~-R$\9L#Z5[1、在当前系统中提取所需文件)b(J&n(b4y6I(1)如果系统安装过ServicePack,那么找到“C:\Windows\DriverCache\i386”目录下与你当前ServicePack版本相同的.cab文件。例如当前系统是XPSP3,那么找“C:\Windows\DriverCache\i386\SP3.cab”。如果系统没有安装过ServicePack,那么找“C:\Windows\DriverCache\i386\driver.cab”。3E/\+L7Z6W6_:m#X!s(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。)w0H6oc$m-C(5)将C:\Windows\HalCache中所有文件复制到C:\Windows\System32中,覆盖同名文件。0]8BC!O(L5|*K(M!z(6)删除C:\Windows\HalCache。)g+]5v(u$p(\d2、创建一个.inf文件2Kk%t-t5q9]在C:\Windows\Inf文件夹(默认为隐藏属性)中创建一个名为dtecthal.inf的纯文本文件,写入如下内容::G4i5p9_/Q1D;l0C:X-v[Version]8s!Q!?4[7_1_6f*S.K9Psignature=$WindowsNT$*d5[2T8M!G,PDriverVer=07/01/2001[hal]MPS_MP=halmps.dll,L$P(`)?_!V&}2MMPS_UP=halapic.dllE_ISA_UP=halstnd.dllACPIPIC_UP=halacpi.dll0Pt3L(Z;KVb&}ACPIAPIC_UP=halaacpi.dll9[%u8L-M0i4@ACPIAPIC_MP=halmacpi.dll#}-P'?3k)~&N:H)x[ACPIOptions]4z5?!WQ)R*T9{:_ACPIEnable=2'z;m']6Q#qw+XACPIBiosDate=01,01,19993、修改启动文件8[6M%z(@&{:f'q$a;i1y4?XC:\NTLDR和C:\Boot.ini均为具有隐藏属性的系统文件,且具有只读属性,请去掉这些属性后再做下列操作。(1)备份XP的NTLDR为NTLDR_BAK(这个文件没有后缀名)。J$x9R1T&N%I(2)将Longhorn的NTLDR复制到C盘根目录下。(3)将Bootfont.bin改名为Bootfont.bin.bak,由于Longhorn的NTLDR加载XP的Bootfont.bin会出现乱码的情况,所以先改名,以备以后恢复。(如果你是英文版系统则没有Bootfont.bin,可略过此步骤)(4)打开Boot.ini,找到XP的启动项,例如:*S/z4n8~;A6w%c4IE3g2t*h&qmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS=MicrosoftWindowsXPProfessional/noexecute=optin/fastdetect2b.^%e5I2];V在最后加入自动检测HAL的参数“/detecthal”:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=MicrosoftWindowsXPProfessional/noexecute=optin/fastdetect/detecthal4、处理掉当前的HAL信息一直有的方法说是把当前的HAL改成StandardPC可以提高兼容性,的确改成这个之后无论HAL是什么样的都不会出现如不能启动这种问题,至多是不能正常关机而已,可以说这个的确有很高的兼容性。但经过一段时间的观察、测试和应用,发现这种方法只是个权宜之计。我们既然有了HAL自动判定,且我们担心源计算机的HAL信息会影响系统在目标计算机中的部署,那么我们直接把当前计算机的HAL做掉好了。%`1[;\%P3r$i注册表中“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL”键记录了当前计算机的HAL类型和信息,删除掉它俩就相当于做掉了目标计算机的HAL。0p#S5C;w%N*h8{但这两个键都是有保护的,哪怕是Administrator用户都不能随便删除它们,幸好我们刚才准备了SetACL.exe。在命令提示符中切换到SetACL所在目录,运行如下命令:6n2d3Z$s#M!X'Vsetacl.exeMACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL/registry/granteveryone/full2X8f3c)t3Asetacl.exeMACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL/registry/granteveryone/full打开注册表编辑器,删除掉“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL”键和“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL”键。'm+E/`.[3j-S6G9N打开设备管理器,可看到以前的“计算机”项目不见了,对,源计算机的HAL已经被我们删除了。当此系统部署到目标计算机时,由于我们已经移植了Longhorn的HAL自动判定,被删除的HAL注册表键会自动创建,且与目标计算机的HAL相匹配。6o-M$T8I.h.R:G经过一番折腾,我们成功的将Longhorn的HAL

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功