签到天数: 1092 天 连续签到: 0 天 [LV.10]逍遥海仙III
|
本文,介绍了XPE设备驱动组件的一般开发过程,给出了创建设备驱动列表组件的最佳办法,同时对驱动组件开发可能存在的几个问题提出了解决办法,对于设备驱动组件开发及测试具有一定的帮助作用。
设备驱动组件开发是XPE系统构建过程中重要的一个环节,因为其与目标设备关系比较紧密,能够快速完成设备驱动程序组件的开发工作,无疑为后继工作奠定一个良好的开始。
XPE设备驱动组件一般开发过程
1. 使用tap生成硬件配置文件(devices.pmq)
2. 将pmq文件导入组件设计器创建一个组件宏,并对硬件设备进行选择配置
3. 制作显卡、声卡、网卡等设备驱动程序组件
4. (2)、(3)生成的组件都分别导入到组件数据库管理中
5. 在目标设计器中,创建新配置,添加(2)、(3)制作的设备组件,添加其他相关组件,检查依赖,编译生成目标系统映像,并进行测试
1. 使用tap生成设备列表配置文件
最佳方式是使用XPE SP1安装盘光盘启动WinPE环境并运行TAP.exe,为目标系统生成硬件配置文件。因此,这里需要知道第一张Windows XP Embedded with Service Pack 1安装盘是一个可启动的WinPE映像。
光盘启动进入WinPE环境中,运行tap生成pmq文件:
tap /o E:\Dev-HW.pmq
这样生成的pmq文件输出到了E盘。前提这里硬盘上已经安装有操作系统,在WinPE环境下,能找到对应的E盘。
这样生成硬件配置文件的方法是最佳做法,因为产生了用于创建最低配置运行时映像的最佳结果。TAP.exe在WinPE环境中找到了真正需要的几乎所有设备。它会找到所有核心父设备(如外围设备互联PCI和图形加速端口AGP设备)、正确的系统硬件抽象层(HAL)、磁盘驱动器和CD-ROM驱动器、启动系统所需的系统芯片组和关键启动设备以及一些通用串行总线(USB)设备支持[1]。
2. 将pmq文件导入组件设计器创建一个组件宏,并对硬件设备进行选择配置
组件设计器中,菜单File->Import,选择导入文件类型为pmg,导入成功后,创建了一个组件宏。
组件属性配置:
Name:*** Device Component
Owners, Authors, Vendor, CopyRight, Description等属性都可以进行相应修改。
选择原型组件(Prototype):Selector Prototype Component
原型组件位置:Software : Test & Development : Selector Prototype Component[version: ***]
(我这里包含有三个版本,选择了最新的版本)
硬件选择配置:
在Component or Group Dependency中,可以看到关联的所有组件。
如果想去掉某一组件,只需右键单击该组件,选择disable即可。(我这里简单包含了所有设备组件)
查看所有组件,可以发现像显卡、网卡、声卡等组件都有正确关联,可见前面使用tap生成硬件配置文件的方法很实用。但是像显卡、网卡、声卡等组件,如果没有为之创建设备驱动组件,单纯靠该设备组件,在检查依赖时,也是没法添加进来的,还需要为之创建相应组件后,将其添加到系统映像配置中。
3. 制作显卡、声卡、网卡等设备驱动程序组件
首先在目标机器上正确安装显卡、声卡及网卡的设备驱动。(这里需要提一下,我的开发和测试都部署在了目标机顶盒设备上,双硬盘,双系统引导,因此开发环境跟目标环境设备驱动都一样,可以直接在开发环境中制作驱动程序组件。)
然后使用Windows优化大师的智能备份工具,分别备份显卡、声卡和网卡的设备驱动程序文件。
大部分设备驱动都提供以.inf的安装方式,可以通过导入inf文件到组件设计器中创建设备驱动程序组件,组件保存为.sld文件。
在开始导入的过程中,遇到的两个问题:
(1)注册表错误,如提示“An error occurred when trying to add a registry resource HKEY_LOCAL_MACHINE\Software\Intel\Display\.”
发现像是注册表添加语句的语法错误,修改.inf文件,查找到添加注册表项的行:
HKLM, “Software\Intel\Display”
这实际是添加了一个注册表项,REG_SZ类型,值为空,修改上面语句为:
HKLM, “Software\Intel\Display”,,,
再次导入时,就不会有注册表添加错误了。
(2)vendor错误,如提示”An error occurred while getting the vendors list section name. ”
这个对应.inf文件中的[Manufacturer]项,基本问题是制造商列表中,有项没有Section对应。简单解决,就是将不存在的制造商名称删除,重新导入时,就不会出现该错误了。比如:
[Manufacturer]
%MfgName% = AzaliaManufacturerID, NTX86.6.0
[AzaliaManufacturerID, NTX86.6.0]
; Can not install on vista
[AzaliaManufacturerID]
…… <相应内容> ……
将[Manufacturer]修改为:
%MfgName% = AzaliaManufacturerID
在使用inf文件导入创建组件过程中,发现:一般inf文件中会同时支持几个系列的设备驱动安装,在正常安装过程中,会选取正确的设备驱动组件。如果只希望添加与设备对应的组件,可以通过修改inf文件,将其他系列的驱动组件注释掉,再重新导入,就能够只包含所需的驱动程序组件了。
如显卡驱动Intel(R) Graphics Media Accelerator Driver,支持多个系列的芯片集,在inf文件中,如下:
[Manufacturer]
%Intel% = Intel.Mfg
[Intel.Mfg]
%iBWGX0% = i965G0, PCI\VEN_8086&DEV_2982
%iBWGX1% = i965G1, PCI\VEN_8086&DEV_2983
%iBWGQ0% = i965G0, PCI\VEN_8086&DEV_2992
%iBWGQ1% = i965G1, PCI\VEN_8086&DEV_2993
%iBWGC0% = i965G0, PCI\VEN_8086&DEV_29A2
%iBWGC1% = i965G1, PCI\VEN_8086&DEV_29A3
%iBWGZ0% = i965G0, PCI\VEN_8086&DEV_2972
%iBWGZ1% = i965G1, PCI\VEN_8086&DEV_2973
%iCRGD0% = i965GM0, PCI\VEN_8086&DEV_2A02
%iCRGD1% = i965GM1, PCI\VEN_8086&DEV_2A03
%iCRGE0% = i965GM0, PCI\VEN_8086&DEV_2A12
%iCRGE1% = i965GM0, PCI\VEN_8086&DEV_2A13
%iBLBG0% = iBLB0, PCI\VEN_8086&DEV_29C2
%iBLBG1% = iBLB1, PCI\VEN_8086&DEV_29C3
%iBLBQ0% = iBLB0, PCI\VEN_8086&DEV_29B2
%iBLBQ1% = iBLB1, PCI\VEN_8086&DEV_29B3
%iBLBQC0% = iBLB0, PCI\VEN_8086&DEV_29D2
%iBLBQC1% = iBLB1, PCI\VEN_8086&DEV_29D3
%iCNTG0% = iCNT0, PCI\VEN_8086&DEV_2A42
%iCNTG1% = iCNT1, PCI\VEN_8086&DEV_2A43
%iEGLG0% = iEGL0, PCI\VEN_8086&DEV_2E02
%iEGLG1% = iEGL1, PCI\VEN_8086&DEV_2E03
%iEGLQ4G0% = iEGL0, PCI\VEN_8086&DEV_2E12
%iEGLQ4G1% = iEGL1, PCI\VEN_8086&DEV_2E13
%iEGLG4G0% = iEGL0, PCI\VEN_8086&DEV_2E22
%iEGLG4G1% = iEGL1, PCI\VEN_8086&DEV_2E23
%iEGLGVG0% = iEGL0, PCI\VEN_8086&DEV_2E32
%iEGLGVG1% = iEGL1, PCI\VEN_8086&DEV_2E33
在实际安装的过程中,只需要Intel(R) G45/G43 Express Chipset ,保留
%iEGLG4G0% = iEGL0, PCI\VEN_8086&DEV_2E22
%iEGLG4G1% = iEGL1, PCI\VEN_8086&DEV_2E23
其他的使用“;”注释掉,重新导入就行了。
然后为组件建立Repository,设置源路径为设备驱动文件备份的路径。
右键单击组件,选择“Release”,发布组件。
4. (2)、(3)生成的组件都分别导入到组件数据库管理中
打开组件数据管理库,Database页面中单击“Import”,然后选择sld组件文件,点击Import,将组件成功添加到组件数据库中。
5. 在目标设计器中,创建新配置,添加(2)、(3)制作的设备组件,添加其他相关组件,检查依赖,编译生成目标系统映像,并进行测试
目标设备设置(Settings –> Target Device Settings):
Boot drive C:
Windows folder D:\WINDOWS
Program Files folder D:\Program Files
Documents and Settings folder D:\Documents and Settings
Boot ARC path multi(0)disk(0)rdisk(1)partition(1)
Boot partition size (MB) 2048
Partition cluster size (bytes) 4096
我的目标设备为第二块硬盘的第一个分区,Boot ARC path设置肯定没有问题,但是盘符D:可能会存在问题,我在开发环境中盘符为E:,但是进入目标环境,对应盘符为D:。这个如果设置错误的话,第一次运行FBA时,会不断的进行重启,这时只需要检查下E:\WINDOWS\FBA\FBALOG.TXT文件中,是否有“Invalid Path”提示,有的话,按照日志文件中提示“应该是D:”进行修改就可以了。
修改C:\Boot.ini文件,添加行
multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Microsoft Windows XP Embedded" /fastdetect /noexecute=AlwaysOff
添加其他组件和宏
添加宏:Runtime Quick Start Helper Macro
添加组件支持程序安装:Class Installers / Hardware Compatibility 和 Windows Installer Service
添加.NET Framework 2.0支持:.NET Framework 2.0
添加宏支持网络应用(可裁减,检查网卡驱动运行是否正常):Networking Application Compatibility
添加设备管理器(检查设备驱动组件安装情况):Device Manager
添加注册表编辑器(有时需要修改注册表解决某些问题):Registry Editor
修改显卡驱动设备组件,设置其分辨率
F5检查依赖,没有错误后,F7创建目标映像,如果运行PID留空的话,正常只有一个警告。
将映像复制到E:,重启系统,选择“Microsoft Windows XP Embedded”,FBA安装配置正常,进入系统后,对设备驱动进行测试。
通过设备管理器,检查设备驱动是否安装成功,通过声卡驱动自带配置工具,测试声卡,配置网络,使用浏览器运行测试网络情况。 |
<
|