编写设备驱动程序

设备信息库接口

LDI 中包括用于报告设备分层信息快照的 libdevinfo(3LIB) 接口。如果系统中的一个设备是同一系统中另一个设备的使用方,则会发生设备分层。仅当使用方和目标都绑定到快照中包含的设备节点时,才会报告设备分层信息。

libdevinfo(3LIB) 接口以有向图的形式报告设备分层信息。lnode 是一个抽象术语,在图中表示顶点,并被绑定到设备节点。可以使用 libdevinfo(3LIB) 接口来访问 lnode 的属性,如节点的名称和设备编号。

图中的边表示链接。链接既有表示设备使用方的源 lnode,也有表示目标设备的目标 lnode。

下面介绍了 libdevinfo(3LIB) 设备分层信息接口:

DINFOLYR

通过它来捕获设备分层信息的快照标志。

di_link_t

两个端点之间的有向链接。每个端点都是一个 di_lnode_t。属于不透明结构。

di_lnode_t

链接的端点。属于不透明结构。di_lnode_t 绑定到 di_node_t

di_node_t

表示设备节点。属于不透明结构。di_node_t 不一定绑定到 di_lnode_t

di_walk_link(3DEVINFO)

遍历快照中的所有链接。

di_walk_lnode(3DEVINFO)

遍历快照中的所有 lnode。

di_link_next_by_node(3DEVINFO)

获取下一个其中指定的 di_node_t 节点是源节点或目标节点的链接的句柄。

di_link_next_by_lnode(3DEVINFO)

获取下一个其中指定的 di_lnode_t lnode 是源 lnode 或目标 lnode 的链接的句柄。

di_link_to_lnode(3DEVINFO)

获取与 di_link_t 链接的指定端点对应的 lnode。

di_link_spectype(3DEVINFO)

获取链接的规范类型。规范类型指示如何访问目标设备。目标设备由目标 lnode 表示。

di_lnode_next(3DEVINFO)

获取下一个与指定的 di_node_t 设备节点关联的指定 di_lnode_t lnode 的句柄。

di_lnode_name(3DEVINFO)

获取与指定 lnode 关联的名称。

di_lnode_devinfo(3DEVINFO)

获取与指定 lnode 关联的设备节点的句柄。

di_lnode_devt(3DEVINFO)

获取与指定 lnode 关联的设备节点的设备编号。

LDI 返回的设备分层信息可能十分复杂。因此,LDI 提供了一些接口来协助遍历设备树和设备使用情况图。通过这些接口,设备树快照的使用方可以将自定义数据指针与快照中的不同结构关联。例如,应用程序遍历 lnode 时,它可以更新与每个 lnode 关联的自定义指针,以标记已经识别的 lnode。

下面介绍了 libdevinfo(3LIB) 节点和链接标记接口:

di_lnode_private_set(3DEVINFO)

将指定的数据与指定的 lnode 关联。通过此关联,可以遍历快照中的 lnode。

di_lnode_private_get(3DEVINFO)

检索指向通过调用 di_lnode_private_set(3DEVINFO) 而与 lnode 关联的数据的指针。

di_link_private_set(3DEVINFO)

将指定的数据与指定的链接关联。通过此关联,可以遍历快照中的链接。

di_link_private_get(3DEVINFO)

检索指向通过调用 di_link_private_set(3DEVINFO) 而与链接关联的数据的指针。