嵌入式操作系统的目标是构建定制的,最小尺寸的,最快运行速度的基于设备的操作系统。XPE\WES也同样具有这样的构建目标。操作系统尺寸和运行效率是成正比的,更小尺寸的操作系统镜像就会获得更快的运行和启动速度。
    那么如何构建一个最小尺寸的XPE\WES操作系统呢?这是很多朋友一直问我的问题,现在我将常用的精简操作系统的方法整理如下,以供大家参考:
1.使用最新版本的WES开发工具
    微软于2008年10月发布了最新版本的嵌入式XP操作系统开发工具-Windows Embedded Standard 2009。在最新版本的开发工具中,微软除了对配置界面,安装过程,嵌入式功能做了很多优化以外,最主要的改进是对组件和组件间的依赖关系进行了细化和分类。组件的改进表现在使用了很多最新版本的组件,例如:
  • Internet Explorer 7
  • Windows Media Player 11
  • Remote Desktop Protocol(RDP)6.1
  • .Net framework 3.5
    最新版本的组件能够支持更高的安全性,稳定性,兼容性。同时也能够与Windows server 2008和Windows Vista具有很好的交互性。
    组件和组件间的依赖关系更加细化,很多组件之间的依赖关系是可以动态设置的。例如,在WES2009以前版本的XPE操作系统中,只要添加了Core Networking组件,就会关联Windows Firewall/Internet Connection Sharing (ICS)组件。这就意味着只要在XPE操作系统中添加网络功能,就必须添加防火墙组件,而防火墙组件又会关联进来更多的组件,从而导致操作系统尺寸变大。而在WES2009中,通过组件间依赖关系细化,在Core Networking组件的Settings中,我们可以自定义设置是否需要添加Windows Firewall/Internet Connection Sharing (ICS)组件。从而增加了定制的灵活性,减小了操作系统尺寸。
    使用最新版本的开发工具,也可以很大限度的提高系统安全性,因为在新版本中加入了很多的安全补丁。所以,减小嵌入式XP系统尺寸的第一步就是尽可能的使用最新版本的开发工具。
2.保证使用完整的设备文件构建操作系统,合理的裁剪设备文件(.PMQ)
    一个经过优化的设备文件是构建一个稳定,小巧,快速的XPE操作系统的基础。什么是经过优化的设备文件呢?我们知道,设备文件(device.pmq)是通过tap.exe或者ta.exe生成出来的目标机的硬件配置信息。我们建议在目标机上安装XP Professional或者Windows 2000 sp2以上版本,然后通过tap.exe来获取设备文件。而不建议在DOS下通过ta.exe来获取设备文件。这是因为,通过tap.exe生成出来的目标机设备文件是具有完整硬件配置信息的列表,而ta.exe则做不到,他需要我们手动的添加很多的设备信息。
    当然,通过tap.exe生成设备文件也要讲究技巧。首先,我们来认识一下tap.exe是如何获取目标机的设备列表的。当我们在目标机上运行tap.exe的时候,它会扫描注册表中的硬件列表信息,同时把这些信息以xml文件格式整理出来。为了更准确的获取硬件设备信息,就需要目标机上具有一个干净的操作系统。什么是干净的操作系统?就是在安装完XPP后,完整的安装了所有的硬件驱动,保证设备管理器中没有问号或者叹号设备。同时没有再介入过其他设备,例如U盘,移动硬盘,USB光驱,打印机等。因为如果连接了这些设备,那么这些设备的信息都将残留在注册表中而被tap.exe收集到设备文件中。多增加一个外设,在多次关联检查后,可能就会多出来几十个甚至上百个组件。所以我们必须保证tap.exe是在干净的平台上生成设备文件的。
    其次,在生成好的设备文件中,我们也可以手动的删除很多设备驱动,例如,如果我们不需要音频设备,我们可以去掉音频编码解码驱动,声卡驱动,对于USB存储设备,我们可以直接从设备文件中删除,还有一些不常用的打印机及软盘驱动。具体的调整过程需要我们根据实际应用来灵活判断。
  • 音频组件和编码×××
  • 视频捕获和显示组件
  • USB存储设备
  • 打印机
  • 软盘
