1.本文主要描述如何开发SMBus类驱动的客户端驱动
(1)应用范围
在计算机主板上,SMBus 应用于和带宽比较低的设备进行通讯。例如电源系统,温度传感器,LID开关
(2)读者对象
本文适用于C编程者,在阅读本文前。你应该有驱动开发的基本知识
(3)系统要求
SMBus设备要求的操作系统为:Microsoft Windows Server 2003,Microsoft Windows XP, and Windows 2000 operating systems。
2.SMBus 驱动客户端
本章描述了在windows 2000或以上的操作系统上,SMBus类驱动的客户端所必要的和可选的功能
(1)SMBus驱动概述
在计算机主板上,SMBus 应用于和带宽比较低的设备进行通讯。例如电源系统,温度传感器,LID开关,或者其他带宽比较低的设备。SMBus通常不是用户可以配置或者访问的。windows 2000或以后的操作系统支持SMBus设备。而windows 98/Me不支持。
一个SMB客户端驱动提供可以对一个SMBus设备进行设备相关访问的能力。一个SMB客户端程序和SMB类驱动(smbclass.sys)进行通讯。如果该设备存在,SMB客户端还和该中类型的设备的类驱动通讯。下图描述了SMB驱动控制一个SMB设备的过程。

SMB驱动
如上图所示,以下驱动涉及到对SMB总线上的某个设备的控制
l SMB类驱动,它和总线,客户端驱动,SMB主控制器通讯。类驱动由微软提供,提供对所有SMB设备的通用的服务。
l SMB主控制器驱动,它是一个必须的和微驱动,用于与SMB类驱动协同工作。SMB类驱动和SMB主控制器驱动通过总线和设备通讯。SMB主控制器驱动也由微软提供。
l SMB 客户端驱动,它发送IRP请求到SMB类驱动进行设备操作。客户端驱动处理SMB设备的即插即用(Pnp)功能。如果该类设备的类驱动存在,客户端驱动和设备类驱动一起处理设备操作,充当功能(function)驱动。
例如,系统提供的智能电源驱动是一个SMB客户端驱动及电源微驱动。即,它既有SMB客户端驱动的功能,也有电源微驱动的功能。它和电源类驱动一起,用作SMB上的只能电源子系统的即插即用(Pnp)功能驱动。
l 设备的类驱动(可选)。如果设备类驱动不存在,上层的过滤驱动直接和SMB客户端驱动通讯。
l 上层过滤驱动(可选)。
(2)SMBus客户端要求的驱动例程
SMB客户端必须提供以下标准的驱动例程
l DriverEntry,用于初始化客户端。
l AddDevice,用于初始化设备。
l Unload,用于卸载客户端。
l 一个或者更多的Dispatch例程用于处理以下的IRPs:
n IRP_MJ_CREATE
n IRP_MJ_CLOSE
n IRP_MJ_DEVICE_CONTROL
n IRP_MJ_PNP
n IRP_MJ_POWER
一个SMB客户端驱动必须包括smbus.h头文件。
(3)SMBus客户端的DriverEngry例程
一个SMB客户端必须有DriverEngry例程,函数DriverEntry是必须的,用于操作系统在装载驱动的时候调用。DriverEngry例程函数必须和系统提供的原型一致。
SMBus客户端的DriverEngry例程
(4)SMBus客户端的AddDriver例程
(5)SMBus客户端的Unload例程
(6)SMBus客户端的Dispatch例程
(7)发送一个SMB请求
(8)请求和响应一个SMB报警通知
(9)安装一个SMB客户端驱动
MegaEntry 网络社区与信息交流平台!