编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

事件简介

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

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

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

  • 应用程序可以使用 libsysevent(3LIB) 中的例程向 syseventd 守护进程订阅发生指定事件时的通知。

  • 开发者可以编写单独的用户级应用程序来响应事件。此类型应用程序需要通过 syseventadm(1M) 进行注册。当 syseventconfd 遇到指定的事件时,应用程序会根据实际情况运行并处理此事件。

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

图 5-1  事件检测

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