3. 合理使用组件关联检查
    合理的组件关联检查可以使我们去掉很多体积庞大,但是不需要的组件。例如:Index Service, System Restore Core等组件。我们可以在我们添加的宏组件中通过去掉复选框的方式去掉我们不需要的组件,例如Media Player。对于实在无法去掉的,必须关联进来的组件,我们可以在配置文件的这个组件上点击鼠标右键,把它禁用掉。
4. 尽可能的使用NTFS Compress Format
    使用NTFS文件压缩格式可以有效地节省磁盘空间,但这并不意味着我们的XPE启动速度就会变慢,相反,使用NTFS文件压缩格式甚至还可以提高系统的启动速度。可能有些人会很奇怪的问,使用了NTFS文件压缩格式,在启动的时候,CPU需要处理解压缩的过程,不使用压缩格式肯定是没有这一步的。所以,NTFS文件压缩格式肯定会导致系统启动速度变慢。其实这是一种错误的认识,对于压缩格式来说,是需要多进行解压缩的过程,但是NTFS文件压缩格式在存储格式上进行了很大的优化,所以使操作系统的尺寸会变得很小。试想一下,假如我们要启动一个压缩前400M,压缩后200M的操作系统,当启动的时候,目标机要从一个硬盘或者CF卡上读取一个400M的操作系统并加载到内存中,和读取一个仅有200M的操作系统并加载到内存中,哪一个速度更快一些呢?显然是读取更小的数据会更快。当操作系统必要的引导文件读取到内存中后,在内存中解压缩的过程就是很快的了,至少比从CF卡上再读200M要快的多。所以,使用NTFS文件压缩格式甚至可以有效地提高启动速度。
5. 适当的优化操作系统语言组件支持
  • 如果我们构建的操作系统要支持中文显示,但操作系统界面可以用英文,那么我们可以去掉Chinese - Simplified Language Support中的 Include multilanguage user interface resources,这样可以剩下好几十M的空间。
  • 反过来说,如果希望操作系统使用中文语言,而其他应用支持不需要中文语言界面,则可以在第二次关联检查完成后(就是添加Explorer Shell的时候),去掉Chinese - Simplified Language Support中的Include multilanguage user interface resources,这样,在后续添加的应用中(例如IE,设备管理器,显示属性,添加删除程序等)就不会使用中文界面,也可以有效地节省磁盘空间。
6. 使用Standard PC组件
HAL(硬件抽象层)具有以下组件:
  • ACPI Multiprocessor PC
  • ACPI Uniprocessor PC
  • Advanced Configuration and Power Interface (ACPI) PC
  • Compaq SystemPro Multiprocessor or 100% Compatible
  • MPS Multiprocessor PC
  • MPS Uniprocessor PC
  • Standard PC
    不同的平台具有不同的HAL组件,但是任何平台都可以使用Standard PC,使用这个组件可以具有很好的兼容性,较小的尺寸和较小的组件依赖性。所以我们可以使用Standard PC来缩减我们的系统尺寸。
7. 禁用屏保、桌面图片及主题组件
    禁用屏保、桌面图片及主题组件可以使我们节省几十兆的系统空间。如果我们的设备必须使用这些组件,例如我们的设备可能会长期开机,所以我们需要屏保程序,那么我们也可以采取一些变通的方法。例如我们添加Screen Savers(屏保组件)的同时,打开Screen Savers的Files节点,然后把其中大多数的.scr禁用,只留下一个或者两个屏保就可以了。桌面图片和主题也是一样,这样可以最大限度的节省系统空间。
8. 在满足功能的前提下进行组件优化
  • 使用MinLogon 而不使用Windows Logon
  • 使用较小尺寸的输入法 Microsoft Simplified Chinese Legacy IMEs 替换标准输入法 Microsoft Simplified Chinese IME Core
  • 使用自定义Shell替换标准的Shell
  • 去掉不需要的大尺寸组件:Indexing Service, System Restore Core
  • 去掉系统所有的帮助文件,在工程的Settings中勾选Do not copy help files for this configuration。
9. 调整你的配置文件,尽可能的消除大尺寸组件或者大的依赖性检查
  • Explorer 外壳程序
  • Internet Explorer
  • .NET框架
  • Media Player
我们可以根据自己的操作系统定制需求,有选择性的通过以上九种方法对我们的系统尺寸进行优化,相信能够使我们的XPE操作系统更加小巧和快速。