编写设备驱动程序

驱动程序软状态管理

为了协助设备驱动程序编写人员分配状态结构,Solaris DDI/DKI 提供了一组内存管理例程,称为软件状态管理例程,也称为软状态例程。这些例程可动态分配、检索以及销毁指定大小的内存项,并可隐藏列表管理的详细信息。实例编号标识所需的内存项。此编号通常为系统指定的实例编号。

通常,驱动程序会为与其连接的每个设备实例分配软状态结构,方法是调用 ddi_soft_state_zalloc(9F) 并传递设备的实例编号。由于两个设备节点不能具有相同的实例编号,所以对于已经分配出去的给定实例编号,ddi_soft_state_zalloc(9F) 将失败。

驱动程序的字符入口点或块入口点(cb_ops(9S))通过先解码来自传递到入口点函数的 dev_t 参数的设备实例编号,来引用特定的软状态结构。随后,驱动程序调用 ddi_get_soft_state(9F),传递每个驱动程序的软状态列表和生成的实例编号。返回值 NULL 表明实际上不存在该设备并且应由驱动程序返回相应的代码。

有关实例编号和设备编号(dev_t 编号)之间关系的更多信息,请参见创建从设备节点