编写设备驱动程序

事件介绍

事件是指设备驱动程序向相关实体发送的消息,用以指示发生了状态更改。在 Solaris OS 中,事件以用户定义的名称-值对结构的形式实现,这些结构使用 nvlist* 函数进行管理。(请参见 nvlist_alloc(9F) 手册页。)事件由供应商、类以及子类组成。例如,可以定义一个类用于监视环境条件。环境类可以具有子类,用来指示温度、风扇状态以及电源方面的变化。

发生状态更改时,设备将通知驱动程序。驱动程序随后将使用 ddi_log_sysevent(9F) 函数在称为 sysevent 的队列中记录此事件。sysevent 队列会将事件传递到用户级,以便通过 syseventd 守护进程或 syseventconfd 守护进程进行处理。这些守护进程会将通知发送到订阅了指定事件通知的所有应用程序。

用户级应用程序的设计者可以使用以下两种方法处理事件:

下图对此流程进行了说明。

图 5–1 事件检测

图中显示如何将事件记录到 sysevent 队列中,以通知用户级应用程序。