Windows CE 5.0:驱动程序---可插拔的编解码器要求
加载设备驱动程序
当 OEMInit 执行时,应当启动以太网调试、串行调试或其他任何调试方法。下列位置存储了这些调试方法的资源信息:
• | 启动加载程序中的启动参数。启动参数提供了以特定方式设置硬件的资源信息。 例如,以太网调试适配器的中断请求 (IRQ) 可以作为启动参数进行传递。 |
• | OAL 中的硬编码资源信息。 |
• | 资源可由 OAL 发现。 |
另外,注册表可能包含该资源信息的副本。如果调试资源保持不变并且事先已知,则请在注册表中存储该资源信息的副本。这使设备管理器可以加载、执行然后启动 I/O 资源管理器,而后者会从注册表中读取这些可用资源。
OAL 可能需要配置和枚举总线(例如 PCI 总线)以操作用于调试服务的设备。例如,需要对 PCI 总线上用于以太网调试服务的以太网适配器的资源和中间桥进行配置,以使其正常工作。可以忽略其他设备,因为 PCI 总线驱动程序执行配置和枚举。
资源信息配置调试设备并初始化它们的关联服务。OAL 负责将该资源信息放在注册表项中并使其可供驱动程序访问。OAL 使用注册表 Helper 函数在 PCI_REG_INFO 结构(定义在 PCIReg.h 中)中填写设备的信息。然后,OS 用 IOCTL_HAL_INITREGISTRY 调用 KernelIoControl,以使要调用的 Helper 函数 PCIReg 填充注册表。如果调试资源在启动时可以选择,或者如果它们是通过总线枚举发现的,或者如果这两者都成立,则该方法是首选方法。
设备管理器从 HKEY_LOCAL_MACHINE/RootKey 中加载总线枚举器,其中 RootKey 是在 HKEY_LOCAL_MACHINE/Drivers key 下定义的值。如果 RootKey 值未定义,则默认为 Drivers。当前,Common.reg 将 RootKey 设置为等于 Drivers/BuiltIn。这意味着设备管理器在 HKEY_LOCAL_MACHINE/Drivers/BuiltIn 下寻找 Dll 值以加载总线枚举器。总线枚举器 BusEnum.dll 初始化相应的过程,以便在注册表中扫描要为 RootKey 的子项加载的其他总线和设备。
某些 RootKey 子项描述内置的或可能固定的 ISA 总线。所加载的 DLL 可能是 BusEnum.dll 或您选择的其他任何总线驱动程序。
RootKey 子项之一可能是 PCI。通常,列在 PCI 项下的 DLL 是 PCI 总线驱动程序(它由 BusEnum.dll 加载)。PCI 总线驱动程序的注册表条目包含 PCI 总线可用的资源。通常, HKEY_LOCAL_MACHINE/RootKey/PCI/Order 值被设置以便 PCI 总线驱动程序最后加载,这会使所有固定资源在 PCI 设备的灵活资源被配置之前得以分配。驱动程序注册表条目列在 PCI 项下,该项表示驻留在 PCI 总线上的设备。
下表显示了 PCI 总线驱动程序通过关联的物理设备使用或生成的值。
子项 | 类型 | 说明 |
MemBase | DWORD 或 MULTI_SZ | 内存映射 I/O 的基本地址。 |
MemLen | DWORD 或 MULTI_SZ | 相应于 Membase 的内存映射范围的长度。 |
IoBase | DWORD 或 MULTI_SZ | 端口映射 I/O 的基本地址。 |
IoLen | DWORD 或 MULTI_SZ | 相应于 IoBase 的端口映射范围的长度。 |
InterfaceType | DWORD 或 MULTI_SZ | 硬件接口类型。有关详细信息,请参阅 INTERFACE_TYPE。 |
Irq | DWORD 或 MULTI_SZ | 可选。逻辑 IRQ 号。 |
SysIntr | DWORD 或 MULTI_SZ | 相应于 IRQ 的系统中断号。 |
SysIntr 值是由 OAL 指定的 Irq 的映射。某些总线驱动程序(例如,PCI 总线驱动程序)生成 Irq 和 SysIntr 这两个值并将它们写入注册表。如果 BusEnum.dll 枚举注册表项,则需要在适当的注册表文件中设置 SysIntr 值。
某些总线驱动程序(例如,PCI 总线驱动程序)可能需要其他值。例如,PCI 总线驱动程序必须区分相同设备的实例。
下表显示了这些其他标识值。
子项 | 类型 | 说明 |
BusNumber | DWORD | 设备的 PCI 总线号。 |
DeviceNumber | DWORD | 总线上的设备的编号。 |
FunctionNumber | DWORD | 标识该设备上实现的八个可能函数中的一个。 |
在枚举注册表之后,总线枚举器会加载所有内置设备的驱动程序和它在系统中识别的所有总线驱动程序。总线驱动程序随后会负责加载它们的总线上的设备的驱动程序。例如,PCMCIA 主机控制器驱动程序加载所有 PC 卡客户端设备的驱动程序。
设备特有注册表项驻留在适当的总线驱动程序注册表项中,而不是驻留在设备管理器中。总线驱动程序应当加载它们的客户端驱动程序,而您应当相应地更新总线驱动程序注册表条目。
另请参阅