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

上传人:cn****1 文档编号:469302177 上传时间:2023-08-07 格式:DOC 页数:23 大小:164.50KB
返回 下载 相关 举报
封装志 第二章(系统封装)_第1页
第1页 / 共23页
封装志 第二章(系统封装)_第2页
第2页 / 共23页
封装志 第二章(系统封装)_第3页
第3页 / 共23页
封装志 第二章(系统封装)_第4页
第4页 / 共23页
封装志 第二章(系统封装)_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《封装志 第二章(系统封装)》由会员分享,可在线阅读,更多相关《封装志 第二章(系统封装)(23页珍藏版)》请在金锄头文库上搜索。

1、第二章、硬件驱动的处理6 S+ w0 t3 S f! 2 b( e驱动程序是沟通操作系统和硬件的重要桥梁,通过驱动程序可以让操作系统识别更多的硬件,并使硬件发挥更好的性能。然而封装系统时我们必须要处理一下源计算机的硬件驱动,毕竟你无法确定目标计算机是怎么样的硬件环境。处理好源计算机系统中的硬件驱动,可以拓展系统可部署的范围,减少因系统残留源计算机硬件和驱动信息造成的各种不良影响。虽然我没有在微软官方文档中看到必须处理源计算机硬件驱动的内容,但是根据长时间的实践与应用,在无数前辈们的基础上,我们总结出了一套切实可行的源计算机硬件驱动处理方法,这也是本章将要讲述的重点内容。Windows操作系统是

2、即插即用的,也就是说当出现新硬件时会自动去识别,如果可能则会自动安装该设备的驱动。所以即使我们不处理源计算机操作系统的驱动程序,当系统部署到新计算机时也会自动的识别新硬件,这也可能是为什么微软没有强调封装部署必须处理驱动程序的原因之一。但现实情况事与愿违,某些硬件驱动由于硬件ID的问题本身就存在冲突,某些时候有些驱动程序的残留会造成不良影响等等,这虽然不是Windows的原因而是驱动制作者的问题,但这些情况实实在在的影响了系统封装与部署。1 D7 / i5 S+ u8 j* g1 V我们要讲理论,可也要结合实践,实践才能出真知。本章将结合实践,讲讲在现实中我们应该怎么做。, C9 j0 t*

3、h6 H( N2 p# f 7 P5 ( f0 6 H, M2.1 硬件抽象层(HAL)的处理- y( q/ X9 ( H7 T1 1 s$ u; _ p y$ M v# r2.1.1 什么是HAL6 b# ; Q. |. T- , . p + x5 S硬件抽象层(Hardware Abstraction Layer,简称HAL),位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。简单说就是将硬件抽象化,以利于各种操作。9 Q; H7 f8 s8 U! 如果要查看当前计算机的H

4、AL类型,打开设备管理器,展开“计算机”项目,即可看到当前计算机的HAL类型。HAL类型又被很多技术员称为“电源管理模式”或简称“电源”。 P* T( S9 o0 e8 V, _; E0 B* WWindows XP的HAL有很多种,有“Advanced Configuration and Power Interface (ACPI) PC”、“ACPI Multiprocessor PC”、“ACPI Uniprocessor PC”、“MPS Multiprocessor PC”、“MPS Uniprocessor PC”、“Standard PC”以及等等,种类很多,而且特殊的计算机硬件

5、还会有特殊的HAL。Windows 2000、Windows Server 2003这些与Windows XP同属于Win5.x的操作系统亦是如此,HAL种类繁多。如果算上32位和64位系统的差别,那么HAL的种类至少还要乘2来计算。Windows 7的HAL就简单多了,分为了32位和64位系统两种:“ACPI x86-based PC”和“ACPI x64-based PC”,中文版本可能翻译了其名称,“ACPI基于x86的电脑”和“ACPI基于x64的电脑”。Windows Vista、Windows Server 2008这些与Windows 7同属于Win6.x的操作系统也是一样,HA

6、L简单高效。某些特定机型还有个别专用的HAL,一般用户很少碰到,这里不再介绍。4 b, G, s! V* C- m P 6 y. U根据微软文档的要求,封装与部署不可用于不同HAL的计算机。不同的HAL之间是不完全通用的,如果非要把不适合此计算机的HAL用于此计算机,那么很容易出现各种错误。最常见的例子,如部署有Windows XP某计算机在系统部署后无法正常关机和重启。4 ?- t- S: Z2 K2 o7 y那我们要如何处理HAL,特别是像Windows XP这种HAL非常多的操作系统,难道要手动改吗?莫着急,待我一一道来。2.1.2 Windows XP HAL的处理- x4 A C-

7、- n, p# B; e% I5 b3 c a( X1 3 |4 i$ n9 b4 + Windows XP的HAL最常见的也有6种,既然微软的要求是不同HAL的不可通用,那如果碰到封装时源计算机是A种HAL,而部署的目标计算机是B种HAL,怎么办?手动改?如果部署了500台计算机个个手动改?或者我就封装6种HAL的系统,碰到哪种HAL的计算机就部署哪个系统,这样做不是不可,但一是需要维护至少6个系统映像十分麻烦,二是对于一般的IT人员还真不一定分得开什么计算机用什么HAL。6 h1 f9 i: Y; H( m6 ) e那能不能自动判断并自动更改HAL?勇于探索的前辈们还真找到了方法。这个方法

8、源于Windows XP到Windows Vista之间的年代,那时有一个测试版本,叫做Windows Longhorn。Windows Longhorn虽然没有像现在Win6.x那样将HAL简化到只有32位HAL和64位HAL两种,但Windows Longhorn具备了自动判定计算机HAL并自动更改HAL的能力。由于Longhorn的引导方式与XP无异,都是使用NTLDR引导,所以前辈们完美实现了移植Longhorn的HAL判定到XP!2 M) k9 S/ n3 _9 要准备的文件和程序:4 p f# C ?, T9 v3 A(1)Windows Longhorn的NTLDR,位于Wind

9、ows Longhorn的C盘根目录下,默认隐藏。 z9 0 a6 b. H K(2)SetACL.exe,用于更改部分注册表键值的权限。移植Longhorn的HAL自动判定到XP的方法:. I- _, v5 ) ?6 |. X$ - R$ 9 L# Z5 1、在当前系统中提取所需文件) b( J& n( b4 y6 I(1)如果系统安装过Service Pack,那么找到“C:WindowsDriver Cachei386”目录下与你当前Service Pack版本相同的.cab文件。例如当前系统是XP SP3,那么找“C:WindowsDriver Cachei386SP3.cab”。如果

10、系统没有安装过Service Pack,那么找“C:WindowsDriver Cachei386driver.cab”。3 E/ + L7 Z6 W6 _: m# X! s(2)新建一个文件夹,如C:WindowsHalCache。(3)将(1)中找到的cab包中的halacpi.dll、halapic.dll、halmps.dll、halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe解压到C:WindowsHalCache文件夹中。(4)将hal.dll改名为halstnd

11、.dll,将ntoskrnl.exe改名为ntkrnlup.exe。) w0 H6 o c$ m- C(5)将C:WindowsHalCache中所有文件复制到C:WindowsSystem32中,覆盖同名文件。0 8 B C! O( L5 |* K( M! z(6)删除C:WindowsHalCache。) g+ 5 v( u$ p( d2、创建一个.inf文件2 K k% t- t5 q9 在C:WindowsInf文件夹(默认为隐藏属性)中创建一个名为dtecthal.inf的纯文本文件,写入如下内容:: G4 i5 p9 _/ Q1 D; l0 C: X- vVersion8 s! Q

12、! ?4 7 _1 _6 f* S. K9 Psignature=$Windows NT$* d5 2 T8 M! G, PDriverVer=07/01/2001halMPS_MP=halmps.dll, L$ P( ) ? _! V& 2 MMPS_UP=halapic.dllE_ISA_UP=halstnd.dllACPIPIC_UP=halacpi.dll0 P t3 L( Z; K V b& ACPIAPIC_UP=halaacpi.dll9 % u8 L- M0 i4 ACPIAPIC_MP=halmacpi.dll# - P ?3 k) & N: H) xACPIOptions4

13、 z5 ?! W Q) R* T9 : _ACPIEnable=2 z; m 6 Q# q w+ XACPIBiosDate=01,01,19993、修改启动文件8 6 M% z( & : f q$ a; i1 y4 ? XC:NTLDR和C:Boot.ini均为具有隐藏属性的系统文件,且具有只读属性,请去掉这些属性后再做下列操作。(1)备份XP的NTLDR为NTLDR_BAK(这个文件没有后缀名)。 J$ x9 R1 T& N% I(2)将Longhorn的NTLDR复制到C盘根目录下。(3)将Bootfont.bin改名为Bootfont.bin.bak,由于Longhorn的NTLDR加

14、载XP的Bootfont.bin会出现乱码的情况,所以先改名,以备以后恢复。(如果你是英文版系统则没有Bootfont.bin,可略过此步骤)(4)打开Boot.ini,找到XP的启动项,例如:* S/ z4 n8 ; A6 w% c4 I E3 g2 t* h& qmulti(0)disk(0)rdisk(0)partition(1)WINDOWS=Microsoft Windows XP Professional /noexecute=optin /fastdetect2 b. % e5 I2 ; V在最后加入自动检测HAL的参数“/detecthal”:multi(0)disk(0)rd

15、isk(0)partition(1)WINDOWS=Microsoft Windows XP Professional /noexecute=optin /fastdetect /detecthal4、处理掉当前的HAL信息一直有的方法说是把当前的HAL改成Standard PC可以提高兼容性,的确改成这个之后无论HAL是什么样的都不会出现如不能启动这种问题,至多是不能正常关机而已,可以说这个的确有很高的兼容性。但经过一段时间的观察、测试和应用,发现这种方法只是个权宜之计。我们既然有了HAL自动判定,且我们担心源计算机的HAL信息会影响系统在目标计算机中的部署,那么我们直接把当前计算机的HAL做掉好了。% 1 ; % P3 r$ i注册表中“HKEY_LOCAL_MACHINESYSTEMControlSet001EnumACPI_HAL”键和“HKEY_LOCAL_MACHINESYSTEMControlSet001Enum

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 工业自动化

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号