有些操作可由任何类型的驱动程序执行,如装入模块所需的函数以及必需的自动配置入口点所需的函数。本节介绍通用于所有驱动程序的入口点类型。Summary of Common Entry Points中列出了通用入口点,并包含指向手册页以及其他相关讨论的链接。
字符设备和块设备的驱动程序导出 cb_ops(9S) 结构,该结构定义用于块设备访问和字符设备访问的驱动程序入口点。这两种类型的驱动程序都需要支持 open(9E) 和 close(9E) 入口点。块驱动程序需要支持 strategy(9E),而字符驱动程序可选择实现适用于设备类型的 read(9E)、write(9E)、ioctl(9E)、mmap(9E) 或 devmap(9E) 入口点的任意组合。字符驱动程序还可通过 chpoll(9E) 支持轮询接口。块驱动程序以及那些可使用块文件系统和字符文件系统的驱动程序可通过 aread(9E) 和 awrite(9E) 支持异步 I/O。
所有驱动程序都需要实现可装入模块入口点 _init(9E)、_fini(9E) 和 _info(9E),以便装入、卸载和报告有关驱动程序模块的信息。
驱动程序应在 _init(9E) 中分配并初始化所有全局资源,驱动程序应在 _fini(9E) 中释放其资源。
对于设备自动配置,驱动程序需要实现 attach(9E)、detach(9E) 和 getinfo(9E) 入口点。设备(如 SCSI 目标设备)在引导过程中无法标识自己时,驱动程序还可以实现可选入口点 probe(9E)。有关这些例程的更多信息,请参见Chapter 6, Driver Autoconfiguration。
Oracle Solaris 平台提供了一组丰富的接口来维护和导出内核级统计信息(也称为 kstat)。驱动程序可以自由使用这些接口导出驱动程序和设备的统计信息,用户应用程序可使用这些统计信息来查看驱动程序的内部状态。提供了两个入口点来处理内核统计信息:
ks_snapshot(9E),可在特定时间捕获 kstat。
ks_update(9E),可用于根据需要更新 kstat 数据。在设置设备来跟踪内核数据但是提取该数据很耗时的情况下,ks_update() 非常有用。
有关更多信息,请参见 kstat_create(9F) 和 kstat(9S) 手册页。另请参见Kernel Statistics。
提供电源管理功能的硬件设备的驱动程序可支持可选的 power(9E) 入口点。有关此入口点的详细信息,请参见Chapter 12, Power Management。
对设备进行管理的驱动程序必须实现 quiesce(9E) 入口点。不管理设备的驱动程序可以将 dev_ops 结构中的 devo_quiesce 字段设置为 ddi_quiesce_not_needed ()。只有当处于高 PIL(priority interrupt level,优先中断级别)且禁用了抢占的系统是单线程时,才可以调用 quiesce() 函数。因此,该函数不得阻塞。如果设备有一个已定义的重置状态配置,则作为停止操作的一部分,驱动程序应当将该设备返回为相应的重置状态。此类情况的一个示例是快速重新引导,在这种情况下,当引导到新的操作系统映像时将绕过固件。
下表列出了所有类型驱动程序都可使用的入口点。
|